Flow123d  JS_before_hm-1804-gf2ad740aa
Classes | Public Types | Public Member Functions | Private Member Functions | Private Attributes | Friends | List of all members
Input::Type::Selection Class Reference

Template for classes storing finite set of named values. More...

#include <type_selection.hh>

Inheritance diagram for Input::Type::Selection:
Inheritance graph
[legend]
Collaboration diagram for Input::Type::Selection:
Collaboration graph
[legend]

Classes

struct  Key
 Structure for description of one key in selection. More...
 
class  SelectionData
 Internal data class. More...
 

Public Types

typedef std::vector< struct Key >::const_iterator keys_const_iterator
 Public typedef of constant iterator into array of keys. More...
 
- Public Types inherited from Input::Type::TypeBase
typedef std::size_t TypeHash
 Type returned by content_hash methods. More...
 
typedef std::string json_string
 String stored in JSON format. More...
 
typedef std::map< std::string, json_stringattribute_map
 Defines map of Input::Type attributes. More...
 
typedef std::pair< std::string, std::shared_ptr< TypeBase > > ParameterPair
 Defines pairs of (name, Input::Type), that are used for replace of parameters in generic types. More...
 
typedef std::vector< ParameterPairParameterVector
 Define vector of parameters passed to the overloaded make_instance method. More...
 
typedef std::map< std::string, TypeHashParameterMap
 Defines map of used parameters. More...
 
typedef std::pair< std::shared_ptr< TypeBase >, ParameterMapMakeInstanceReturnType
 Return type of make_instance methods, contains instance of generic type and map of used parameters. More...
 

Public Member Functions

 TYPEDEF_ERR_INFO (EI_Selection, const Selection)
 
 TYPEDEF_ERR_INFO (EI_Value, const int)
 
 DECLARE_EXCEPTION (ExcSelectionKeyNotFound,<< "Key "<< EI_KeyName::qval<<" not found in Selection:\n"<< EI_Selection::val)
 
 DECLARE_EXCEPTION (ExcSelectionValueNotFound,<< "Value "<< EI_Value::val<<" not found in Selection:\n"<< EI_Selection::val)
 
 Selection ()
 Default constructor. Empty selection. More...
 
 Selection (const Selection &other)
 Copy constructor. More...
 
 Selection (const string &name, const std::string &description="")
 Creates a handle pointing to the new SelectionData. More...
 
Selectionadd_value (const int value, const std::string &key, const std::string &description="", TypeBase::attribute_map attributes=TypeBase::attribute_map())
 Adds one new value with name given by key to the Selection. More...
 
Selectionadd_attribute (std::string key, TypeBase::json_string value)
 
const Selectionclose () const
 Close the Selection, no more values can be added. More...
 
TypeHash content_hash () const override
 Implements TypeBase::content_hash. More...
 
FinishStatus finish_status () const override
 Implements TypeBase::finish_status. More...
 
bool is_finished () const override
 Implements TypeBase::is_finished. More...
 
string type_name () const override
 Implements Type::TypeBase::type_name. More...
 
string class_name () const override
 Override Type::TypeBase::class_name. More...
 
bool operator== (const TypeBase &other) const override
 Implements TypeBase::operator== compare also Selection names. More...
 
keys_const_iterator begin () const
 Container-like access to the keys of the Selection. More...
 
keys_const_iterator end () const
 Container-like access to the keys of the Selection. More...
 
keys_const_iterator key_iterator (const string &key) const
 Returns iterator to the key struct for given key string. More...
 
int name_to_int (const string &key) const
 Converts given value name key to the value. More...
 
string int_to_name (const int &value) const
 Returns value name for the given value. More...
 
Selectioncopy_values (const Selection &sel)
 Copy all keys and values from sel. More...
 
bool has_name (const string &key) const
 Just check if there is a particular name in the Selection. More...
 
bool has_value (const int &val) const
 Check if there is a particular value in the Selection. More...
 
