23 #ifndef __CLRX_CONTAINERS_H__ 24 #define __CLRX_CONTAINERS_H__ 30 #include <initializer_list> 48 Array(): ptr(nullptr), ptrEnd(nullptr)
85 ptr = ptrEnd =
nullptr;
86 const size_t N = cp.
size();
90 std::copy(cp.ptr, cp.ptrEnd, ptr);
104 cp.ptr = cp.ptrEnd =
nullptr;
108 Array(std::initializer_list<T> list)
113 const size_t N = list.size();
117 std::copy(list.begin(), list.end(), ptr);
146 cp.ptr = cp.ptrEnd =
nullptr;
153 assign(list.begin(), list.end());
166 {
return ptrEnd==ptr; }
170 {
return ptrEnd-ptr; }
194 const size_t toMove = std::min(N,
size());
195 for (
size_t k = 0; k < toMove; k++)
196 newPtr[k] = std::move_if_noexcept(ptr[k]);
212 ptr = ptrEnd =
nullptr;
216 template<
typename It>
219 const size_t N = e-b;
226 { std::copy(b, e, newPtr); }
237 std::copy(b, e, ptr);
270 {
return ptrEnd[-1]; }
273 {
return ptrEnd[-1]; }
278 std::swap(ptr, array.ptr);
279 std::swap(ptrEnd, array.ptrEnd);
290 template<
typename Iter>
292 typename std::iterator_traits<Iter>::value_type& v);
302 template<
typename Iter,
typename Comp =
303 std::less<typename std::iterator_traits<Iter>::value_type> >
305 typename std::iterator_traits<Iter>::value_type& v, Comp comp);
314 template<
typename Iter>
316 typename std::iterator_traits<Iter>::value_type::first_type& k);
326 template<
typename Iter,
typename Comp =
327 std::less<typename std::iterator_traits<Iter>::value_type::first_type> >
329 typename std::iterator_traits<Iter>::value_type::first_type& k, Comp comp);
336 template<
typename Iter>
337 void mapSort(Iter begin, Iter end);
344 template<
typename Iter,
typename Comp =
345 std::less<typename std::iterator_traits<Iter>::value_type::first_type> >
346 void mapSort(Iter begin, Iter end, Comp comp);
355 template<
typename Iter>
357 const typename std::iterator_traits<Iter>::value_type& v)
359 auto it = std::lower_bound(begin, end, v);
360 if (it == end || v < *it)
373 template<
typename Iter,
typename Comp>
375 const typename std::iterator_traits<Iter>::value_type& v, Comp comp)
377 auto it = std::lower_bound(begin, end, v, comp);
378 if (it == end || comp(v, *it))
384 template<
typename Iter>
386 typename std::iterator_traits<Iter>::value_type::first_type& k)
388 typedef typename std::iterator_traits<Iter>::value_type::first_type K;
389 typedef typename std::iterator_traits<Iter>::value_type::second_type V;
390 auto it = std::lower_bound(begin, end, std::make_pair(k, V()),
391 [](
const std::pair<K,V>& e1,
const std::pair<K,V>& e2) {
392 return e1.first < e2.first; });
393 if (it == end || k < it->first)
399 template<
typename Iter,
typename Comp>
401 typename std::iterator_traits<Iter>::value_type::first_type& k, Comp comp)
403 typedef typename std::iterator_traits<Iter>::value_type::first_type K;
404 typedef typename std::iterator_traits<Iter>::value_type::second_type V;
405 auto it = std::lower_bound(begin, end, std::make_pair(k, V()),
406 [&comp](
const std::pair<K,V>& e1,
const std::pair<K,V>& e2) {
407 return comp(e1.first, e2.first); });
408 if (it == end || comp(k, it->first))
418 template<
typename Iter>
421 typedef typename std::iterator_traits<Iter>::value_type::first_type K;
422 typedef typename std::iterator_traits<Iter>::value_type::second_type V;
423 std::sort(begin, end, [](
const std::pair<K,V>& e1,
const std::pair<K,V>& e2) {
424 return e1.first < e2.first; });
433 template<
typename Iter,
typename Comp>
436 typedef typename std::iterator_traits<Iter>::value_type::first_type K;
437 typedef typename std::iterator_traits<Iter>::value_type::second_type V;
438 std::sort(begin, end, [&comp](
const std::pair<K,V>& e1,
const std::pair<K,V>& e2) {
439 return comp(e1.first, e2.first); });
const T * begin() const
get iterator to first element
Definition: Containers.h:249
T element_type
element type
Definition: Containers.h:43
Iter binaryMapFind(Iter begin, Iter end, const typename std::iterator_traits< Iter >::value_type::first_type &k)
binary find helper for array-map
Definition: Containers.h:385
void swap(Array &array)
swap two arrays
Definition: Containers.h:276
void allocate(size_t N)
only allocating space without keeping previous content
Definition: Containers.h:173
const T & operator[](size_t i) const
operator of indexing
Definition: Containers.h:158
const T & front() const
get first element
Definition: Containers.h:263
an array class
Definition: Containers.h:38
void resize(size_t N)
resize space with keeping old content
Definition: Containers.h:185
const T * const_iterator
type of constant iterator
Definition: Containers.h:42
Array()
empty constructor
Definition: Containers.h:48
Array(size_t N)
construct array of N elements
Definition: Containers.h:52
Array & operator=(Array &&cp) noexcept
move assignment
Definition: Containers.h:139
T & back()
get last element
Definition: Containers.h:272
Array & operator=(std::initializer_list< T > list)
assignment from initializer list
Definition: Containers.h:151
Array(std::initializer_list< T > list)
constructor with initializer list
Definition: Containers.h:108
T * end()
get iterator to after last element
Definition: Containers.h:259
Array & operator=(const Array &cp)
copy assignment
Definition: Containers.h:131
T * data()
get data
Definition: Containers.h:245
T & front()
get first element
Definition: Containers.h:266
void mapSort(Iter begin, Iter end)
map range of iterators
Definition: Containers.h:419
main namespace
Definition: AsmDefs.h:38
Array & assign(It b, It e)
assign from range of iterators
Definition: Containers.h:217
T * iterator
type of iterator
Definition: Containers.h:41
~Array()
destructor
Definition: Containers.h:127
Array(It b, It e)
construct array of elements in begin and end
Definition: Containers.h:62
T * begin()
get iterator to first element
Definition: Containers.h:252
Array(const Array &cp)
copy constructor
Definition: Containers.h:81
Iter binaryFind(Iter begin, Iter end, const typename std::iterator_traits< Iter >::value_type &v)
binary find helper
Definition: Containers.h:356
size_t size() const
returns number of elements
Definition: Containers.h:169
const T * data() const
get data
Definition: Containers.h:242
void clear()
clear array
Definition: Containers.h:209
bool empty() const
returns true if empty
Definition: Containers.h:165
Array(Array &&cp) noexcept
move constructor
Definition: Containers.h:100
const T & back() const
get last element
Definition: Containers.h:269
const T * end() const
get iterator to after last element
Definition: Containers.h:256