palimpsest — Fast serializable C++ dictionaries  v2.2.0
palimpsest::Dictionary Class Reference

Dictionary of values and sub-dictionaries. More...

Public Member Functions

 Dictionary ()=default
 Default constructor. More...
 
 Dictionary (const Dictionary &)=delete
 No copy constructor. More...
 
Dictionaryoperator= (const Dictionary &)=delete
 No copy assignment operator. More...
 
 Dictionary (Dictionary &&)=default
 Default move constructor. More...
 
Dictionaryoperator= (Dictionary &&)=default
 Default move assignment operator. More...
 
 ~Dictionary ()=default
 Default destructor. More...
 
bool is_map () const noexcept
 We are a (potentially empty) map if and only if the value is empty. More...
 
bool is_empty () const noexcept
 We are empty if and only if we are a dictionary with no element. More...
 
bool is_value () const noexcept
 We are a value if and only if the internal value is non-empty. More...
 
bool has (const std::string &key) const noexcept
 Check whether a key is in the dictionary. More...
 
std::vector< std::string > keys () const noexcept
 Return the list of keys of the dictionary. More...
 
unsigned size () const noexcept
 Return the number of keys in the dictionary. More...
 
template<typename T >
T & as ()
 Get reference to the internal value. More...
 
template<typename T >
const T & as () const
 Const variant of as. More...
 
template<typename T >
T & get (const std::string &key)
 Get reference to the object at a given key. More...
 
template<typename T >
const T & get (const std::string &key) const
 Const variant of get. More...
 
template<typename T >
const T & get (const std::string &key, const T &default_value) const
 Get object at a given key if it exists, or a default value otherwise. More...
 
template<typename T , typename... ArgsT, typename... Args>
T & insert (const std::string &key, Args &&...args)
 Create an object at a given key and return a reference to it. More...
 
template<typename T >
Dictionaryoperator= (const T &new_value)
 Assign value directly. More...
 
Dictionaryoperator= (const char *c_string)
 Assignment operator for C-style strings. More...
 
void remove (const std::string &key) noexcept
 Remove a key-value pair from the dictionary. More...
 
void clear () noexcept
 Remove all entries from the dictionary. More...
 
Dictionaryoperator() (const std::string &key)
 Return a reference to the dictionary at key, performing an insertion if such a key does not already exist. More...
 
const Dictionaryoperator() (const std::string &key) const
 Return a reference to the dictionary at key, performing an insertion if such a key does not already exist. More...
 
size_t serialize (std::vector< char > &buffer) const
 Serialize to raw MessagePack data. More...
 
void write (const std::string &filename) const
 Write MessagePack serialization to a binary file. More...
 
void read (const std::string &filename)
 Update dictionary from a MessagePack binary file. More...
 
void update (const char *data, size_t size)
 Update dictionary from raw MessagePack data. More...
 
