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> 53 virtual bool is_null()
const;
54 virtual bool is_array()
const;
56 virtual bool has_subset(
const param& a_subset )
const;
58 unsigned size()
const;
63 void resize(
unsigned a_size );
67 std::string get_value(
unsigned a_index )
const;
70 template<
typename XValType >
71 XValType get_value(
unsigned a_index )
const;
75 std::string get_value(
unsigned a_index,
const std::string& a_default )
const;
76 std::string get_value(
unsigned a_index,
const char* a_default )
const;
79 template<
typename XValType >
80 XValType get_value(
unsigned a_index, XValType a_default )
const;
84 const param& at(
unsigned a_index )
const;
87 param& at(
unsigned a_index );
91 const param_value& value_at(
unsigned a_index )
const;
98 const param_array& array_at(
unsigned a_index )
const;
105 const param_node& node_at(
unsigned a_index )
const;
112 const param& operator[](
unsigned a_index )
const;
115 param& operator[](
unsigned a_index );
117 const param& front()
const;
120 const param& back()
const;
124 void assign(
unsigned a_index,
const param& a_value );
126 void assign(
unsigned a_index,
param&& a_value_ptr );
128 void assign(
unsigned a_index,
param_ptr_t a_value_ptr );
130 void push_back(
const param& a_value );
131 void push_back(
param&& a_value );
134 void push_front(
const param& a_value );
135 void push_front(
param&& a_value );
140 void erase(
unsigned a_index );
145 const_iterator begin()
const;
148 const_iterator end()
const;
150 reverse_iterator rbegin();
151 const_reverse_iterator rbegin()
const;
153 reverse_iterator rend();
154 const_reverse_iterator rend()
const;
163 template<
typename XValType >
166 return value_at( a_index ).get< XValType >();
169 template<
typename XValType >
172 return a_index < size() ? value_at( a_index ).get< XValType >() : a_default;
177 return std::unique_ptr< param_array >(
new param_array( *
this ) );
182 return std::unique_ptr< param_array >(
new param_array( std::move( *
this ) ) );
197 return f_contents.size();
201 return f_contents.empty();
206 f_contents.resize( a_size );
212 return value_at( a_index ).to_string();
217 return a_index < size() ? value_at( a_index ).to_string() : a_default;
222 return get_value( a_index, std::string( a_default ) );
227 return *f_contents.at( a_index );
231 return *f_contents.at( a_index );
254 return at( a_index ).
as_node();
258 return at( a_index ).
as_node();
263 return *f_contents[ a_index ];
267 return *f_contents[ a_index ];
272 return *f_contents.front();
276 return *f_contents.front();
281 return *f_contents.back();
285 return *f_contents.back();
292 f_contents[ a_index ] = a_value.
clone();
299 f_contents[ a_index ] = a_value.move_clone();
306 f_contents[ a_index ] = std::move(a_value_ptr);
312 f_contents.push_back( a_value.
clone() );
317 f_contents.push_back( a_value.move_clone() );
322 f_contents.push_back( std::move(a_value_ptr) );
328 f_contents.push_front( a_value.
clone() );
333 f_contents.push_front( a_value.move_clone() );
338 f_contents.push_front( std::move(a_value_ptr) );
353 f_contents[ a_index ].reset();
358 param_ptr_t t_current( std::move( f_contents[ a_index ] ) );
369 return iterator( f_contents.begin() );
378 return iterator( f_contents.end() );
387 return f_contents.rbegin();
391 return f_contents.rbegin();
396 return f_contents.rend();
400 return f_contents.crend();
const param_value & value_at(unsigned a_index) const
std::deque< std::unique_ptr< param > > param_array_contents
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_ptr_t move_clone()
virtual bool is_array() const
std::string get_value(unsigned a_index) const
virtual param_ptr_t clone() 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_ptr_t 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)
std::unique_ptr< param > param_ptr_t
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
virtual param_ptr_t clone() const
const param & back() const
void resize(unsigned a_size)