17#ifndef SDF_ELEMENT_HH_
18#define SDF_ELEMENT_HH_
26#include <unordered_set>
33#include "sdf/config.hh"
41#pragma warning(disable: 4251)
77 public std::enable_shared_from_this<Element>
114 public:
void SetName(
const std::string &_name);
171 const std::string &_prefix)
const;
193 bool _includeDefaultElements,
194 bool _includeDefaultAttributes,
204 const std::string &_prefix,
205 bool _includeDefaultElements,
206 bool _includeDefaultAttributes,
216 int _spacing,
int &_index)
const;
224 int _spacing,
int &_index)
const;
231 const std::string &_prefix,
241 const std::string &_prefix,
254 const std::string &_prefix,
255 bool _includeDefaultElements,
256 bool _includeDefaultAttributes,
271 const std::string &_prefix,
272 bool _includeDefaultElements,
273 bool _includeDefaultAttributes,
284 const std::string &_type,
285 const std::string &_defaultvalue,
287 const std::string &_description =
"");
298 const std::string &_type,
299 const std::string &_defaultvalue,
302 const std::string &_description =
"");
311 const std::string &_defaultValue,
bool _required,
312 const std::string &_description =
"");
322 const std::string &_defaultValue,
bool _required,
324 const std::string &_description =
"");
336 const std::string &_defaultValue,
bool _required,
337 const std::string &_minValue,
338 const std::string &_maxValue,
339 const std::string &_description =
"");
352 const std::string &_defaultValue,
bool _required,
353 const std::string &_minValue,
354 const std::string &_maxValue,
356 const std::string &_description =
"");
386 ElementPtr GetElementDescription(
unsigned int _index) const;
394 ElementPtr GetElementDescription(const std::
string &_key) const;
448 public: std::any
GetAny(const std::
string &_key =
"") const;
456 const std::
string &_key =
"") const;
465 public: template<typename T>
467 const std::
string &_key =
"") const;
475 public: template<typename T>
476 T
Get(const std::
string &_key =
"") const;
485 public: template<typename T>
487 const std::
string &_key,
488 const T &_defaultValue) const;
495 public: template<typename T>
496 std::pair<T,
bool>
Get(const std::
string &_key,
497 const T &_defaultValue) const;
505 public: template<typename T>
506 bool Get(const std::
string &_key,
508 const T &_defaultValue) const;
517 public: template<typename T>
519 const std::
string &_key,
521 const T &_defaultValue) const;
526 public: template<typename T>
527 bool Set(const T &_value);
533 public: template<typename T>
581 const std::
string &_type =
"") const;
594 const std::
string &_type,
595 const std::vector<std::
string> &_ignoreElements) const;
610 const std::
string &_type,
611 const std::vector<std::
string> &_ignoreElements) const;
620 public: std::map<std::
string, std::
size_t>
631 public: std::map<std::
string, std::
size_t>
633 const std::
string &_type =
"") const;
646 const std::
string &_type,
647 const std::vector<std::
string> &_ignoreElements) const;
662 const std::
string &_type,
663 const std::vector<std::
string> &_ignoreElements) const;
857 std::ostringstream &_out,
858 const std::
string &_prefix,
859 bool _includeDefaultElements,
860 bool _includeDefaultAttributes,
870 private:
void PrintValuesImpl(
sdf::
Errors &_errors,
871 const std::
string &_prefix,
872 bool _includeDefaultElements,
873 bool _includeDefaultAttributes,
875 std::ostringstream &_out) const;
886 private:
ParamPtr CreateParam(const std::
string &_key,
887 const std::
string &_type,
888 const std::
string &_defaultValue,
891 const std::
string &_description =
"");
978 std::ostringstream &_out)
const;
986 bool _includeDefaultAttributes,
988 std::ostringstream &_out)
const;
996 const std::string &_key);
1000 template<
typename T>
1005 std::pair<T, bool> ret = this->
Get<T>(_errors, _key, result);
1011 template<
typename T>
1016 std::pair<T, bool> ret = this->
Get<T>(_key, result);
1022 template<
typename T>
1024 const std::string &_key,
1026 const T &_defaultValue)
const
1028 std::pair<T, bool> ret = this->
Get<T>(_errors, _key, _defaultValue);
1034 template<
typename T>
1037 const T &_defaultValue)
const
1039 std::pair<T, bool> ret = this->
Get<T>(_key, _defaultValue);
1045 template<
typename T>
1047 const T &_defaultValue)
const
1050 std::pair<T, bool> result = this->
Get<T>(errors, _key, _defaultValue);
1051 for(
auto& error : errors)
1059 template<
typename T>
1061 const std::string &_key,
1062 const T &_defaultValue)
const
1064 std::pair<T, bool> result(_defaultValue,
true);
1066 if (_key.empty() && this->dataPtr->value)
1068 this->dataPtr->value->Get<T>(result.first, _errors);
1070 else if (!_key.empty())
1075 param->Get(result.first, _errors);
1087 result.second =
false;
1092 result.second =
false;
1099 template<
typename T>
1103 bool result = this->
Set<T>(errors, _value);
1104 for(
auto& error : errors)
1112 template<
typename T>
1115 if (this->dataPtr->value)
1117 return this->dataPtr->value->Set(_value, _errors);
Definition Element.hh:900
bool explicitlySetInFile
True if the element was set in the SDF file.
Definition Element.hh:960
ElementWeakPtr parent
Element's parent.
Definition Element.hh:914
std::string description
Element description.
Definition Element.hh:908
void PrintAttributes(bool _includeDefaultAttributes, const PrintConfig &_config, std::ostringstream &_out) const
Generate the string (XML) for the attributes.
ElementPtr_V elements
Definition Element.hh:923
std::unordered_set< ElementConstPtr > clonedElementDescriptions
Used to keep track of which element descriptions we have cloned in order to provide a mutable pointer...
Definition Element.hh:970
std::string referenceSDF
Name of reference sdf.
Definition Element.hh:951
bool copyChildren
True if element's children should be copied.
Definition Element.hh:911
Param_V attributes
Definition Element.hh:917
std::string required
True if element is required.
Definition Element.hh:905
void PrintAttributes(sdf::Errors &_errors, bool _includeDefaultAttributes, const PrintConfig &_config, std::ostringstream &_out) const
Generate the string (XML) for the attributes.
ParamPtr value
Definition Element.hh:920
std::string name
Element name.
Definition Element.hh:902
std::optional< unsigned int > ElementDescriptionIndex(const std::string &_key)
Helper function to get the index of an element description identified by a given key.
ElementPtr_V elementDescriptions
Definition Element.hh:926
std::string originalVersion
Spec version that this was originally parsed from.
Definition Element.hh:957
std::string xmlPath
XML path of this element.
Definition Element.hh:966
std::string path
Path to file where this element came from.
Definition Element.hh:954
std::optional< int > lineNumber
Line number in file where this element came from.
Definition Element.hh:963
ElementPtr includeElement
The element that was used to load this entity.
Definition Element.hh:948
SDF Element class.
Definition Element.hh:78
void SetOriginalVersion(const std::string &_version)
Set the spec version that this was originally parsed from.
void Copy(const ElementPtr _elem)
Copy values from an Element.
const std::string & XmlPath() const
Get the XML path of this element.
void RemoveChild(ElementPtr _child)
Remove a child element.
ElementConstPtr ElementDescription(unsigned int _index) const
Get an element description using a key.
std::string GetDescription() const
Get a text description of the element.
const std::string & FilePath() const
Get the path to the SDF document where this element came from.
size_t GetAttributeCount() const
Get the number of attributes.
const std::string & GetRequired() const
Get the requirement string.
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.
void PrintValues(sdf::Errors &_errors, std::string _prefix, const PrintConfig &_config=PrintConfig()) const
Output Element's values to stdout.
void Clear()
Remove all child elements and reset file path and original version.
void PrintDescription(sdf::Errors &_errors, const std::string &_prefix) const
Output Element's description to stdout.
std::string ToString(sdf::Errors &_errors, const std::string &_prefix, const PrintConfig &_config=PrintConfig()) const
Convert the element values to a string representation.
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.
std::optional< int > LineNumber() const
Get the line number of this element within the SDF document.
ElementPtr MutableElementDescription(unsigned int _index)
Get a mutable element description using an index.
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.
void SetLineNumber(int _lineNumber)
Set the line number of this element within the SDF document.
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.
const std::string & OriginalVersion() const
Get the spec version that this was originally parsed from.
void RemoveAttribute(const std::string &_key)
Remove an attribute.
void SetCopyChildren(bool _value)
Set whether this element should copy its child elements during parsing.
void InsertElement(ElementPtr _elem)
Add an element object.
bool GetAttributeSet(const std::string &_key) const
Return true if the attribute was set (i.e.
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 RemoveAllAttributes()
Removes all attributes.
const std::string & GetName() const
Get the Element's name.
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.
void SetExplicitlySetInFile(const bool _value)
Set if the element and children where set or default in the original file.
ElementPtr GetElementImpl(const std::string &_name) const
Get a pointer to the named element.
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.
GZ_DEPRECATED(16) ElementPtr GetElementDescription(unsigned int _index) const
Get an element description using an index.
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.
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.
std::set< std::string > GetElementTypeNames() const
Get set of child element type names.
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.
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.
ParamPtr GetAttribute(unsigned int _index) const
Get an attribute using an index.
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.
void SetReferenceSDF(const std::string &_value)
Set reference SDF element.
void PrintValues(sdf::Errors &_errors, const std::string &_prefix, bool _includeDefaultElements, bool _includeDefaultAttributes, const PrintConfig &_config=PrintConfig()) const
Output Element's values to stdout.
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.
const Param_V & GetAttributes() const
Get all the attribute params.
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.
ElementPtr GetParent() const
Get a pointer to this Element's parent.
static std::vector< std::string > NameUniquenessExceptions()
List of elements to which exceptions are made when checking for name uniqueness.
void SetFilePath(const std::string &_path)
Set the path to the SDF document where this element came from.
void SetName(const std::string &_name)
Set the name of the Element.
std::string ToString(sdf::Errors &_errors, const std::string &_prefix, bool _includeDefaultElements, bool _includeDefaultAttributes, const PrintConfig &_config=PrintConfig()) const
Convert the element values to a string representation.
This class contains configuration options for printing elements.
Definition PrintConfig.hh:33
#define sdferr
Output an error message.
Definition Console.hh:57
T Get(sdf::Errors &_errors, const std::string &_key="") const
Get the value of a key.
Definition Element.hh:1001
bool Set(const T &_value)
Set the value of this element.
Definition Element.hh:1100
void GZ_SDFORMAT_VISIBLE throwOrPrintError(sdf::Console::ConsoleStream &_out, const sdf::Error &_error)
Prints the error to _out or throw using SDF_ASSERT depending on the ErrorCode in _error.
std::shared_ptr< Param > ParamPtr
Definition Param.hh:70
std::vector< ParamPtr > Param_V
Definition Param.hh:74
std::weak_ptr< Element > ElementWeakPtr
Definition Element.hh:65
std::vector< ElementPtr > ElementPtr_V
Definition Element.hh:69
std::vector< Error > Errors
A vector of Error.
Definition Types.hh:80
std::shared_ptr< const Element > ElementConstPtr
Definition Element.hh:61
std::shared_ptr< Element > ElementPtr
Definition Element.hh:57
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