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 template< typename T, typename std::enable_if< std::is_convertible< T, param_value >::value, T >
::type* =
nullptr >
95 void assign(
unsigned a_index, T a_value );
97 void push_back(
const param& a_value );
98 void push_back(
param&& a_value );
100 template< typename T, typename std::enable_if< std::is_convertible< T, param_value >::value, T >::type* =
nullptr >
101 void push_back( T a_value );
103 void push_front(
const param& a_value );
104 void push_front(
param&& a_value );
106 template< typename T, typename std::enable_if< std::is_convertible< T, param_value >::value, T >::type* =
nullptr >
107 void push_front( T a_value );
111 void erase(
unsigned a_index );
116 const_iterator begin()
const;
119 const_iterator end()
const;
121 reverse_iterator rbegin();
122 const_reverse_iterator rbegin()
const;
124 reverse_iterator rend();
125 const_reverse_iterator rend()
const;
134 template<
typename XValType >
137 return a_index < size() ? operator[]( a_index ).as_value().as< XValType >() : a_default;
142 return std::unique_ptr< param_array >(
new param_array( *
this ) );
147 return std::unique_ptr< param_array >(
new param_array( std::move( *
this ) ) );
162 return f_contents.size();
166 return f_contents.empty();
171 f_contents.resize( a_size );
177 return a_index < size() ? operator[]( a_index ).to_string() : a_default;
182 return get_value( a_index, std::string( a_default ) );
187 return *f_contents.at( a_index );
191 return *f_contents.at( a_index );
196 return *f_contents.front();
200 return *f_contents.front();
205 return *f_contents.back();
209 return *f_contents.back();
216 f_contents[ a_index ] = a_value.
clone();
223 f_contents[ a_index ] = a_value.move_clone();
230 f_contents[ a_index ] = std::move(a_value_ptr);
234 template< typename T, typename std::enable_if< std::is_convertible< T, param_value >::value, T >
::type* >
244 f_contents.push_back( a_value.
clone() );
249 f_contents.push_back( a_value.move_clone() );
254 f_contents.push_back( std::move(a_value_ptr) );
257 template< typename T, typename std::enable_if< std::is_convertible< T, param_value >::value, T >
::type* >
266 f_contents.push_front( a_value.
clone() );
271 f_contents.push_front( a_value.move_clone() );
276 f_contents.push_front( std::move(a_value_ptr) );
279 template< typename T, typename std::enable_if< std::is_convertible< T, param_value >::value, T >
::type* >
297 f_contents[ a_index ].reset();
302 param_ptr_t t_current( std::move( f_contents[ a_index ] ) );
313 return iterator( f_contents.begin() );
322 return iterator( f_contents.end() );
331 return f_contents.rbegin();
335 return f_contents.rbegin();
340 return f_contents.rend();
344 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
std::string type(const x_type &a_param)
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)