17#ifndef SDF_ELEMENT_HH_
18#define SDF_ELEMENT_HH_
29#include "sdf/sdf_config.h"
37#pragma warning(disable: 4251)
45 inline namespace SDF_VERSION_NAMESPACE {
73 public std::enable_shared_from_this<Element>
100 public:
void SetName(
const std::string &_name);
161 bool _includeDefaultElements,
162 bool _includeDefaultAttributes)
const;
171 int _spacing,
int &_index)
const;
179 int _spacing,
int &_index)
const;
184 public: std::string
ToString(
const std::string &_prefix)
const;
194 public: std::string
ToString(
const std::string &_prefix,
195 bool _includeDefaultElements,
196 bool _includeDefaultAttributes)
const;
206 const std::string &_type,
207 const std::string &_defaultvalue,
209 const std::string &_description =
"");
218 const std::string &_defaultValue,
bool _required,
219 const std::string &_description =
"");
279 public: std::any
GetAny(
const std::string &_key =
"")
const;
287 public:
template<
typename T>
288 T Get(
const std::string &_key =
"")
const;
296 public:
template<
typename T>
297 std::pair<T, bool> Get(
const std::string &_key,
298 const T &_defaultValue)
const;
306 public:
template<
typename T>
307 bool Get(
const std::string &_key,
309 const T &_defaultValue)
const;
314 public:
template<
typename T>
315 bool Set(
const T &_value);
364 const std::string &_type,
365 const std::vector<std::string> &_ignoreElements)
const;
374 public: std::map<std::string, std::size_t>
388 const std::string &_type,
389 const std::vector<std::string> &_ignoreElements)
const;
508 private:
void ToString(
const std::string &_prefix,
509 bool _includeDefaultElements,
510 bool _includeDefaultAttributes,
511 std::ostringstream &_out)
const;
518 private:
void PrintValuesImpl(
const std::string &_prefix,
519 bool _includeDefaultElements,
520 bool _includeDefaultAttributes,
521 std::ostringstream &_out)
const;
531 private:
ParamPtr CreateParam(
const std::string &_key,
532 const std::string &_type,
533 const std::string &_defaultValue,
535 const std::string &_description =
"");
539 private: std::unique_ptr<ElementPrivate> dataPtr;
591 T Element::Get(
const std::string &_key)
const
595 std::pair<T, bool> ret = this->Get<T>(_key, result);
602 bool Element::Get(
const std::string &_key,
604 const T &_defaultValue)
const
606 std::pair<T, bool> ret = this->Get<T>(_key, _defaultValue);
613 std::pair<T, bool> Element::Get(
const std::string &_key,
614 const T &_defaultValue)
const
616 std::pair<T, bool> result(_defaultValue,
true);
618 if (_key.empty() && this->dataPtr->value)
620 this->dataPtr->value->Get<T>(result.first);
622 else if (!_key.empty())
624 ParamPtr param = this->GetAttribute(_key);
627 param->Get(result.first);
629 else if (this->HasElement(_key))
631 result.first = this->GetElementImpl(_key)->Get<T>();
633 else if (this->HasElementDescription(_key))
635 result.first = this->GetElementDescription(_key)->Get<T>();
639 result.second =
false;
644 result.second =
false;
652 bool Element::Set(
const T &_value)
654 if (this->dataPtr->value)
656 this->dataPtr->value->Set(_value);
Definition Element.hh:545
std::string required
True if element is required.
Definition Element.hh:550
ElementWeakPtr parent
Element's parent.
Definition Element.hh:559
bool copyChildren
True if element's children should be copied.
Definition Element.hh:556
Param_V attributes
Definition Element.hh:562
ElementPtr_V elements
Definition Element.hh:568
std::string referenceSDF
Name of reference sdf.
Definition Element.hh:577
bool explicitlySetInFile
True if the element was set in the SDF file.
Definition Element.hh:586
ElementPtr_V elementDescriptions
Definition Element.hh:571
std::string description
Element description.
Definition Element.hh:553
std::string name
Element name.
Definition Element.hh:547
std::string originalVersion
Spec version that this was originally parsed from.
Definition Element.hh:583
ParamPtr value
Definition Element.hh:565
std::string path
Path to file where this element came from.
Definition Element.hh:580
std::string includeFilename
name of the include file that was used to create this element
Definition Element.hh:574
SDF Element class.
Definition Element.hh:74
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 RemoveAllAttributes()
Removes all attributes.
void PrintValues(std::string _prefix) const
Output Element's values to stdout.
void Update()
Call the Update() callback on each element, as well as the embedded Param.
ParamPtr GetAttribute(unsigned int _index) const
Get an attribute using an index.
ElementPtr GetElement(const std::string &_name)
Return a pointer to the child element with the provided name.
ElementPtr GetNextElement(const std::string &_name="") const
Get the next sibling of this element.
const std::string & OriginalVersion() const
Get the spec version that this was originally parsed from.
void Copy(const ElementPtr _elem)
Copy values from an Element.
void AddElementDescription(ElementPtr _elem)
Add a new element description.
void Clear()
Remove all child elements and reset file path and original version.
std::string ReferenceSDF() const
Get the name of the reference SDF element.
const std::string & GetRequired() const
Get the requirement string.
void SetName(const std::string &_name)
Set the name of the Element.
ElementPtr Clone() const
Create a copy of this Element.
ElementPtr FindElement(const std::string &_name)
Return a pointer to the child element with the provided name.
void SetExplicitlySetInFile(const bool _value)
Set if the element and children where set or default in the original file.
ElementPtr GetFirstElement() const
Get the first child element.
bool HasElement(const std::string &_name) const
Return true if the named element exists.
void SetFilePath(const std::string &_path)
Set the path to the SDF document where this element came from.
void RemoveFromParent()
Remove this element from its parent.
ElementPtr GetParent() const
Get a pointer to this Element's parent.
bool HasElementDescription(const std::string &_name) const
Return true if an element description exists.
void SetRequired(const std::string &_req)
Set the requirement type.
ElementPtr GetElementImpl(const std::string &_name) const
Get a pointer to the named element.
bool GetExplicitlySetInFile() const
Return if the element was been explicitly set in the file.
size_t GetElementDescriptionCount() const
Get the number of element descriptions.
void SetInclude(const std::string &_filename)
Set the include filename to the passed in filename.
const std::string & GetName() const
Get the Element's name.
ParamPtr GetAttribute(const std::string &_key) const
Get the param of an attribute.
std::string GetDescription() const
Get a text description of the element.
ElementPtr GetElementDescription(const std::string &_key) const
Get an element description using a key.
std::string ToString(const std::string &_prefix) const
Convert the element values to a string representation.
void PrintDescription(const std::string &_prefix) const
Output Element's description to stdout.
ElementPtr GetElementDescription(unsigned int _index) const
Get an element description using an index.
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 InsertElement(ElementPtr _elem)
Add an element object.
void ClearElements()
Remove all child elements.
void AddValue(const std::string &_type, const std::string &_defaultValue, bool _required, const std::string &_description="")
Add a value to this Element.
void PrintDocRightPane(std::string &_html, int _spacing, int &_index) const
Helper function for SDF::PrintDoc.
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 RemoveAttribute(const std::string &_key)
Remove an attribute.
void SetCopyChildren(bool _value)
Set whether this element should copy its child elements during parsing.
std::any GetAny(const std::string &_key="") const
Get the element value/attribute as a std::any.
ParamPtr GetValue() const
Get the param of the elements value return A Param pointer to the value of this element.
virtual ~Element()
Destructor.
void SetOriginalVersion(const std::string &_version)
Set the spec version that this was originally parsed from.
std::set< std::string > GetElementTypeNames() const
Get set of child element type names.
void SetParent(const ElementPtr _parent)
Set the parent of this Element.
void PrintValues(const std::string &_prefix, bool _includeDefaultElements, bool _includeDefaultAttributes) const
Output Element's values to stdout.
std::string ToString(const std::string &_prefix, bool _includeDefaultElements, bool _includeDefaultAttributes) const
Convert the element values to a string representation.
ElementPtr AddElement(const std::string &_name)
Add a named element.
bool HasUniqueChildNames(const std::string &_type="") const
Checks whether any child elements of the specified element type have identical name attribute values ...
bool HasAttribute(const std::string &_key) const
Return true if an attribute exists.
const std::string & FilePath() const
Get the path to the SDF document where this element came from.
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 SetReferenceSDF(const std::string &_value)
Set reference SDF element.
std::string GetInclude() const
Get the include filename.
bool GetCopyChildren() const
Return true if this Element's child elements should be copied during parsing.
static std::vector< std::string > NameUniquenessExceptions()
List of elements to which exceptions are made when checking for name uniqueness.
void Reset()
Call reset on each element and element description before deleting all of them.
ElementConstPtr FindElement(const std::string &_name) const
Return a pointer to the child element with the provided name.
void RemoveChild(ElementPtr _child)
Remove a child element.
bool GetAttributeSet(const std::string &_key) const
Return true if the attribute was set (i.e.
void SetDescription(const std::string &_desc)
Set a text description for the element.
size_t GetAttributeCount() const
Get the number of attributes.
void PrintDocLeftPane(std::string &_html, int _spacing, int &_index) const
Helper function for SDF::PrintDoc.
std::weak_ptr< Element > ElementWeakPtr
Definition Element.hh:61
std::shared_ptr< const Element > ElementConstPtr
Definition Element.hh:57
std::shared_ptr< Param > ParamPtr
Definition Param.hh:57
std::vector< ElementPtr > ElementPtr_V
Definition Element.hh:65
std::shared_ptr< Element > ElementPtr
Definition Element.hh:53
std::vector< ParamPtr > Param_V
Definition Param.hh:61
namespace for Simulation Description Format parser
Definition Actor.hh:33
#define SDFORMAT_VISIBLE
Use to represent "symbol visible" if supported.
Definition system_util.hh:48