unsigned int size () const
 Returns number of values in the Selection. More...
 
FinishStatus finish (FinishStatus finish_type=FinishStatus::regular_) override
 Finish declaration of the Selection type. More...
 
bool is_closed () const override
 Implements TypeBase::is_closed. More...
 
MakeInstanceReturnType make_instance (std::vector< ParameterPair > vec=std::vector< ParameterPair >()) override
 
- Public Member Functions inherited from Input::Type::TypeBase
string desc () const
 Returns string with Type extensive documentation. More...
 
bool operator!= (const TypeBase &other) const
 Comparison of types. More...
 
virtual ~TypeBase ()
 Destructor. More...
 
std::string hash_str () const
 Format the hash of this type. More...
 
virtual MakeInstanceReturnType make_instance (ParameterVector vec=ParameterVector())=0
 
bool is_root_of_generic_subtree () const
 Indicates if type is marked with flag root_of_generic_subtree_. More...
 

Private Member Functions

void finished_check () const
 Assertion for finished Selection (methods are called in correct order). More...
 
string key_list () const
 Create string from values of keys. More...
 

Private Attributes

std::shared_ptr< SelectionDatadata_
 Handle to actual Selection data. More...
 

Friends

class OutputBase
 

Additional Inherited Members

- Static Public Member Functions inherited from Input::Type::TypeBase
static void delete_unfinished_types ()
 Finishes and marks all types registered in type repositories and unused in IST. More...
 
static std::string hash_str (TypeHash hash)
 Format given hash for output. More...
 
- Static Public Attributes inherited from Input::Type::TypeBase
const static TypeHash none_hash = std::numeric_limits<TypeHash>::max()
 
- Protected Types inherited from Input::Type::TypeBase
typedef string KeyHash
 The type of hash values used in associative array that translates key names to indices in Record and Selection. More...
 
- Protected Member Functions inherited from Input::Type::TypeBase
 TypeBase ()
 The default constructor. More...
 
 TypeBase (const TypeBase &other)
 Copy constructor. More...
 
void add_attribute_ (std::string name, json_string val)
 Add attribute of given name to attribute map. More...
 
bool validate_json (json_string str) const
 Check if str is valid JSON string. More...
 
json_string print_parameter_map_to_json (ParameterMap parameter_map) const
 Create JSON output from parameter_map formatted as value of attribute. More...
 
json_string print_parameter_map_keys_to_json (ParameterMap param_map) const
 
void set_generic_attributes (ParameterMap param_map)
 
void copy_attributes (attribute_map other_attributes)
 
- Static Protected Member Functions inherited from Input::Type::TypeBase
static KeyHash key_hash (const string &str)
 Hash function. More...
 
static bool is_valid_identifier (const string &key)
 Check that a key is valid identifier. More...
 
- Protected Attributes inherited from Input::Type::TypeBase
std::shared_ptr< attribute_mapattributes_
 map of type attributes (e. g. input_type, name etc.) More...
 
bool root_of_generic_subtree_
 flag is true if type should be root of generic subtree More...
 
TypeHash generic_type_hash_
 hash string of generic type if type is derived, or empty string More...
 
ParameterMap parameter_map_
 map of parameters if type is part of generic subtree More...
 

Detailed Description

Template for classes storing finite set of named values.

The primary purpose of this class is initialization of enum variables. Since C++ provides no reflection, in particular no access to enum identifiers as strings, you has to construct the Selection object consistent with an enum you want to initialize.

Similarly to Type::Record and Type::Abstract the Selection class is only proxy to the actual data.

Usage:

enum Colors { blue, white };
const Selection & SomeClass::get_selection_input_type() {
return Selection("Colors", "Set of color.")
.add_value(blue, "blue")
.add_value(white,"white","White color") // with optional item description
.close();
}

