8 #ifndef SCARAB_PARAM_ARRAY_HH_ 9 #define SCARAB_PARAM_ARRAY_HH_ 13 #include <boost/iterator/iterator_adaptor.hpp> 14 #include <boost/type_traits/is_convertible.hpp> 15 #include <boost/utility/enable_if.hpp> 16 #include <boost/iterator/indirect_iterator.hpp> 48 virtual param* clone()
const;
50 virtual bool is_null()
const;
51 virtual bool is_array()
const;
53 virtual bool has_subset(
const param& a_subset )
const;
55 unsigned size()
const;
60 void resize(
unsigned a_size );
64 std::string get_value(
unsigned a_index )
const;
67 template<
typename XValType >
68 XValType get_value(
unsigned a_index )
const;
72 std::string get_value(
unsigned a_index,
const std::string& a_default )
const;
73 std::string get_value(
unsigned a_index,
const char* a_default )
const;
76 template<
typename XValType >
77 XValType get_value(
unsigned a_index, XValType a_default )
const;
81 const param& at(
unsigned a_index )
const;
84 param& at(
unsigned a_index );
88 const param_value& value_at(
unsigned a_index )
const;
95 const param_array& array_at(
unsigned a_index )
const;
102 const param_node& node_at(
unsigned a_index )
const;
109 const param& operator[](
unsigned a_index )
const;
112 param& operator[](
unsigned a_index );
114 const param& front()
const;
117 const param& back()
const;
121 void assign(
unsigned a_index,
const param& a_value );
123 void assign(
unsigned a_index,
param* a_value_ptr );
125 void push_back(
const param& a_value );
126 void push_back(
param* a_value_ptr );
128 void push_front(
const param& a_value );
129 void push_front(
param* a_value_ptr );
133 void erase(
unsigned a_index );
134 param*
remove(
unsigned a_index );
138 const_iterator begin()
const;
141 const_iterator end()
const;
143 reverse_iterator rbegin();
144 const_reverse_iterator rbegin()
const;
146 reverse_iterator rend();
147 const_reverse_iterator rend()
const;
156 template<
typename XValType >
159 return value_at( a_index ).get< XValType >();
162 template<
typename XValType >
165 return a_index < size() ? value_at( a_index ).get< XValType >() : a_default;
185 return f_contents.size();
189 return f_contents.empty();
194 return value_at( a_index ).to_string();
199 return a_index < size() ? value_at( a_index ).to_string() : a_default;
204 return get_value( a_index, std::string( a_default ) );
209 return *f_contents.at( a_index );
213 return *f_contents.at( a_index );
236 return at( a_index ).
as_node();
240 return at( a_index ).
as_node();
245 return *f_contents[ a_index ];
249 return *f_contents[ a_index ];
254 return *f_contents.front();
258 return *f_contents.front();
263 return *f_contents.back();
267 return *f_contents.back();
274 f_contents[ a_index ] = a_value.
clone();
281 f_contents[ a_index ] = a_value_ptr;
287 f_contents.push_back( a_value.
clone() );
292 f_contents.push_back( a_value_ptr );
298 f_contents.push_front( a_value.
clone() );
303 f_contents.push_front( a_value_ptr );
318 delete f_contents[ a_index ];
319 f_contents[ a_index ] = NULL;
324 param* t_current = f_contents[ a_index ];
325 f_contents[ a_index ] = NULL;
330 for(
unsigned ind = 0; ind < f_contents.size(); ++ind )
332 delete f_contents[ ind ];
340 return iterator( f_contents.begin() );
349 return iterator( f_contents.end() );
358 return f_contents.rbegin();
362 return f_contents.rbegin();
367 return f_contents.rend();
371 return f_contents.crend();
const param_value & value_at(unsigned a_index) const
const param & at(unsigned a_index) const
boost::indirect_iterator< param_array_contents::iterator, param > param_array_iterator
param_array_iterator iterator
void push_front(const param &a_value)
boost::indirect_iterator< param_array_contents::const_iterator, const param > param_array_const_iterator
virtual param * clone() const
virtual bool is_array() const
std::string get_value(unsigned a_index) const
virtual bool is_null() const
const param_array & array_at(unsigned a_index) const
contents::const_reverse_iterator const_reverse_iterator
void append(const param_array &an_array)
param_array_contents contents
param * remove(unsigned a_index)
const param_node & node_at(unsigned a_index) const
reverse_iterator rbegin()
SCARAB_API std::ostream & operator<<(std::ostream &out, const param_array &a_value)
const param & operator[](unsigned a_index) const
std::string to_string(std::uint64_t x)
const param & front() const
void erase(unsigned a_index)
void assign(unsigned a_index, const param &a_value)
contents::reverse_iterator reverse_iterator
param_array_const_iterator const_iterator
void push_back(const param &a_value)
contents::value_type contents_type
std::deque< param * > param_array_contents
const param & back() const
virtual param * clone() const