void update (mpack_node_t node)
 Update existing values from an MPack node. More...
 
 operator bool & ()
 Allow implicit conversion to (bool &). More...
 
 operator const bool & () const
 Allow implicit conversion to (const bool &). More...
 
 operator int8_t & ()
 Allow implicit conversion to (int8_t &). More...
 
 operator const int8_t & () const
 Allow implicit conversion to (const int8_t &). More...
 
 operator int16_t & ()
 Allow implicit conversion to (int16_t &). More...
 
 operator const int16_t & () const
 Allow implicit conversion to (const int16_t &). More...
 
 operator int32_t & ()
 Allow implicit conversion to (int32_t &). More...
 
 operator const int32_t & () const
 Allow implicit conversion to (const int32_t &). More...
 
 operator int64_t & ()
 Allow implicit conversion to (int64_t &). More...
 
 operator const int64_t & () const
 Allow implicit conversion to (const int64_t &). More...
 
 operator uint8_t & ()
 Allow implicit conversion to (uint8_t &). More...
 
 operator const uint8_t & () const
 Allow implicit conversion to (const uint8_t &). More...
 
 operator uint16_t & ()
 Allow implicit conversion to (uint16_t &). More...
 
 operator const uint16_t & () const
 Allow implicit conversion to (const uint16_t &). More...
 
 operator uint32_t & ()
 Allow implicit conversion to (uint32_t &). More...
 
 operator const uint32_t & () const
 Allow implicit conversion to (const uint32_t &). More...
 
 operator uint64_t & ()
 Allow implicit conversion to (uint64_t &). More...
 
 operator const uint64_t & () const
 Allow implicit conversion to (const uint64_t &). More...
 
 operator float & ()
 Allow implicit conversion to (float &). More...
 
 operator const float & () const
 Allow implicit conversion to (const float &). More...
 
 operator double & ()
 Allow implicit conversion to (double &). More...
 
 operator const double & () const
 Allow implicit conversion to (const double &). More...
 
 operator std::string & ()
 Allow implicit conversion to (std::string &). More...
 
 operator const std::string & () const
 Allow implicit conversion to (const std::string &). More...
 
 operator Eigen::Vector2d & ()
 Allow implicit conversion to (Eigen::Vector2d &). More...
 
 operator const Eigen::Vector2d & () const
 Allow implicit conversion to (const Eigen::Vector2d &). More...
 
 operator Eigen::Vector3d & ()
 Allow implicit conversion to (Eigen::Vector3d &). More...
 
 operator const Eigen::Vector3d & () const
 Allow implicit conversion to (const Eigen::Vector3d &). More...
 
 operator Eigen::VectorXd & ()
 Allow implicit conversion to (Eigen::VectorXd&). More...
 
 operator const Eigen::VectorXd & () const
 Allow implicit conversion to (const Eigen::VectorXd&). More...
 
 operator Eigen::Quaterniond & ()
 Allow implicit conversion to (Eigen::Quaterniond &). More...
 
 operator const Eigen::Quaterniond & () const
 Allow implicit conversion to (const Eigen::Quaterniond &). More...
 
 operator Eigen::Matrix3d & ()
 Allow implicit conversion to (Eigen::Matrix3d &). More...
 
 operator const Eigen::Matrix3d & () const
 Allow implicit conversion to (const Eigen::Matrix3d &). More...
 

Protected Member Functions

template<typename T , typename... ArgsT, typename... Args>
void become (Args &&...args)
 

Protected Attributes

Value value_
 Internal value, used if we are a value. More...
 
std::unordered_map< std::string, std::unique_ptr< Dictionary > > map_
 Key-value map, used if we are a map. More...
 

Friends

std::ostream & operator<< (std::ostream &stream, const Dictionary &dict)
 Output stream operator for printing. More...
 

Detailed Description

Dictionary of values and sub-dictionaries.

The grammar here is a subset of e.g. JSON or YAML: a dictionary maps keys to either values (number, string, std::vector, Eigen::MatrixXd, ...) or other dictionaries.

This type allows us to store and retrieve C++ objects as follows:

// create a vector of 4 double-precision numbers with value 42
dict.insert<std::vector<double>>("TheAnswer", 4, 42);
auto & answer = dict.get<std::vector<double>>("TheAnswer");
answer[3] = 0; // manipulate the object directly
// Get another reference to the object
auto &same_answer = dict.get<std::vector<double>>("TheAnswer");
same_answer.push_back(0);
spdlog::info(answer.size()); // vector now has size 5
Dictionary()=default
Default constructor.

When retrieving an object using get<T>, checks are performed to ensure that the value type and T are compatible. Hence, once an object is inserted in the dictionary, it is not meant to change type later on.

To handle inheritance, we need to explicitely recall the class hierarchy:

struct A {};
struct B : public A {};
// Creating an inherited object and checking virtual inheritance
dict.insert<B, A>("foo");
auto & base = dict.get<A>("foo");
auto & derived = dict.get<B>("foo");
Note
Dictionaries are move-only.
We are cheating on the class name a bit: a "dictionary" is actually either empty, or a single value, or a map of key-"dictionary" pairs. If that helps, for OCaml-lovers:
type Dictionary =
| Empty
| Value of Dictionary::Value
| Map of (std::string -> Dictionary) map

This is practical because the root is always an actual dictionary (value insertion in the tree is performed by parents on their children), so that the type we see when declaring Dictionary foo; is right. The downside is that the type of foo("var") is still Dictionary; it only becomes its proper value type after an explicit conversion foo("bar").as<T>() or foo.get<T>("bar"), or an implicit conversion T& bar = foo("bar");.

Definition at line 97 of file Dictionary.h.

Constructor & Destructor Documentation

◆ Dictionary() [1/3]