TODO: We can not guarantee full compatibility of the Selection with corresponding Enum type the Selection can have fewer values since we can not get number of values in the Enum. Therefore we either have to move under C++11, where enum classes may provide elementary reflection or have Selection of simple ints.

Definition at line 65 of file type_selection.hh.

Member Typedef Documentation

◆ keys_const_iterator

Public typedef of constant iterator into array of keys.

Definition at line 89 of file type_selection.hh.

Constructor & Destructor Documentation

◆ Selection() [1/3]

Input::Type::Selection::Selection ( )

Default constructor. Empty selection.

Definition at line 27 of file type_selection.cc.

◆ Selection() [2/3]

Input::Type::Selection::Selection ( const Selection other)

Copy constructor.

Definition at line 36 of file type_selection.cc.

◆ Selection() [3/3]

Input::Type::Selection::Selection ( const string &  name,
const std::string &  description = "" 
)

Creates a handle pointing to the new SelectionData.

Member Function Documentation

◆ add_attribute()

Selection & Input::Type::Selection::add_attribute ( std::string  key,
TypeBase::json_string  value 
)

Definition at line 59 of file type_selection.cc.

◆ add_value()

Selection & Input::Type::Selection::add_value ( const int  value,
const std::string &  key,
const std::string &  description = "",
TypeBase::attribute_map  attributes = TypeBase::attribute_map() 
)

Adds one new value with name given by key to the Selection.

The description of meaning of the value could be provided.

Definition at line 50 of file type_selection.cc.

Here is the caller graph for this function:

◆ begin()

Selection::keys_const_iterator Input::Type::Selection::begin ( ) const
inline

Container-like access to the keys of the Selection.

Returns iterator to the first key.

Definition at line 291 of file type_selection.hh.

Here is the caller graph for this function:

◆ class_name()

string Input::Type::Selection::class_name ( ) const
overridevirtual

Override Type::TypeBase::class_name.

Reimplemented from Input::Type::TypeBase.

Definition at line 119 of file type_selection.cc.

◆ close()

const Selection & Input::Type::Selection::close ( ) const

Close the Selection, no more values can be added.

Definition at line 65 of file type_selection.cc.

Here is the caller graph for this function:

◆ content_hash()

TypeBase::TypeHash Input::Type::Selection::content_hash ( ) const
overridevirtual

Implements TypeBase::content_hash.

Hash is calculated by type name, description, hash of keys and attributes.

Implements Input::Type::TypeBase.

Definition at line 84 of file type_selection.cc.

Here is the caller graph for this function:

◆ copy_values()

Selection & Input::Type::Selection::copy_values ( const Selection sel)

Copy all keys and values from sel.

Definition at line 151 of file type_selection.cc.

◆ DECLARE_EXCEPTION() [1/2]

Input::Type::Selection::DECLARE_EXCEPTION ( ExcSelectionKeyNotFound  ,
<< "Key "<< EI_KeyName::qval<<" not found in Selection:\n"<< EI_Selection::val   
)

◆ DECLARE_EXCEPTION() [2/2]

Input::Type::Selection::DECLARE_EXCEPTION ( ExcSelectionValueNotFound  ,
<< "Value "<< EI_Value::val<<" not found in Selection:\n"<< EI_Selection::val   
)

◆ end()

Selection::keys_const_iterator Input::Type::Selection::end ( ) const
inline

Container-like access to the keys of the Selection.

Returns iterator to the last key.

Definition at line 299 of file type_selection.hh.

Here is the caller graph for this function:

◆ finish()

FinishStatus Input::Type::Selection::finish ( FinishStatus  finish_type = FinishStatus::regular_)
overridevirtual

Finish declaration of the Selection type.

Reimplemented from Input::Type::TypeBase.

Definition at line 71 of file type_selection.cc.

Here is the caller graph for this function:

◆ finish_status()

FinishStatus Input::Type::Selection::finish_status ( ) const
overridevirtual

Implements TypeBase::finish_status.

Reimplemented from Input::Type::TypeBase.

