28 #ifndef __RTTR_ARRAY_MAPPER_H__
29 #define __RTTR_ARRAY_MAPPER_H__
49 using no_array_type = int;
56 template <
typename T, std::
size_t N>
57 struct array_mapper<T[N]>
59 using raw_type =
typename array_mapper<T>::raw_type;
62 static bool is_dynamic()
67 static std::size_t get_size(
const T (&)[N])
72 static bool set_size(T (&)[N], std::size_t)
77 static const T& get_value(
const T (& arr)[N], std::size_t index)
82 static T& get_value(T (& arr)[N], std::size_t index)
87 static bool insert_value(T (&)[N],
const T&, std::size_t)
92 static bool remove_value(T (&)[N], std::size_t)
101 template <
typename T, std::
size_t N>
102 struct array_mapper<std::array<T, N> >
104 using raw_type =
typename array_mapper<T>::raw_type;
107 static bool is_dynamic()
112 static std::size_t get_size(
const std::array<T, N>&)
117 static bool set_size(std::array<T, N>&, std::size_t)
122 static const T& get_value(
const std::array<T, N>& arr, std::size_t index)
127 static T& get_value(std::array<T, N>& arr, std::size_t index)
132 static bool insert_value(std::array<T, N>&,
const T&, std::size_t)
137 static bool remove_value(std::array<T, N>&, std::size_t)
145 template <
typename T>
146 struct array_mapper<std::vector<T> >
148 using raw_type =
typename array_mapper<T>::raw_type;
151 static bool is_dynamic()
156 static std::size_t get_size(
const std::vector<T>& arr)
161 static bool set_size(std::vector<T>& arr, std::size_t new_size)
163 arr.resize(new_size);
167 static const T& get_value(
const std::vector<T>& arr, std::size_t index)
172 static T& get_value(std::vector<T>& arr, std::size_t index)
177 static bool insert_value(std::vector<T>& arr,
const T& value, std::size_t index)
179 arr.insert(arr.begin() + index, value);
183 static bool remove_value(std::vector<T>& arr, std::size_t index)
185 arr.erase(arr.begin() + index);
192 template <
typename T>
193 struct array_mapper<std::list<T> >
195 using raw_type =
typename array_mapper<T>::raw_type;
198 static bool is_dynamic()
203 static std::size_t get_size(
const std::list<T>& arr)
208 static bool set_size(std::list<T>& arr, std::size_t new_size)
210 arr.resize(new_size);
214 static const T& get_value(
const std::list<T>& arr, std::size_t index)
216 typename std::list<T>::const_iterator it = arr.begin();
217 std::advance(it, index);
221 static T& get_value(std::list<T>& arr, std::size_t index)
223 typename std::list<T>::iterator it = arr.begin();
224 std::advance(it, index);
228 static bool insert_value(std::list<T>& arr,
const T& value, std::size_t index)
230 typename std::list<T>::iterator it = arr.begin();
231 std::advance(it, index);
232 arr.insert(it, value);
236 static bool remove_value(std::list<T>& arr, std::size_t index)
238 typename std::list<T>::iterator it = arr.begin();
239 std::advance(it, index);
248 #endif // __RTTR_ARRAY_MAPPER_H__