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 std::string& a_default )
const;
68 std::string get_value(
unsigned a_index,
const char* a_default )
const;
71 template<
typename XValType >
72 XValType get_value(
unsigned a_index, XValType a_default )
const;
76 const param& operator[](
unsigned a_index )
const;
79 param& operator[](
unsigned a_index );
81 const param& front()
const;
84 const param& back()
const;
88 void assign(
unsigned a_index,
const param& a_value );
90 void assign(
unsigned a_index,
param&& a_value );
92 void assign(
unsigned a_index,
param_ptr_t a_value_ptr );
94 void assign(
unsigned a_index,
param_value&& a_value );
96 void push_back(
const param& a_value );
97 void push_back(
param&& a_value );
101 void push_front(
const param& a_value );
102 void push_front(
param&& a_value );
108 void erase(
unsigned a_index );
113 const_iterator begin()
const;
116 const_iterator end()
const;
118 reverse_iterator rbegin();
119 const_reverse_iterator rbegin()
const;
121 reverse_iterator rend();
122 const_reverse_iterator rend()
const;
131 template<
typename XValType >
134 return a_index < size() ? operator[]( a_index ).as_value().as< XValType >() : a_default;
139 return std::unique_ptr< param_array >(
new param_array( *
this ) );
144 return std::unique_ptr< param_array >(
new param_array( std::move( *
this ) ) );
159 return f_contents.size();
163 return f_contents.empty();
168 f_contents.resize( a_size );
174 return a_index < size() ? operator[]( a_index ).to_string() : a_default;
179 return get_value( a_index, std::string( a_default ) );
184 return *f_contents.at( a_index );
188 return *f_contents.at( a_index );
193 return *f_contents.front();
197 return *f_contents.front();
202 return *f_contents.back();
206 return *f_contents.back();
213 f_contents[ a_index ] = a_value.
clone();
220 f_contents[ a_index ] = a_value.move_clone();
227 f_contents[ a_index ] = std::move(a_value_ptr);
234 f_contents[ a_index ] = a_value.move_clone();
240 f_contents.push_back( a_value.
clone() );
245 f_contents.push_back( a_value.move_clone() );
250 f_contents.push_back( std::move(a_value_ptr) );
255 f_contents.push_back( a_value.move_clone() );
261 f_contents.push_front( a_value.
clone() );
266 f_contents.push_front( a_value.move_clone() );
271 f_contents.push_front( std::move(a_value_ptr) );
276 f_contents.push_front( a_value.move_clone() );
291 f_contents[ a_index ].reset();
296 param_ptr_t t_current( std::move( f_contents[ a_index ] ) );
307 return iterator( f_contents.begin() );
316 return iterator( f_contents.end() );
325 return f_contents.rbegin();
329 return f_contents.rbegin();
334 return f_contents.rend();
338 return f_contents.crend();
std::deque< std::unique_ptr< param > > param_array_contents
boost::indirect_iterator< param_array_contents::iterator, param > param_array_iterator
std::string get_value(unsigned a_index, const std::string &a_default) const
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
virtual param_ptr_t clone() const
virtual bool is_null() 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)
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)