Definition at line 100 of file type_selection.cc.

◆ finished_check()

void Input::Type::Selection::finished_check ( ) const
inlineprivate

Assertion for finished Selection (methods are called in correct order).

Definition at line 285 of file type_selection.hh.

Here is the caller graph for this function:

◆ has_name()

bool Input::Type::Selection::has_name ( const string &  key) const
inline

Just check if there is a particular name in the Selection.

Definition at line 261 of file type_selection.hh.

◆ has_value()

bool Input::Type::Selection::has_value ( const int &  val) const
inline

Check if there is a particular value in the Selection.

Definition at line 269 of file type_selection.hh.

◆ int_to_name()

string Input::Type::Selection::int_to_name ( const int &  value) const

Returns value name for the given value.

Throws exception if the value does not exist.

Definition at line 141 of file type_selection.cc.

Here is the caller graph for this function:

◆ is_closed()

bool Input::Type::Selection::is_closed ( ) const
overridevirtual

Implements TypeBase::is_closed.

Reimplemented from Input::Type::TypeBase.

Definition at line 110 of file type_selection.cc.

Here is the caller graph for this function:

◆ is_finished()

bool Input::Type::Selection::is_finished ( ) const
overridevirtual

Implements TypeBase::is_finished.

Reimplemented from Input::Type::TypeBase.

Definition at line 105 of file type_selection.cc.

Here is the caller graph for this function:

◆ key_iterator()

Selection::keys_const_iterator Input::Type::Selection::key_iterator ( const string &  key) const
inline

Returns iterator to the key struct for given key string.

Definition at line 306 of file type_selection.hh.

◆ key_list()

string Input::Type::Selection::key_list ( ) const
private

Create string from values of keys.

Used in error messaged, where we can not use desc(), which can lead to infinite loop due to TYPE selection of Abstract.

Definition at line 165 of file type_selection.cc.

◆ make_instance()

TypeBase::MakeInstanceReturnType Input::Type::Selection::make_instance ( std::vector< ParameterPair vec = std::vector<ParameterPair>())
override

Definition at line 174 of file type_selection.cc.

◆ name_to_int()

int Input::Type::Selection::name_to_int ( const string &  key) const

Converts given value name key to the value.

Throws exception if the value name does not exist.

Definition at line 130 of file type_selection.cc.

Here is the caller graph for this function:

◆ operator==()

bool Input::Type::Selection::operator== ( const TypeBase other) const
overridevirtual

Implements TypeBase::operator== compare also Selection names.

Reimplemented from Input::Type::TypeBase.

Definition at line 124 of file type_selection.cc.

◆ size()

unsigned int Input::Type::Selection::size ( ) const
inline

Returns number of values in the Selection.

Definition at line 276 of file type_selection.hh.

Here is the caller graph for this function:

◆ type_name()

string Input::Type::Selection::type_name ( ) const
overridevirtual

Implements Type::TypeBase::type_name.

Name corresponds to data->type_name_.

Reimplemented from Input::Type::TypeBase.

Definition at line 114 of file type_selection.cc.

Here is the caller graph for this function:

◆ TYPEDEF_ERR_INFO() [1/2]

Input::Type::Selection::TYPEDEF_ERR_INFO ( EI_Selection  ,
const  Selection 
)

◆ TYPEDEF_ERR_INFO() [2/2]

Input::Type::Selection::TYPEDEF_ERR_INFO ( EI_Value  ,
const int   
)

Friends And Related Function Documentation

◆ OutputBase

friend class OutputBase
friend

Definition at line 66 of file type_selection.hh.

Member Data Documentation

◆ data_

std::shared_ptr<SelectionData> Input::Type::Selection::data_
private

Handle to actual Selection data.

Definition at line 249 of file type_selection.hh.


The documentation for this class was generated from the following files:
Input::Type::Selection::Selection
Selection()
Default constructor. Empty selection.
Definition: type_selection.cc:27