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>
101 public:
void SetName(
const std::string &_name);
166 bool _includeDefaultElements,
167 bool _includeDefaultAttributes,
177 int _spacing,
int &_index)
const;
185 int _spacing,
int &_index)
const;
192 const std::string &_prefix,
205 const std::string &_prefix,
206 bool _includeDefaultElements,
207 bool _includeDefaultAttributes,
218 const std::string &_type,
219 const std::string &_defaultvalue,
221 const std::string &_description =
"");
230 const std::string &_defaultValue,
bool _required,
231 const std::string &_description =
"");
243 const std::string &_defaultValue,
bool _required,
244 const std::string &_minValue,
245 const std::string &_maxValue,
246 const std::string &_description =
"");
310 public: std::any
GetAny(
const std::string &_key =
"")
const;
318 public:
template<
typename T>
319 T Get(
const std::string &_key =
"")
const;
327 public:
template<
typename T>
328 std::pair<T, bool> Get(
const std::string &_key,
329 const T &_defaultValue)
const;
337 public:
template<
typename T>
338 bool Get(
const std::string &_key,
340 const T &_defaultValue)
const;
345 public:
template<
typename T>
346 bool Set(
const T &_value);
395 const std::string &_type,
396 const std::vector<std::string> &_ignoreElements)
const;
405 public: std::map<std::string, std::size_t>
419 const std::string &_type,
420 const std::vector<std::string> &_ignoreElements)
const;
581 private:
void ToString(
const std::string &_prefix,
582 bool _includeDefaultElements,
583 bool _includeDefaultAttributes,
585 std::ostringstream &_out)
const;
593 private:
void PrintValuesImpl(
const std::string &_prefix,
594 bool _includeDefaultElements,
595 bool _includeDefaultAttributes,
597 std::ostringstream &_out)
const;
607 private:
ParamPtr CreateParam(
const std::string &_key,
608 const std::string &_type,
609 const std::string &_defaultValue,
611 const std::string &_description =
"");
615 private: std::unique_ptr<ElementPrivate> dataPtr;
695 std::ostringstream &_out)
const;
704 std::pair<T, bool> ret = this->Get<T>(_key, result);
713 const T &_defaultValue)
const
715 std::pair<T, bool> ret = this->Get<T>(_key, _defaultValue);
723 const T &_defaultValue)
const
725 std::pair<T, bool> result(_defaultValue,
true);
727 if (_key.empty() && this->dataPtr->value)
729 this->dataPtr->value->Get<T>(result.first);
731 else if (!_key.empty())
736 param->Get(result.first);
748 result.second =
false;
753 result.second =
false;
763 if (this->dataPtr->value)
765 return this->dataPtr->value->Set(_value);
Definition: Element.hh:621
bool explicitlySetInFile
True if the element was set in the SDF file.
Definition: Element.hh:681
ElementWeakPtr parent
Element's parent.
Definition: Element.hh:635
std::string description
Element description.
Definition: Element.hh:629
void PrintAttributes(bool _includeDefaultAttributes, const PrintConfig &_config, std::ostringstream &_out) const
Generate the string (XML) for the attributes.
ElementPtr_V elements
Definition: Element.hh:644
std::string referenceSDF
Name of reference sdf.
Definition: Element.hh:672
bool copyChildren
True if element's children should be copied.
Definition: Element.hh:632
Param_V attributes
Definition: Element.hh:638
std::string required
True if element is required.
Definition: Element.hh:626
ParamPtr value
Definition: Element.hh:641
std::string name
Element name.
Definition: Element.hh:623
ElementPtr_V elementDescriptions
Definition: Element.hh:647
std::string originalVersion
Spec version that this was originally parsed from.
Definition: Element.hh:678
std::string xmlPath
XML path of this element.
Definition: Element.hh:687
std::string path
Path to file where this element came from.
Definition: Element.hh:675
std::optional< int > lineNumber
Line number in file where this element came from.
Definition: Element.hh:684
ElementPtr includeElement
The element that was used to load this entity.
Definition: Element.hh:669
SDF Element class.
Definition: Element.hh:75
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.
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 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.
std::optional< int > LineNumber() const
Get the line number of this element within the SDF document.
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.
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...
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 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 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.
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.
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.
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.
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.
virtual ~Element()
Destructor.
size_t GetElementDescriptionCount() const
Get the number of element descriptions.
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.
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.
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.
This class contains configuration options for printing elements.
Definition: PrintConfig.hh:32
T Get(const std::string &_key="") const
Get the value of a key.
Definition: Element.hh:700
bool Set(const T &_value)
Set the value of this element.
Definition: Element.hh:761
std::shared_ptr< Param > ParamPtr
Definition: Param.hh:65
std::vector< ParamPtr > Param_V
Definition: Param.hh:69
std::vector< ElementPtr > ElementPtr_V
Definition: Element.hh:66
std::shared_ptr< const Element > ElementConstPtr
Definition: Element.hh:58
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