palimpsest::Dictionary::Dictionary ( )
default

Default constructor.

◆ Dictionary() [2/3]

palimpsest::Dictionary::Dictionary ( const Dictionary )
delete

No copy constructor.

◆ Dictionary() [3/3]

palimpsest::Dictionary::Dictionary ( Dictionary &&  )
default

Default move constructor.

◆ ~Dictionary()

palimpsest::Dictionary::~Dictionary ( )
default

Default destructor.

Note
Child dictionaries will be recursively destroyed as they are held by unique pointers in an unordered_map;

Member Function Documentation

◆ as() [1/2]

template<typename T >
T& palimpsest::Dictionary::as ( )
inline

Get reference to the internal value.

Returns
Reference to the object.
Exceptions
TypeErrorif the dictionary is not a value, or it is but the stored value type is not T.

Definition at line 279 of file Dictionary.h.

◆ as() [2/2]

template<typename T >
const T& palimpsest::Dictionary::as ( ) const
inline

Const variant of as.

Returns
Reference to the object.
Exceptions
TypeErrorif the stored object type is not T.

Definition at line 293 of file Dictionary.h.

◆ become()

template<typename T , typename... ArgsT, typename... Args>
void palimpsest::Dictionary::become ( Args &&...  args)
inlineprotected

Definition at line 652 of file Dictionary.h.

◆ clear()

void palimpsest::Dictionary::clear ( )
noexcept

Remove all entries from the dictionary.

Definition at line 34 of file Dictionary.cpp.

◆ get() [1/3]

template<typename T >
T& palimpsest::Dictionary::get ( const std::string &  key)
inline

Get reference to the object at a given key.

Parameters
[in]keyKey to the object.
Returns
Reference to the object.
Exceptions
KeyErrorif there is no object at this key.
TypeErrorif there is an object at this key, but its type is not T.

Definition at line 309 of file Dictionary.h.

◆ get() [2/3]

template<typename T >
const T& palimpsest::Dictionary::get ( const std::string &  key) const
inline

Const variant of get.

Parameters
[in]keyKey to the object.
Returns
Reference to the object.
Exceptions
KeyErrorif there is no object at this key.
TypeErrorif there is an object at this key, but its type is not T.

Definition at line 322 of file Dictionary.h.

◆ get() [3/3]

template<typename T >
const T& palimpsest::Dictionary::get ( const std::string &  key,
const T &  default_value 
) const
inline

Get object at a given key if it exists, or a default value otherwise.

Parameters
[in]keyKey to look for.
[in]default_valueDefault value used if there is no value at this key.
Returns
Reference to the object if it exists, default_value otherwise.
Exceptions
TypeErrorif the object at this key is not a value, or it is but its type does is not T.

Definition at line 337 of file Dictionary.h.

◆ has()

bool palimpsest::Dictionary::has ( const std::string &  key) const
inlinenoexcept

Check whether a key is in the dictionary.

Parameters
[in]keyKey to look for.
Returns
true when the key is in the dictionary.

Definition at line 261 of file Dictionary.h.

◆ insert()

template<typename T , typename... ArgsT, typename... Args>
T& palimpsest::Dictionary::insert ( const std::string &  key,
Args &&...  args 
)
inline

Create an object at a given key and return a reference to it.

If there is already a value at this key, return the existing object instead.

Parameters
[in]keyKey to create the object at.
argsParameters passed to the object's constructor.
Returns
Reference to the constructed object.
Exceptions
TypeErrorif the dictionary is not a map, and therefore we cannot insert at a given key inside it.
Note
To STL practitioners: although it is named like e.g. unordered_map::insert, this function behaves like unordered_map::emplace as it forwards its argument to the constructor T::T() called internally. Also it doesn't return an insertion confirmation boolean.

Definition at line 377 of file Dictionary.h.

◆ is_empty()

bool palimpsest::Dictionary::is_empty ( ) const
inlinenoexcept

We are empty if and only if we are a dictionary with no element.

Definition at line 251 of file Dictionary.h.

◆ is_map()

bool palimpsest::Dictionary::is_map ( ) const
inlinenoexcept

We are a (potentially empty) map if and only if the value is empty.

Definition at line 248 of file Dictionary.h.

◆ is_value()

bool palimpsest::Dictionary::is_value ( ) const
inlinenoexcept

We are a value if and only if the internal value is non-empty.

