8 #ifndef SCARAB_PARAM_NODE_HH_ 9 #define SCARAB_PARAM_NODE_HH_ 13 #include <boost/iterator/iterator_adaptor.hpp> 14 #include <boost/type_traits/is_convertible.hpp> 15 #include <boost/utility/enable_if.hpp> 24 template<
class x_key,
class x_value,
class x_iiterator >
25 class map_deref_iterator :
public boost::iterator_adaptor< map_deref_iterator< x_key, x_value, x_iiterator >, x_iiterator, x_value, boost::bidirectional_traversal_tag >
40 template<
class x_other_value,
class x_other_iiterator >
47 return this->base()->first;
51 friend class boost::iterator_core_access;
55 return *this->base()->second;
80 virtual param* clone()
const;
82 virtual bool is_null()
const;
83 virtual bool is_node()
const;
85 virtual bool has_subset(
const param& a_subset )
const;
87 unsigned size()
const;
90 bool has(
const std::string& a_name )
const;
91 unsigned count(
const std::string& a_name )
const;
95 std::string get_value(
const std::string& a_name )
const;
98 template<
typename XValType >
99 XValType get_value(
const std::string& a_name )
const;
103 std::string get_value(
const std::string& a_name,
const std::string& a_default )
const;
104 std::string get_value(
const std::string& a_name,
const char* a_default )
const;
107 template<
typename XValType >
108 XValType get_value(
const std::string& a_name, XValType a_default )
const;
112 const param& at(
const std::string& a_name )
const;
115 param& at(
const std::string& a_name );
119 const param_value& value_at(
const std::string& a_name )
const;
122 param_value& value_at(
const std::string& a_name );
126 const param_array& array_at(
const std::string& a_name )
const;
129 param_array& array_at(
const std::string& a_name );
133 const param_node& node_at(
const std::string& a_name )
const;
136 param_node& node_at(
const std::string& a_name );
140 const param& operator[](
const std::string& a_name )
const;
143 param& operator[](
const std::string& a_name );
146 bool add(
const std::string& a_name,
const param& a_value );
148 bool add(
const std::string& a_name,
param* a_value_ptr );
151 void replace(
const std::string& a_name,
const param& a_value );
153 void replace(
const std::string& a_name,
param* a_value_ptr );
160 void erase(
const std::string& a_name );
161 param*
remove(
const std::string& a_name );
165 const_iterator begin()
const;
168 const_iterator end()
const;
178 template<
typename XValType >
181 return value_at( a_name ).get< XValType >();
184 template<
typename XValType >
187 return has( a_name ) ? value_at( a_name ).get< XValType >() : a_default;
208 return f_contents.size();
212 return f_contents.empty();
217 return f_contents.count( a_name ) > 0;
222 return f_contents.count( a_name );
227 return value_at( a_name ).to_string();
232 return has( a_name ) ? value_at( a_name ).to_string() : a_default;
237 return get_value( a_name, std::string( a_default ) );
242 return *f_contents.at( a_name );
247 return *f_contents.at( a_name );
282 return *f_contents.at( a_name );
287 return *f_contents[ a_name ];
292 contents::iterator it = f_contents.find( a_name );
293 if( it == f_contents.end() )
303 contents::iterator it = f_contents.find( a_name );
304 if( it == f_contents.end() )
315 f_contents[ a_name ] = a_value.
clone();
322 f_contents[ a_name ] = a_value;
328 contents::iterator it = f_contents.find( a_name );
329 if( it != f_contents.end() )
332 f_contents.erase( it );
339 contents::iterator it = f_contents.find( a_name );
340 if( it != f_contents.end() )
342 param* removed = it->second;
343 f_contents.erase( it );
351 for( contents::iterator it = f_contents.begin(); it != f_contents.end(); ++it )
361 return iterator( f_contents.begin() );
371 return iterator( f_contents.end() );
void replace(const std::string &a_name, const param &a_value)
creates a copy of a_value
const param_node & node_at(const std::string &a_name) const
const param_value & value_at(const std::string &a_name) const
unsigned count(const std::string &a_name) const
void erase(const std::string &a_name)
const param_array & array_at(const std::string &a_name) const
virtual bool is_null() const
std::string type(const x_type &a_param)
virtual param * clone() const
contents::value_type contents_type
map_deref_iterator(const map_deref_iterator< x_key, x_other_value, x_other_iiterator > &other, typename boost::enable_if< boost::is_convertible< x_other_value, x_value >, enabler >::type=enabler())
param_node_iterator iterator
virtual bool is_node() const
std::map< std::string, param * > param_node_contents
std::string get_value(const std::string &a_name) const
bool has(const std::string &a_name) const
const x_key & name() const
const param & at(const std::string &a_name) const
const param & operator[](const std::string &a_name) const
param_node_const_iterator const_iterator
param * remove(const std::string &a_name)
SCARAB_API std::ostream & operator<<(std::ostream &out, const param_array &a_value)
map_deref_iterator(const x_iiterator &other)
std::string to_string(std::uint64_t x)
map_deref_iterator< std::string, param, param_node_contents::iterator > param_node_iterator
bool add(const std::string &a_name, const param &a_value)
creates a copy of a_value
param_node_contents contents
x_value & dereference() const
map_deref_iterator< std::string, const param, param_node_contents::const_iterator > param_node_const_iterator
virtual param * clone() const