17 #ifndef SDF_ELEMENT_HH_
18 #define SDF_ELEMENT_HH_
38 #pragma warning(disable: 4251)
46 inline namespace SDF_VERSION_NAMESPACE {
74 public std::enable_shared_from_this<Element>
111 public:
void SetName(
const std::string &_name);
176 bool _includeDefaultElements,
177 bool _includeDefaultAttributes,
187 int _spacing,
int &_index)
const;
195 int _spacing,
int &_index)
const;
202 const std::string &_prefix,
215 const std::string &_prefix,
216 bool _includeDefaultElements,
217 bool _includeDefaultAttributes,
228 const std::string &_type,
229 const std::string &_defaultvalue,
231 const std::string &_description =
"");
242 const std::string &_type,
243 const std::string &_defaultvalue,
246 const std::string &_description =
"");
255 const std::string &_defaultValue,
bool _required,
256 const std::string &_description =
"");
266 const std::string &_defaultValue,
bool _required,
268 const std::string &_description =
"");
280 const std::string &_defaultValue,
bool _required,
281 const std::string &_minValue,
282 const std::string &_maxValue,
283 const std::string &_description =
"");
296 const std::string &_defaultValue,
bool _required,
297 const std::string &_minValue,
298 const std::string &_maxValue,
300 const std::string &_description =
"");
364 public: std::any
GetAny(
const std::string &_key =
"")
const;
372 const std::string &_key =
"")
const;
380 public:
template<
typename T>
381 T Get(
const std::string &_key =
"")
const;
389 public:
template<
typename T>
390 std::pair<T, bool> Get(
const std::string &_key,
391 const T &_defaultValue)
const;
399 public:
template<
typename T>
400 bool Get(
const std::string &_key,
402 const T &_defaultValue)
const;
407 public:
template<
typename T>
408 bool Set(
const T &_value);
457 const std::string &_type,
458 const std::vector<std::string> &_ignoreElements)
const;
467 public: std::map<std::string, std::size_t>
481 const std::string &_type,
482 const std::vector<std::string> &_ignoreElements)
const;
669 private:
void ToString(
const std::string &_prefix,
670 bool _includeDefaultElements,
671 bool _includeDefaultAttributes,
673 std::ostringstream &_out)
const;
681 private:
void PrintValuesImpl(
const std::string &_prefix,
682 bool _includeDefaultElements,
683 bool _includeDefaultAttributes,
685 std::ostringstream &_out)
const;
696 private:
ParamPtr CreateParam(
const std::string &_key,
697 const std::string &_type,
698 const std::string &_defaultValue,
701 const std::string &_description =
"");
704 private: std::unique_ptr<ElementPrivate> dataPtr;
784 std::ostringstream &_out)
const;
793 std::pair<T, bool> ret = this->Get<T>(_key, result);
802 const T &_defaultValue)
const
804 std::pair<T, bool> ret = this->Get<T>(_key, _defaultValue);
812 const T &_defaultValue)
const
814 std::pair<T, bool> result(_defaultValue,
true);
816 if (_key.empty() && this->dataPtr->value)
818 this->dataPtr->value->Get<T>(result.first);
820 else if (!_key.empty())
825 param->Get(result.first);
837 result.second =
false;
842 result.second =
false;
852 if (this->dataPtr->value)
854 this->dataPtr->value->Set(_value);
Definition: Element.hh:710
bool explicitlySetInFile
True if the element was set in the SDF file.
Definition: Element.hh:770
ElementWeakPtr parent
Element's parent.
Definition: Element.hh:724
std::string description
Element description.
Definition: Element.hh:718
void PrintAttributes(bool _includeDefaultAttributes, const PrintConfig &_config, std::ostringstream &_out) const
Generate the string (XML) for the attributes.
ElementPtr_V elements
Definition: Element.hh:733
std::string referenceSDF
Name of reference sdf.
Definition: Element.hh:761
bool copyChildren
True if element's children should be copied.
Definition: Element.hh:721
Param_V attributes
Definition: Element.hh:727
std::string required
True if element is required.
Definition: Element.hh:715
ParamPtr value
Definition: Element.hh:730
std::string name
Element name.
Definition: Element.hh:712
ElementPtr_V elementDescriptions
Definition: Element.hh:736
std::string originalVersion
Spec version that this was originally parsed from.
Definition: Element.hh:767
std::string xmlPath
XML path of this element.
Definition: Element.hh:776
std::string path
Path to file where this element came from.
Definition: Element.hh:764
std::optional< int > lineNumber
Line number in file where this element came from.
Definition: Element.hh:773
ElementPtr includeElement
The element that was used to load this entity.
Definition: Element.hh:758
SDF Element class.
Definition: Element.hh:75
void SetOriginalVersion(const std::string &_version)
Set the spec version that this was originally parsed from.
const std::string & GetRequired() const
Get the requirement string.
void Copy(const ElementPtr _elem)
Copy values from an Element.
void RemoveChild(ElementPtr _child)
Remove a child element.
std::string GetDescription() const
Get a text description of the element.
size_t GetAttributeCount() const
Get the number of attributes.
ElementPtr GetNextElement(const std::string &_name="") const
Get the next sibling of this element.
ParamPtr GetValue() const
Get the param of the elements value return A Param pointer to the value of this element.
bool HasElementDescription(const std::string &_name) const
Return true if an element description exists.
void AddElementDescription(ElementPtr _elem)
Add a new element description.
const std::string & FilePath() const
Get the path to the SDF document where this element came from.
void Clear()
Remove all child elements and reset file path and original version.
void Reset()
Call reset on each element and element description before deleting all of them.
std::string ReferenceSDF() const
Get the name of the reference SDF element.
void Update()
Call the Update() callback on each element, as well as the embedded Param.
void PrintValues(const std::string &_prefix, bool _includeDefaultElements, bool _includeDefaultAttributes, const PrintConfig &_config=PrintConfig()) const
Output Element's values to stdout.
const std::string & OriginalVersion() const
Get the spec version that this was originally parsed from.
void SetLineNumber(int _lineNumber)
Set the line number of this element within the SDF document.
ElementPtr AddElement(const std::string &_name, sdf::Errors &_errors)
Add a named element.
void SetRequired(const std::string &_req)
Set the requirement type.
std::string ToString(const std::string &_prefix, bool _includeDefaultElements, bool _includeDefaultAttributes, const PrintConfig &_config=PrintConfig()) const
Convert the element values to a string representation.
void RemoveAttribute(const std::string &_key)
Remove an attribute.
void SetCopyChildren(bool _value)
Set whether this element should copy its child elements during parsing.
const Param_V & GetAttributes() const
Get all the attribute params.
void InsertElement(ElementPtr _elem)
Add an element object.
bool GetAttributeSet(const std::string &_key) const
Return true if the attribute was set (i.e.
void RemoveAllAttributes()
Removes all attributes.
void Copy(const ElementPtr _elem, sdf::Errors &_errors)
Copy values from an Element.
void SetIncludeElement(sdf::ElementPtr _includeElem)
Set the element that was used to load this element.
void ClearElements()
Remove all child elements.
void AddValue(const std::string &_type, const std::string &_defaultValue, bool _required, const std::string &_minValue, const std::string &_maxValue, const std::string &_description="")
Add a value to this Element.
bool HasUniqueChildNames(const std::string &_type, const std::vector< std::string > &_ignoreElements) const
Checks whether any child elements of the specified element type, except those listed in _ignoreElemen...
void SetExplicitlySetInFile(const bool _value)
Set if the element and children where set or default in the original file.
void InsertElement(ElementPtr _elem, bool _setParentToSelf)
Add an element object, and optionally set the given element's parent to this object.
ElementPtr GetElementImpl(const std::string &_name) const
Get a pointer to the named element.
ElementPtr GetElementDescription(const std::string &_key) const
Get an element description using a key.
void AddAttribute(const std::string &_key, const std::string &_type, const std::string &_defaultvalue, bool _required, sdf::Errors &_errors, const std::string &_description="")
Add an attribute value.
void SetParent(const ElementPtr _parent)
Set the parent of this Element.
void PrintDocRightPane(std::string &_html, int _spacing, int &_index) const
Helper function for SDF::PrintDoc.
std::any GetAny(sdf::Errors &_errors, const std::string &_key="") const
Get the element value/attribute as a std::any.
std::map< std::string, std::size_t > CountNamedElements(const std::string &_type, const std::vector< std::string > &_ignoreElements) const
Count the number of child elements of the specified element type that have the same name attribute va...
std::optional< int > LineNumber() const
Get the line number of this element within the SDF document.
ParamPtr GetAttribute(const std::string &_key) const
Get the param of an attribute.
bool GetCopyChildren() const
Return true if this Element's child elements should be copied during parsing.
ElementPtr GetElementDescription(unsigned int _index) const
Get an element description using an index.
sdf::ElementPtr GetIncludeElement() const
Get the element that was used to load this element.
void SetXmlPath(const std::string &_path)
Private data pointer.
void RemoveFromParent()
Remove this element from its parent.
bool GetExplicitlySetInFile() const
Return if the element was been explicitly set in the file.
std::any GetAny(const std::string &_key="") const
Get the element value/attribute as a std::any.
void AddValue(const std::string &_type, const std::string &_defaultValue, bool _required, const std::string &_description="")
Add a value to this Element.
void PrintDescription(const std::string &_prefix) const
Output Element's description to stdout.
std::map< std::string, std::size_t > CountNamedElements(const std::string &_type="") const
Count the number of child elements of the specified element type that have the same name attribute va...
void PrintValues(std::string _prefix, const PrintConfig &_config=PrintConfig()) const
Output Element's values to stdout.
void AddAttribute(const std::string &_key, const std::string &_type, const std::string &_defaultvalue, bool _required, const std::string &_description="")
Add an attribute value.
void AddValue(const std::string &_type, const std::string &_defaultValue, bool _required, sdf::Errors &_errors, const std::string &_description="")
Add a value to this Element.
bool HasAttribute(const std::string &_key) const
Return true if an attribute exists.
bool HasElement(const std::string &_name) const
Return true if the named element exists.
void PrintDocLeftPane(std::string &_html, int _spacing, int &_index) const
Helper function for SDF::PrintDoc.
void SetDescription(const std::string &_desc)
Set a text description for the element.
ElementPtr Clone(sdf::Errors &_errors) const
Create a copy of this Element.
const std::string & XmlPath() const
Get the XML path of this element.
ParamPtr GetAttribute(unsigned int _index) const
Get an attribute using an index.
std::set< std::string > GetElementTypeNames() const
Get set of child element type names.
static std::vector< std::string > NameUniquenessExceptions()
List of elements to which exceptions are made when checking for name uniqueness.
bool HasUniqueChildNames(const std::string &_type="") const
Checks whether any child elements of the specified element type have identical name attribute values ...
ElementPtr AddElement(const std::string &_name)
Add a named element.
ElementPtr Clone() const
Create a copy of this Element.
std::string ToString(const std::string &_prefix, const PrintConfig &_config=PrintConfig()) const
Convert the element values to a string representation.
ElementPtr GetElement(const std::string &_name, sdf::Errors &_errors)
Return a pointer to the child element with the provided name.
void SetReferenceSDF(const std::string &_value)
Set reference SDF element.
void RemoveChild(ElementPtr _child, sdf::Errors &_errors)
Remove a child element.
virtual ~Element()
Destructor.
size_t GetElementDescriptionCount() const
Get the number of element descriptions.
void AddValue(const std::string &_type, const std::string &_defaultValue, bool _required, const std::string &_minValue, const std::string &_maxValue, sdf::Errors &_errors, const std::string &_description="")
Add a value to this Element.
ElementPtr GetFirstElement() const
Get the first child element.
ElementPtr FindElement(const std::string &_name)
Return a pointer to the child element with the provided name.
ElementPtr GetElement(const std::string &_name)
Return a pointer to the child element with the provided name.
ElementConstPtr FindElement(const std::string &_name) const
Return a pointer to the child element with the provided name.
ElementPtr GetParent() const
Get a pointer to this Element's parent.
void SetFilePath(const std::string &_path)
Set the path to the SDF document where this element came from.
const std::string & GetName() const
Get the Element's name.
void SetName(const std::string &_name)
Set the name of the Element.
This class contains configuration options for printing elements.
Definition: PrintConfig.hh:33
T Get(const std::string &_key="") const
Get the value of a key.
Definition: Element.hh:789
bool Set(const T &_value)
Set the value of this element.
Definition: Element.hh:850
std::shared_ptr< Param > ParamPtr
Definition: Param.hh:70
std::vector< ParamPtr > Param_V
Definition: Param.hh:74
std::vector< ElementPtr > ElementPtr_V
Definition: Element.hh:66
std::shared_ptr< const Element > ElementConstPtr
Definition: Element.hh:58
std::vector< Error > Errors
A vector of Error.
Definition: Types.hh:80
std::weak_ptr< Element > ElementWeakPtr
Definition: Element.hh:62
std::shared_ptr< Element > ElementPtr
Definition: Element.hh:54
namespace for Simulation Description Format parser
Definition: Actor.hh:35
#define SDFORMAT_VISIBLE
Use to represent "symbol visible" if supported.
Definition: system_util.hh:25