Definition at line 254 of file Dictionary.h.

◆ keys()

std::vector< std::string > palimpsest::Dictionary::keys ( ) const
noexcept

Return the list of keys of the dictionary.

Definition at line 180 of file Dictionary.cpp.

◆ operator bool &()

palimpsest::Dictionary::operator bool & ( )
inline

Allow implicit conversion to (bool &).

Definition at line 531 of file Dictionary.h.

◆ operator const bool &()

palimpsest::Dictionary::operator const bool & ( ) const
inline

Allow implicit conversion to (const bool &).

Definition at line 534 of file Dictionary.h.

◆ operator const double &()

palimpsest::Dictionary::operator const double & ( ) const
inline

Allow implicit conversion to (const double &).

Definition at line 594 of file Dictionary.h.

◆ operator const Eigen::Matrix3d &()

palimpsest::Dictionary::operator const Eigen::Matrix3d & ( ) const
inline

Allow implicit conversion to (const Eigen::Matrix3d &).

Definition at line 638 of file Dictionary.h.

◆ operator const Eigen::Quaterniond &()

palimpsest::Dictionary::operator const Eigen::Quaterniond & ( ) const
inline

Allow implicit conversion to (const Eigen::Quaterniond &).

Definition at line 630 of file Dictionary.h.

◆ operator const Eigen::Vector2d &()

palimpsest::Dictionary::operator const Eigen::Vector2d & ( ) const
inline

Allow implicit conversion to (const Eigen::Vector2d &).

Definition at line 606 of file Dictionary.h.

◆ operator const Eigen::Vector3d &()

palimpsest::Dictionary::operator const Eigen::Vector3d & ( ) const
inline

Allow implicit conversion to (const Eigen::Vector3d &).

Definition at line 614 of file Dictionary.h.

◆ operator const Eigen::VectorXd &()

palimpsest::Dictionary::operator const Eigen::VectorXd & ( ) const
inline

Allow implicit conversion to (const Eigen::VectorXd&).

Definition at line 622 of file Dictionary.h.

◆ operator const float &()

palimpsest::Dictionary::operator const float & ( ) const
inline

Allow implicit conversion to (const float &).

Definition at line 588 of file Dictionary.h.

◆ operator const int16_t &()

palimpsest::Dictionary::operator const int16_t & ( ) const
inline

Allow implicit conversion to (const int16_t &).

Definition at line 546 of file Dictionary.h.

◆ operator const int32_t &()

palimpsest::Dictionary::operator const int32_t & ( ) const
inline

Allow implicit conversion to (const int32_t &).

Definition at line 552 of file Dictionary.h.

◆ operator const int64_t &()

palimpsest::Dictionary::operator const int64_t & ( ) const
inline

Allow implicit conversion to (const int64_t &).

Definition at line 558 of file Dictionary.h.

◆ operator const int8_t &()

palimpsest::Dictionary::operator const int8_t & ( ) const
inline

Allow implicit conversion to (const int8_t &).

Definition at line 540 of file Dictionary.h.

◆ operator const std::string &()

palimpsest::Dictionary::operator const std::string & ( ) const
inline

Allow implicit conversion to (const std::string &).

Definition at line 600 of file Dictionary.h.

◆ operator const uint16_t &()

palimpsest::Dictionary::operator const uint16_t & ( ) const
inline

Allow implicit conversion to (const uint16_t &).

Definition at line 570 of file Dictionary.h.

◆ operator const uint32_t &()

palimpsest::Dictionary::operator const uint32_t & ( ) const
inline

Allow implicit conversion to (const uint32_t &).

Definition at line 576 of file Dictionary.h.

◆ operator const uint64_t &()

palimpsest::Dictionary::operator const uint64_t & ( ) const
inline

Allow implicit conversion to (const uint64_t &).

Definition at line 582 of file Dictionary.h.

◆ operator const uint8_t &()

palimpsest::Dictionary::operator const uint8_t & ( ) const
inline

Allow implicit conversion to (const uint8_t &).

Definition at line 564 of file Dictionary.h.

◆ operator double &()

palimpsest::Dictionary::operator double & ( )
inline

Allow implicit conversion to (double &).

Definition at line 591 of file Dictionary.h.

◆ operator Eigen::Matrix3d &()

