35 #ifndef _Wolframe_TYPES_VARIANT_STRUCT_DESCRIPTION_HPP_INCLUDED
36 #define _Wolframe_TYPES_VARIANT_STRUCT_DESCRIPTION_HPP_INCLUDED
43 #include <boost/shared_ptr.hpp>
60 typedef std::map<std::string,const VariantStructDescription*>
ResolveMap;
202 int addUnresolved(
const std::string& name_,
const std::string& symbol_);
217 int findidx(
const std::string& name_)
const;
221 const_iterator
find(
const std::string& name_)
const;
225 iterator
find(
const std::string& name_);
234 const_iterator
find_cis(
const std::string& name_)
const;
238 iterator
find_cis(
const std::string& name_);
247 std::string
names(
const std::string& sep)
const;
Definition: variantStructDescription.hpp:80
Type
Type of the variant.
Definition: variant.hpp:70
Element const * m_itr
Definition: variantStructDescription.hpp:128
< element is an attribute
Definition: variantStructDescription.hpp:84
iterator & operator++()
Definition: variantStructDescription.hpp:147
< no flags set
Definition: variantStructDescription.hpp:81
const Element * operator->() const
Definition: variantStructDescription.hpp:121
bool mandatory() const
Definition: variantStructDescription.hpp:89
Element * operator->()
Definition: variantStructDescription.hpp:150
void setMandatory(bool v=true)
Definition: variantStructDescription.hpp:94
const Element & back() const
Get the last element (throws logic error on ABR/ABW)
Definition: variantStructDescription.hpp:166
Normalize function definition.
< element is an mandatory
Definition: variantStructDescription.hpp:83
iterator operator++(int)
Definition: variantStructDescription.hpp:148
Element & back()
Definition: variantStructDescription.hpp:167
int addUnresolved(const std::string &name_, const std::string &symbol_)
Add an unresolved indirection definition to the structure description (an indirection is a element ex...
std::size_t m_nofattributes
Definition: variantStructDescription.hpp:265
boost::shared_ptr< VariantStructDescription > VariantStructDescriptionR
Definition: variantStructDescription.hpp:269
Description of a variant structure as array of attributes and content elements.
Definition: variantStructDescription.hpp:57
Structure of variant type atoms or substructures.
Definition: variantStruct.hpp:57
bool operator>=(const const_iterator &o) const
Definition: variantStructDescription.hpp:116
~VariantStructDescription()
Destructor.
bool optional() const
< internal representation of the flags of this element
Definition: variantStructDescription.hpp:88
bool operator!=(const const_iterator &o) const
Definition: variantStructDescription.hpp:112
VariantStruct * initvalue
Definition: variantStructDescription.hpp:73
void print(std::ostream &out, const utils::PrintFormat *pformat, std::size_t level) const
Print the contents of a structure description (structures in curly brackets as in the simpleform lang...
const Element * at(std::size_t idx) const
Random access or 0 if no random access defined (throws logic error on ABR/ABW)
Definition: variantStructDescription.hpp:162
Element * m_ar
Definition: variantStructDescription.hpp:266
std::size_t m_size
Definition: variantStructDescription.hpp:264
std::string names(const std::string &sep) const
Get the list of names as string with 'sep' as separator for logging.
int addElement(const Element &elem)
Add an element copy to the structure description.
int addIndirection(const std::string &name_, const VariantStructDescription *descr)
Add an indirection definition to the structure description (an indirection is a element expanded on a...
void setOptional(bool v=true)
Definition: variantStructDescription.hpp:93
bool operator==(const iterator &o) const
Definition: variantStructDescription.hpp:140
bool operator>=(const iterator &o) const
Definition: variantStructDescription.hpp:145
iterator end()
Definition: variantStructDescription.hpp:174
bool array() const
Definition: variantStructDescription.hpp:91
One element of the structure description. Refers to the element with the same index in the correspond...
Definition: variantStructDescription.hpp:70
const_iterator operator+(int i) const
Definition: variantStructDescription.hpp:125
std::string tostring(const utils::PrintFormat *pformat=0) const
Return the contents of a structure description as string (format as in print with no indent and newli...
const_iterator(const const_iterator &o)
Definition: variantStructDescription.hpp:107
Element & operator*()
Definition: variantStructDescription.hpp:151
iterator operator+(int i) const
Definition: variantStructDescription.hpp:154
void copy(const Element &o)
bool operator>(const const_iterator &o) const
Definition: variantStructDescription.hpp:115
const Element & operator*() const
Definition: variantStructDescription.hpp:122
Variant::Type type() const
const_iterator find_cis(const std::string &name_) const
Find an element by name with case insensitive comparison (of ascii A-Z) in the structure description...
Basic normalization function for atomic values (variant type)
Definition: normalizeFunction.hpp:52
void setAttribute(bool v=true)
Definition: variantStructDescription.hpp:95
Forward declaration.
Definition: variant.hpp:65
const NormalizeFunction * normalizer
< substructure in case of an element that is itself a structure
Definition: variantStructDescription.hpp:75
Element * beginptr()
Definition: variantStructDescription.hpp:259
bool operator<(const const_iterator &o) const
Definition: variantStructDescription.hpp:113
int compare(const VariantStructDescription &o) const
Compare two structure descriptions element by element (recursively)
const Element * beginptr() const
Definition: variantStructDescription.hpp:258
const_iterator begin() const
Get the an iterator on the first element (direct child)
Definition: variantStructDescription.hpp:170
const Element * endptr() const
Definition: variantStructDescription.hpp:260
const_iterator(Element const *itr_)
Definition: variantStructDescription.hpp:106
int compare(const iterator &o) const
const_iterator end() const
Get the an iterator on the end of the list of elements.
Definition: variantStructDescription.hpp:173
bool operator!=(const iterator &o) const
Definition: variantStructDescription.hpp:141
bool operator<(const iterator &o) const
Definition: variantStructDescription.hpp:142
Element * m_itr
Definition: variantStructDescription.hpp:157
Iterator on the elements of the definition.
Definition: variantStructDescription.hpp:132
< element is an optional
Definition: variantStructDescription.hpp:82
Element * endptr()
Definition: variantStructDescription.hpp:261
bool operator<=(const iterator &o) const
Definition: variantStructDescription.hpp:143
Flags
< normalizer function for an atomic element. Can be null also for an atomic element if not defined ...
Definition: variantStructDescription.hpp:78
char * name
name of the element in UTF-8
Definition: variantStructDescription.hpp:72
VariantStructDescription * substruct
< initialization value of the element
Definition: variantStructDescription.hpp:74
int operator-(const const_iterator &o) const
Definition: variantStructDescription.hpp:124
bool attribute() const
Definition: variantStructDescription.hpp:90
VariantStructDescription()
Constructor.
bool operator>(const iterator &o) const
Definition: variantStructDescription.hpp:144
iterator begin()
Definition: variantStructDescription.hpp:171
const_iterator operator++(int)
Definition: variantStructDescription.hpp:119
void resolve(const ResolveMap &rmap)
Resolve all unresolved externals in intialzation values according to the given map. Throws, if not all unresolved symbols could be resolved !
unsigned char flags
Definition: variantStructDescription.hpp:86
int operator-(const iterator &o) const
Definition: variantStructDescription.hpp:153
const_iterator find(const std::string &name_) const
Find an element by name in the structure description.
int addStructure(const std::string &name, const VariantStructDescription &substruct)
Add a substructure definition to the structure description.
void inherit(const VariantStructDescription &parent)
Inherit the elements from another structure description.
std::size_t size() const
Get the number of elements in the structure description.
Definition: variantStructDescription.hpp:242
Element * at(std::size_t idx)
Definition: variantStructDescription.hpp:163
iterator(const iterator &o)
Definition: variantStructDescription.hpp:136
bool operator==(const const_iterator &o) const
Definition: variantStructDescription.hpp:111
Const iterator on the elements of the definition.
Definition: variantStructDescription.hpp:103
iterator(Element *itr_)
Definition: variantStructDescription.hpp:135
int findidx_cis(const std::string &name_) const
Find an element by name with case insensitive comparison (of ascii A-Z) in the structure description...
int addAttribute(const std::string &name, const Variant &initvalue, const NormalizeFunction *normalizer=0)
Add an attribute definition to the structure description.
int addAtom(const std::string &name, const Variant &initvalue, const NormalizeFunction *normalizer=0)
Add an atomic element definition to the structure description.
int compare(const const_iterator &o) const
bool operator<=(const const_iterator &o) const
Definition: variantStructDescription.hpp:114
int findidx(const std::string &name_) const
Find an element by name in the structure description.
std::map< std::string, const VariantStructDescription * > ResolveMap
Definition: variantStructDescription.hpp:60
const_iterator & operator++()
Definition: variantStructDescription.hpp:118