Cantera 2.6.0
|
A wrapper for a variable whose type is determined at runtime. More...
#include <AnyMap.h>
Public Member Functions | |
AnyValue (AnyValue const &other) | |
AnyValue (AnyValue &&other) | |
AnyValue & | operator= (AnyValue const &other) |
AnyValue & | operator= (AnyValue &&other) |
bool | operator== (const AnyValue &other) const |
bool | operator!= (const AnyValue &other) const |
AnyValue & | operator[] (const std::string &key) |
If this AnyValue is an AnyMap, return the value stored in key . More... | |
const AnyValue & | operator[] (const std::string &key) const |
bool | hasKey (const std::string &key) const |
Returns true if this AnyValue is an AnyMap and that map contains a key with the given name. More... | |
void | setKey (const std::string &key) |
Set the name of the key storing this value in an AnyMap. More... | |
void | propagateMetadata (shared_ptr< AnyMap > &file) |
Propagate metadata to any child elements. More... | |
template<class T > | |
const T & | as () const |
Get the value of this key as the specified type. More... | |
template<class T > | |
T & | as () |
const std::type_info & | type () const |
Returns the type of the held value. More... | |
std::string | type_str () const |
Returns a string specifying the type of the held value. More... | |
bool | empty () const |
Return boolean indicating whether AnyValue is empty. More... | |
template<class T > | |
bool | is () const |
Returns true if the held value is of the specified type. More... | |
bool | isScalar () const |
Returns true if the held value is a scalar type (such as double , long int , string , or bool ). More... | |
AnyValue (const std::string &value) | |
AnyValue (const char *value) | |
AnyValue & | operator= (const std::string &value) |
AnyValue & | operator= (const char *value) |
const std::string & | asString () const |
Return the held value, if it is a string. More... | |
bool | operator== (const std::string &other) const |
bool | operator!= (const std::string &other) const |
AnyValue (double value) | |
AnyValue & | operator= (double value) |
double & | asDouble () |
Return the held value as a double , if it is a double or a long int . More... | |
const double & | asDouble () const |
bool | operator== (const double &other) const |
bool | operator!= (const double &other) const |
AnyValue (bool value) | |
AnyValue & | operator= (bool value) |
bool & | asBool () |
Return the held value, if it is a bool . More... | |
const bool & | asBool () const |
AnyValue (long int value) | |
AnyValue (int value) | |
AnyValue & | operator= (long int value) |
AnyValue & | operator= (int value) |
long int & | asInt () |
Return the held value, if it is a long int . More... | |
const long int & | asInt () const |
bool | operator== (const long int &other) const |
bool | operator!= (const long int &other) const |
bool | operator== (const int &other) const |
bool | operator!= (const int &other) const |
template<class T > | |
AnyValue & | operator= (const std::vector< T > &value) |
template<class T > | |
const std::vector< T > & | asVector (size_t nMin=npos, size_t nMax=npos) const |
Return the held value, if it is a vector of type T . More... | |
template<class T > | |
std::vector< T > & | asVector (size_t nMin=npos, size_t nMax=npos) |
AnyValue (const AnyMap &value) | |
AnyValue & | operator= (const AnyMap &value) |
AnyValue & | operator= (AnyMap &&value) |
template<class T > | |
AnyValue & | operator= (const std::unordered_map< std::string, T > items) |
template<class T > | |
AnyValue & | operator= (const std::map< std::string, T > items) |
template<class T > | |
std::map< std::string, T > | asMap () const |
Return the held AnyMap as a std::map where all of the values have the specified type. More... | |
std::unordered_map< std::string, const AnyMap * > | asMap (const std::string &name) const |
Access a vector<AnyMap> as a mapping using the value of name from each item as the key in the new mapping. More... | |
std::unordered_map< std::string, AnyMap * > | asMap (const std::string &name) |
AnyMap & | getMapWhere (const std::string &key, const std::string &value, bool create=false) |
Treating the value as vector<AnyMap> , return the item where the given key has the specified value. More... | |
const AnyMap & | getMapWhere (const std::string &key, const std::string &value) const |
bool | hasMapWhere (const std::string &key, const std::string &value) const |
Returns true when getMapWhere() would succeed. More... | |
std::pair< int, int > | order () const |
Return values used to determine the sort order when outputting to YAML. More... | |
void | applyUnits (shared_ptr< UnitSystem > &units) |
void | setFlowStyle (bool flow=true) |
template<> | |
const std::vector< AnyValue > & | asVector (size_t nMin, size_t nMax) const |
Implicit conversion to vector<AnyValue> More... | |
template<> | |
std::vector< AnyValue > & | asVector (size_t nMin, size_t nMax) |
template<> | |
const std::vector< double > & | asVector (size_t nMin, size_t nMax) const |
Implicit conversion of long int to double if accessed as a vector<double> More... | |
template<> | |
std::vector< double > & | asVector (size_t nMin, size_t nMax) |
template<> | |
const std::vector< vector_fp > & | asVector (size_t nMin, size_t nMax) const |
Implicit conversion of long int to double if accessed as a vector<vector<double>> More... | |
template<> | |
std::vector< vector_fp > & | asVector (size_t nMin, size_t nMax) |
template<> | |
const std::vector< AnyMap > & | asVector (size_t nMin, size_t nMax) const |
Implicit conversion of AnyMap to a vector<AnyMap> of length 1, or an empty vector<AnyValue> an empty vector<AnyMap> More... | |
template<> | |
std::vector< AnyMap > & | asVector (size_t nMin, size_t nMax) |
template<> | |
AnyMap & | as () |
template<> | |
bool | is () const |
template<> | |
const std::vector< AnyValue > & | asVector (size_t nMin, size_t nMax) const |
template<> | |
std::vector< AnyValue > & | asVector (size_t nMin, size_t nMax) |
template<> | |
const std::vector< double > & | asVector (size_t nMin, size_t nMax) const |
template<> | |
std::vector< double > & | asVector (size_t nMin, size_t nMax) |
template<> | |
const std::vector< vector_fp > & | asVector (size_t nMin, size_t nMax) const |
template<> | |
std::vector< vector_fp > & | asVector (size_t nMin, size_t nMax) |
template<> | |
const std::vector< AnyMap > & | asVector (size_t nMin, size_t nMax) const |
template<> | |
std::vector< AnyMap > & | asVector (size_t nMin, size_t nMax) |
Public Member Functions inherited from AnyBase | |
void | setLoc (int line, int column) |
For values which are derived from an input file, set the line and column of this value in that file. More... | |
const AnyValue & | getMetadata (const std::string &key) const |
Get a value from the metadata applicable to the AnyMap tree containing this node. More... | |
Private Types | |
typedef bool(* | Comparer) (const boost::any &, const boost::any &) |
Private Member Functions | |
template<class T > | |
void | checkSize (const std::vector< T > &v, size_t nMin, size_t nMax) const |
Static Private Member Functions | |
template<typename T > | |
static bool | eq_comparer (const boost::any &lhs, const boost::any &rhs) |
Equality comparison function used when lhs is of type T More... | |
template<class T , class U > | |
static bool | vector_eq (const boost::any &lhs, const boost::any &rhs) |
Helper function for comparing vectors of different (but comparable) types, for example vector<double> and vector<long int> More... | |
template<class T , class U > | |
static bool | vector2_eq (const boost::any &lhs, const boost::any &rhs) |
Helper function for comparing nested vectors of different (but comparable) types, for example vector<vector<double>> and vector<vector<long int>> More... | |
Private Attributes | |
std::string | m_key |
Key of this value in a parent AnyMap More... | |
std::unique_ptr< boost::any > | m_value |
The held value. More... | |
Comparer | m_equals |
Friends | |
bool | operator== (const std::string &lhs, const AnyValue &rhs) |
bool | operator!= (const std::string &lhs, const AnyValue &rhs) |
bool | operator== (const double &lhs, const AnyValue &rhs) |
bool | operator!= (const double &lhs, const AnyValue &rhs) |
bool | operator== (const long int &lhs, const AnyValue &rhs) |
bool | operator!= (const long int &lhs, const AnyValue &rhs) |
bool | operator== (const int &lhs, const AnyValue &rhs) |
bool | operator!= (const int &lhs, const AnyValue &rhs) |
YAML::Emitter & | YAML::operator<< (YAML::Emitter &out, const AnyValue &rhs) |
Quantity conversions | |
Assign a quantity consisting of one or more values and their corresponding units, which will be converted to a target unit system when the applyUnits() function is later called on the root of the AnyMap. | |
typedef std::function< void(AnyValue &, const UnitSystem &)> | unitConverter |
void | setQuantity (double value, const std::string &units, bool is_act_energy=false) |
Assign a scalar quantity with units as a string, for example {3.0, "m^2"} . More... | |
void | setQuantity (double value, const Units &units) |
Assign a scalar quantity with units as a Units object, for cases where the units vary and are determined dynamically, such as reaction pre-exponential factors. More... | |
void | setQuantity (const vector_fp &values, const std::string &units) |
Assign a vector where all the values have the same units. More... | |
void | setQuantity (const AnyValue &value, const unitConverter &converter) |
Assign a value of any type where the unit conversion requires a different behavior besides scaling all values by the same factor. More... | |
Additional Inherited Members | |
Protected Attributes inherited from AnyBase | |
int | m_line |
The line where this value occurs in the input file. More... | |
int | m_column |
If m_line >= 0, the column where this value occurs in the input file. More... | |
shared_ptr< AnyMap > | m_metadata |
Metadata relevant to an entire AnyMap tree, such as information about. More... | |
A wrapper for a variable whose type is determined at runtime.
Instances of AnyValue are used as values in an AnyMap. Values are converted to a concrete type using the templated as() method or convenience methods such as asString() and asDouble(). See AnyMap for usage examples.
Elements are set using assignment, and the assignment operator has been overloaded for specific types so that only those types are allowed to be used in an AnyValue. The allowed types are:
double
long int
bool
std::string
std::vector
of any of the above typedef std::function<void(AnyValue&, const UnitSystem&)> unitConverter |
|
private |
AnyValue | ( | ) |
Definition at line 588 of file AnyMap.cpp.
Definition at line 596 of file AnyMap.cpp.
Definition at line 604 of file AnyMap.cpp.
|
explicit |
Definition at line 694 of file AnyMap.cpp.
|
explicit |
Definition at line 699 of file AnyMap.cpp.
|
explicit |
Definition at line 790 of file AnyMap.cpp.
|
explicit |
Definition at line 837 of file AnyMap.cpp.
|
explicit |
Definition at line 858 of file AnyMap.cpp.
|
explicit |
Definition at line 863 of file AnyMap.cpp.
Definition at line 936 of file AnyMap.cpp.
Definition at line 612 of file AnyMap.cpp.
Definition at line 623 of file AnyMap.cpp.
bool operator== | ( | const AnyValue & | other | ) | const |
Definition at line 634 of file AnyMap.cpp.
bool operator!= | ( | const AnyValue & | other | ) | const |
Definition at line 639 of file AnyMap.cpp.
AnyValue & operator[] | ( | const std::string & | key | ) |
If this AnyValue is an AnyMap, return the value stored in key
.
Definition at line 644 of file AnyMap.cpp.
const AnyValue & operator[] | ( | const std::string & | key | ) | const |
Definition at line 649 of file AnyMap.cpp.
bool hasKey | ( | const std::string & | key | ) | const |
Returns true
if this AnyValue is an AnyMap and that map contains a key with the given name.
Definition at line 654 of file AnyMap.cpp.
References AnyValue::hasKey().
Referenced by AnyValue::getMapWhere(), AnyValue::hasKey(), AnyValue::hasMapWhere(), and Domain1D::restore().
void setKey | ( | const std::string & | key | ) |
Set the name of the key storing this value in an AnyMap.
Used for providing informative error messages in class InputFileError.
Definition at line 658 of file AnyMap.cpp.
References AnyValue::m_key.
Referenced by AnyMap::createForYaml(), and AnyMap::operator[]().
void propagateMetadata | ( | shared_ptr< AnyMap > & | file | ) |
Propagate metadata to any child elements.
Definition at line 664 of file AnyMap.cpp.
References AnyValue::is(), and AnyBase::m_metadata.
Referenced by AnyMap::createForYaml(), and AnyMap::operator[]().
const T & as |
Get the value of this key as the specified type.
Definition at line 19 of file AnyMap.inl.h.
Referenced by AnyValue::applyUnits().
T & as |
Definition at line 51 of file AnyMap.inl.h.
const std::type_info & type | ( | ) | const |
Returns the type of the held value.
Definition at line 660 of file AnyMap.cpp.
References AnyValue::m_value.
Referenced by AnyValue::type_str().
std::string type_str | ( | ) | const |
Returns a string specifying the type of the held value.
Definition at line 680 of file AnyMap.cpp.
References Cantera::demangle(), and AnyValue::type().
bool empty | ( | ) | const |
Return boolean indicating whether AnyValue is empty.
Definition at line 684 of file AnyMap.cpp.
References AnyValue::m_value.
Referenced by ReactingSurf1D::serialize(), StFlow::serialize(), and ArrheniusBase::setRateParameters().
bool is |
Returns true
if the held value is of the specified type.
Definition at line 58 of file AnyMap.inl.h.
References AnyValue::m_value.
Referenced by AnyValue::applyUnits(), AnyValue::getMapWhere(), AnyValue::hasMapWhere(), AnyValue::propagateMetadata(), ArrheniusBase::setRateParameters(), and MolalityVPSSTP::setState().
bool isScalar | ( | ) | const |
Returns true
if the held value is a scalar type (such as double
, long int
, string
, or bool
).
Definition at line 688 of file AnyMap.cpp.
Referenced by StFlow::restore().
AnyValue & operator= | ( | const std::string & | value | ) |
Definition at line 704 of file AnyMap.cpp.
AnyValue & operator= | ( | const char * | value | ) |
Definition at line 710 of file AnyMap.cpp.
const std::string & asString | ( | ) | const |
Return the held value, if it is a string.
Definition at line 716 of file AnyMap.cpp.
Referenced by ReactingSurf1D::serialize(), StFlow::serialize(), and MolalityVPSSTP::setState().
bool operator== | ( | const std::string & | other | ) | const |
Definition at line 720 of file AnyMap.cpp.
bool operator!= | ( | const std::string & | other | ) | const |
Definition at line 729 of file AnyMap.cpp.
void setQuantity | ( | double | value, |
const std::string & | units, | ||
bool | is_act_energy = false |
||
) |
Assign a scalar quantity with units as a string, for example {3.0, "m^2"}
.
If the is_act_energy
flag is set to true
, the units will be converted using the special rules for activation energies.
Definition at line 746 of file AnyMap.cpp.
References AnyValue::m_value.
void setQuantity | ( | double | value, |
const Units & | units | ||
) |
Assign a scalar quantity with units as a Units object, for cases where the units vary and are determined dynamically, such as reaction pre-exponential factors.
Definition at line 751 of file AnyMap.cpp.
References AnyValue::m_value.
void setQuantity | ( | const vector_fp & | values, |
const std::string & | units | ||
) |
Assign a vector where all the values have the same units.
Definition at line 756 of file AnyMap.cpp.
References AnyValue::m_value.
void setQuantity | ( | const AnyValue & | value, |
const unitConverter & | converter | ||
) |
Assign a value of any type where the unit conversion requires a different behavior besides scaling all values by the same factor.
Definition at line 763 of file AnyMap.cpp.
References AnyValue::m_value.
AnyValue & operator= | ( | double | value | ) |
Definition at line 795 of file AnyMap.cpp.
double & asDouble | ( | ) |
Return the held value as a double
, if it is a double
or a long int
.
Definition at line 801 of file AnyMap.cpp.
const double & asDouble | ( | ) | const |
Definition at line 805 of file AnyMap.cpp.
bool operator== | ( | const double & | other | ) | const |
Definition at line 809 of file AnyMap.cpp.
bool operator!= | ( | const double & | other | ) | const |
Definition at line 820 of file AnyMap.cpp.
AnyValue & operator= | ( | bool | value | ) |
Definition at line 842 of file AnyMap.cpp.
bool & asBool | ( | ) |
Return the held value, if it is a bool
.
Definition at line 848 of file AnyMap.cpp.
Referenced by StFlow::restore().
const bool & asBool | ( | ) | const |
Definition at line 852 of file AnyMap.cpp.
AnyValue & operator= | ( | long int | value | ) |
Definition at line 868 of file AnyMap.cpp.
AnyValue & operator= | ( | int | value | ) |
Definition at line 874 of file AnyMap.cpp.
long int & asInt | ( | ) |
Return the held value, if it is a long int
.
Definition at line 880 of file AnyMap.cpp.
const long int & asInt | ( | ) | const |
Definition at line 884 of file AnyMap.cpp.
bool operator== | ( | const long int & | other | ) | const |
Definition at line 888 of file AnyMap.cpp.
bool operator!= | ( | const long int & | other | ) | const |
Definition at line 899 of file AnyMap.cpp.
bool operator== | ( | const int & | other | ) | const |
Definition at line 904 of file AnyMap.cpp.
bool operator!= | ( | const int & | other | ) | const |
Definition at line 909 of file AnyMap.cpp.
AnyValue & operator= | ( | const std::vector< T > & | value | ) |
Definition at line 65 of file AnyMap.inl.h.
Return the held value, if it is a vector of type T
.
If called with one argument, requires the vector to be of the specified size. If called with two arguments, requires the vector to be within the range specified by the two values, inclusive.
Definition at line 72 of file AnyMap.inl.h.
Referenced by Cantera::getReactions(), Cantera::getSpecies(), and StFlow::restore().
Definition at line 79 of file AnyMap.inl.h.
Definition at line 941 of file AnyMap.cpp.
Definition at line 947 of file AnyMap.cpp.
AnyValue & operator= | ( | const std::unordered_map< std::string, T > | items | ) |
Definition at line 86 of file AnyMap.inl.h.
AnyValue & operator= | ( | const std::map< std::string, T > | items | ) |
Definition at line 97 of file AnyMap.inl.h.
std::map< std::string, T > asMap |
Return the held AnyMap
as a std::map
where all of the values have the specified type.
Definition at line 125 of file AnyMap.inl.h.
Referenced by MolalityVPSSTP::setState().
std::unordered_map< std::string, const AnyMap * > asMap | ( | const std::string & | name | ) | const |
Access a vector<AnyMap>
as a mapping using the value of name
from each item as the key in the new mapping.
For example, for the list:
calling asMap("name")
will create a map with keys O2
and CH4
.
Definition at line 953 of file AnyMap.cpp.
std::unordered_map< std::string, AnyMap * > asMap | ( | const std::string & | name | ) |
Definition at line 968 of file AnyMap.cpp.
AnyMap & getMapWhere | ( | const std::string & | key, |
const std::string & | value, | ||
bool | create = false |
||
) |
Treating the value as vector<AnyMap>
, return the item where the given key has the specified value.
If value is the empty string, returns the first item in the list.
If the contained type is just AnyMap
rather than vector<AnyMap>
, it will be treated as a vector of length 1.
If the value does not exist but the create
flag is set to true, a new map with that key and value will be created and returned.
Definition at line 1012 of file AnyMap.cpp.
References AnyMap::at(), AnyValue::hasKey(), AnyValue::is(), and AnyValue::m_key.
Referenced by Cantera::newSolution().
const AnyMap & getMapWhere | ( | const std::string & | key, |
const std::string & | value | ||
) | const |
Definition at line 982 of file AnyMap.cpp.
bool hasMapWhere | ( | const std::string & | key, |
const std::string & | value | ||
) | const |
Returns true
when getMapWhere() would succeed.
Definition at line 1063 of file AnyMap.cpp.
References AnyValue::hasKey(), and AnyValue::is().
std::pair< int, int > order | ( | ) | const |
Return values used to determine the sort order when outputting to YAML.
Definition at line 1086 of file AnyMap.cpp.
References AnyBase::m_column, and AnyBase::m_line.
void applyUnits | ( | shared_ptr< UnitSystem > & | units | ) |
Definition at line 1091 of file AnyMap.cpp.
References AnyMap::applyUnits(), AnyValue::as(), AnyMap::getBool(), AnyMap::hasKey(), AnyValue::is(), AnyValue::m_key, AnyValue::m_value, and Cantera::scale().
void setFlowStyle | ( | bool | flow = true | ) |
Definition at line 1188 of file AnyMap.cpp.
|
private |
Definition at line 135 of file AnyMap.inl.h.
|
staticprivate |
Equality comparison function used when lhs is of type T
Definition at line 179 of file AnyMap.inl.h.
References AssertThrowMsg.
|
staticprivate |
Helper function for comparing vectors of different (but comparable) types, for example vector<double>
and vector<long int>
Definition at line 150 of file AnyMap.inl.h.
|
staticprivate |
Helper function for comparing nested vectors of different (but comparable) types, for example vector<vector<double>>
and vector<vector<long int>>
Definition at line 162 of file AnyMap.inl.h.
const std::vector< AnyValue > & asVector | ( | size_t | nMin, |
size_t | nMax | ||
) | const |
Implicit conversion to vector<AnyValue>
const std::vector< double > & asVector | ( | size_t | nMin, |
size_t | nMax | ||
) | const |
Implicit conversion of long int to double if accessed as a vector<double>
const std::vector< vector_fp > & asVector | ( | size_t | nMin, |
size_t | nMax | ||
) | const |
Implicit conversion of long int to double if accessed as a vector<vector<double>>
const std::vector< AnyMap > & asVector | ( | size_t | nMin, |
size_t | nMax | ||
) | const |
Implicit conversion of AnyMap to a vector<AnyMap> of length 1, or an empty vector<AnyValue> an empty vector<AnyMap>
|
inline |
Definition at line 108 of file AnyMap.inl.h.
bool is | ( | ) | const |
Definition at line 770 of file AnyMap.cpp.
const std::vector< AnyValue > & asVector | ( | size_t | nMin, |
size_t | nMax | ||
) | const |
Definition at line 1196 of file AnyMap.cpp.
std::vector< AnyValue > & asVector | ( | size_t | nMin, |
size_t | nMax | ||
) |
Definition at line 1196 of file AnyMap.cpp.
const std::vector< double > & asVector | ( | size_t | nMin, |
size_t | nMax | ||
) | const |
Definition at line 1235 of file AnyMap.cpp.
std::vector< double > & asVector | ( | size_t | nMin, |
size_t | nMax | ||
) |
Definition at line 1235 of file AnyMap.cpp.
const std::vector< vector_fp > & asVector | ( | size_t | nMin, |
size_t | nMax | ||
) | const |
Definition at line 1267 of file AnyMap.cpp.
std::vector< vector_fp > & asVector | ( | size_t | nMin, |
size_t | nMax | ||
) |
Definition at line 1267 of file AnyMap.cpp.
const std::vector< AnyMap > & asVector | ( | size_t | nMin, |
size_t | nMax | ||
) | const |
Definition at line 1305 of file AnyMap.cpp.
std::vector< AnyMap > & asVector | ( | size_t | nMin, |
size_t | nMax | ||
) |
Definition at line 1305 of file AnyMap.cpp.
|
friend |
Definition at line 734 of file AnyMap.cpp.
|
friend |
Definition at line 739 of file AnyMap.cpp.
|
friend |
Definition at line 825 of file AnyMap.cpp.
|
friend |
Definition at line 830 of file AnyMap.cpp.
|
friend |
Definition at line 914 of file AnyMap.cpp.
|
friend |
Definition at line 919 of file AnyMap.cpp.
|
friend |
Definition at line 924 of file AnyMap.cpp.
|
friend |
Definition at line 929 of file AnyMap.cpp.
|
private |
Key of this value in a parent AnyMap
Definition at line 275 of file AnyMap.h.
Referenced by AnyValue::applyUnits(), AnyValue::getMapWhere(), and AnyValue::setKey().
|
private |
The held value.
Definition at line 278 of file AnyMap.h.
Referenced by AnyValue::applyUnits(), AnyValue::empty(), AnyValue::is(), AnyValue::setQuantity(), and AnyValue::type().