palimpsest::Dictionary::operator Eigen::Matrix3d & ( )
inline

Allow implicit conversion to (Eigen::Matrix3d &).

Definition at line 635 of file Dictionary.h.

◆ operator Eigen::Quaterniond &()

palimpsest::Dictionary::operator Eigen::Quaterniond & ( )
inline

Allow implicit conversion to (Eigen::Quaterniond &).

Definition at line 627 of file Dictionary.h.

◆ operator Eigen::Vector2d &()

palimpsest::Dictionary::operator Eigen::Vector2d & ( )
inline

Allow implicit conversion to (Eigen::Vector2d &).

Definition at line 603 of file Dictionary.h.

◆ operator Eigen::Vector3d &()

palimpsest::Dictionary::operator Eigen::Vector3d & ( )
inline

Allow implicit conversion to (Eigen::Vector3d &).

Definition at line 611 of file Dictionary.h.

◆ operator Eigen::VectorXd &()

palimpsest::Dictionary::operator Eigen::VectorXd & ( )
inline

Allow implicit conversion to (Eigen::VectorXd&).

Definition at line 619 of file Dictionary.h.

◆ operator float &()

palimpsest::Dictionary::operator float & ( )
inline

Allow implicit conversion to (float &).

Definition at line 585 of file Dictionary.h.

◆ operator int16_t &()

palimpsest::Dictionary::operator int16_t & ( )
inline

Allow implicit conversion to (int16_t &).

Definition at line 543 of file Dictionary.h.

◆ operator int32_t &()

palimpsest::Dictionary::operator int32_t & ( )
inline

Allow implicit conversion to (int32_t &).

Definition at line 549 of file Dictionary.h.

◆ operator int64_t &()

palimpsest::Dictionary::operator int64_t & ( )
inline

Allow implicit conversion to (int64_t &).

Definition at line 555 of file Dictionary.h.

◆ operator int8_t &()

palimpsest::Dictionary::operator int8_t & ( )
inline

Allow implicit conversion to (int8_t &).

Definition at line 537 of file Dictionary.h.

◆ operator std::string &()

palimpsest::Dictionary::operator std::string & ( )
inline

Allow implicit conversion to (std::string &).

Definition at line 597 of file Dictionary.h.

◆ operator uint16_t &()

palimpsest::Dictionary::operator uint16_t & ( )
inline

Allow implicit conversion to (uint16_t &).

Definition at line 567 of file Dictionary.h.

◆ operator uint32_t &()

palimpsest::Dictionary::operator uint32_t & ( )
inline

Allow implicit conversion to (uint32_t &).

Definition at line 573 of file Dictionary.h.

◆ operator uint64_t &()

palimpsest::Dictionary::operator uint64_t & ( )
inline

Allow implicit conversion to (uint64_t &).

Definition at line 579 of file Dictionary.h.

◆ operator uint8_t &()

palimpsest::Dictionary::operator uint8_t & ( )
inline

Allow implicit conversion to (uint8_t &).

Definition at line 561 of file Dictionary.h.

◆ operator()() [1/2]

Dictionary & palimpsest::Dictionary::operator() ( const std::string &  key)

Return a reference to the dictionary at key, performing an insertion if such a key does not already exist.

Parameters
[in]keyKey to look at.
Returns
Reference to the new dictionary at this key if there was none, or to the existing dictionary otherwise.
Exceptions
TypeErrorif the dictionary is not a map, and therefore we cannot look up a key from it.
Note
The behavior of this operator is the same as std::unordered_map::operator[]. It differs from that of Python dictionaries, where an exception is throw if the key doesn't exist.
The reason why we use operator() instead of operator[] is that the class includes user-defined conversion functions to value types, so that we can write:
Eigen::Vector3d& position = dict("position");
auto& position = dict("position").as<Eigen::Vector3d>(); // equivalent
auto& position = dict.get<Eigen::Vector3d>("position"); // equivalent

With operator[], these conversions would be ambiguous as [] is commutative in C (c_str[int] == *(c_str + int) == int[c_str]).

Definition at line 198 of file Dictionary.cpp.

◆ operator()() [2/2]

const Dictionary & palimpsest::Dictionary::operator() ( const std::string &  key) const

Return a reference to the dictionary at key, performing an insertion if such a key does not already exist.

Parameters
[in]keyKey to look at.
Returns
Reference to the dictionary at this key.
Exceptions
KeyErrorif there is no object at this key.
TypeErrorif the dictionary is not a map, and therefore we cannot lookup a key from it.

Since we cannot insert a new element in a const object, this const operator will throw if the key is not already in the dictionary. See the documentation for the non-const variant of this operator.

Definition at line 209 of file Dictionary.cpp.

◆ operator=() [1/4]

Dictionary& palimpsest::Dictionary::operator= ( const char *  c_string)
inline

Assignment operator for C-style strings.

Parameters
[in]c_stringC-style string to assign.
Exceptions
TypeErrorif the object was already a value of a different type.

This specialization avoids "invalid array assignment" errors. Note that the string is cast to an std::string.

Definition at line 431 of file Dictionary.h.

◆ operator=() [2/4]

Dictionary& palimpsest::Dictionary::operator= ( const Dictionary )
delete

No copy assignment operator.

◆ operator=() [3/4]

template<typename T >
Dictionary& palimpsest::Dictionary::operator= ( const T &  new_value)
inline

Assign value directly.

Parameters
[in]new_valueNew value to assign.
Exceptions
TypeErrorif the object was already a value of a different type.

If the object was a dictionary, all entries are cleared and it becomes a value. If a previous value is already present, it will be assigned (not reallocated), therefore the new value needs to have the same type.

Definition at line 409 of file Dictionary.h.

◆ operator=() [4/4]

Dictionary& palimpsest::Dictionary::operator= ( Dictionary &&  )
default

Default move assignment operator.

◆ read()

void palimpsest::Dictionary::read ( const std::string &  filename)

Update dictionary from a MessagePack binary file.

Parameters
[in]filenamePath to the input file.

Definition at line 224 of file Dictionary.cpp.

◆ remove()

void palimpsest::Dictionary::remove ( const std::string &  key)
noexcept

Remove a key-value pair from the dictionary.

Parameters
[in]keyKey to remove.

Definition at line 189 of file Dictionary.cpp.

◆ serialize()

size_t palimpsest::Dictionary::serialize ( std::vector< char > &  buffer) const

Serialize to raw MessagePack data.

Parameters
[out]bufferBuffer that will hold the message data.
Returns
Size of the message. Note that it is not the same as the size of the buffer after execution.

Definition at line 245 of file Dictionary.cpp.

◆ size()

unsigned palimpsest::Dictionary::size ( ) const
inlinenoexcept

Return the number of keys in the dictionary.

Definition at line 269 of file Dictionary.h.

◆ update() [1/2]

void palimpsest::Dictionary::update ( const char *  data,
size_t  size 
)

Update dictionary from raw MessagePack data.

Parameters
[in]dataBuffer to read MessagePack from.
[in]sizeBuffer size.
Exceptions
TypeErrorif deserialized data types don't match those of the corresponding objects in the dictionary.

Definition at line 39 of file Dictionary.cpp.

◆ update() [2/2]

void palimpsest::Dictionary::update ( mpack_node_t  node)

Update existing values from an MPack node.

Parameters
[in]nodeMPack node. Its key-values should match those of the dictionary. Keys that don't match will be ignored. Values whose type does not match will raise an exception.
Exceptions
TypeErrorif a deserialized object's type does not match the type of an existing entry in the dictionary.

Definition at line 53 of file Dictionary.cpp.

◆ write()

void palimpsest::Dictionary::write ( const std::string &  filename) const

Write MessagePack serialization to a binary file.

Parameters
[in]filenamePath to the output file.

Definition at line 235 of file Dictionary.cpp.

Friends And Related Function Documentation

◆ operator<<

std::ostream& operator<< ( std::ostream &  stream,
const Dictionary dict 
)
friend

Output stream operator for printing.

Parameters
[out]streamOutput stream.
[in]dictDictionary to print.
Returns
Updated output stream.

Definition at line 279 of file Dictionary.cpp.

Member Data Documentation

◆ map_

std::unordered_map<std::string, std::unique_ptr<Dictionary> > palimpsest::Dictionary::map_
protected

Key-value map, used if we are a map.

Definition at line 712 of file Dictionary.h.

◆ value_

Value palimpsest::Dictionary::value_
protected

Internal value, used if we are a value.

Definition at line 709 of file Dictionary.h.


The documentation for this class was generated from the following files: