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; }
195 const size_t toMove = std::min(N,
size());
196 for (
size_t k = 0; k < toMove; k++)
197 newPtr[k] = std::move_if_noexcept(ptr[k]);
213 ptr = ptrEnd =
nullptr;
217 template<
typename It>
220 const size_t N = e-b;
227 { std::copy(b, e, newPtr); }
238 std::copy(b, e, ptr);
271 {
return ptrEnd[-1]; }
274 {
return ptrEnd[-1]; }
279 std::swap(ptr, array.ptr);
280 std::swap(ptrEnd, array.ptrEnd);
291 template<
typename Iter>
293 typename std::iterator_traits<Iter>::value_type& v);
303 template<
typename Iter,
typename Comp =
304 std::less<typename std::iterator_traits<Iter>::value_type> >
306 typename std::iterator_traits<Iter>::value_type& v, Comp comp);
315 template<
typename Iter>
317 typename std::iterator_traits<Iter>::value_type::first_type& k);
327 template<
typename Iter,
typename Comp =
328 std::less<typename std::iterator_traits<Iter>::value_type::first_type> >
330 typename std::iterator_traits<Iter>::value_type::first_type& k, Comp comp);
337 template<
typename Iter>
338 void mapSort(Iter begin, Iter end);
345 template<
typename Iter,
typename Comp =
346 std::less<typename std::iterator_traits<Iter>::value_type::first_type> >
347 void mapSort(Iter begin, Iter end, Comp comp);
356 template<
typename Iter>
358 const typename std::iterator_traits<Iter>::value_type& v)
360 auto it = std::lower_bound(begin, end, v);
361 if (it == end || v < *it)
374 template<
typename Iter,
typename Comp>
376 const typename std::iterator_traits<Iter>::value_type& v, Comp comp)
378 auto it = std::lower_bound(begin, end, v, comp);
379 if (it == end || comp(v, *it))
385 template<
typename Iter>
387 typename std::iterator_traits<Iter>::value_type::first_type& k)
389 typedef typename std::iterator_traits<Iter>::value_type::first_type K;
390 typedef typename std::iterator_traits<Iter>::value_type::second_type V;
391 auto it = std::lower_bound(begin, end, std::make_pair(k, V()),
392 [](
const std::pair<K,V>& e1,
const std::pair<K,V>& e2) {
393 return e1.first < e2.first; });
394 if (it == end || k < it->first)
400 template<
typename Iter,
typename Comp>
402 typename std::iterator_traits<Iter>::value_type::first_type& k, Comp comp)
404 typedef typename std::iterator_traits<Iter>::value_type::first_type K;
405 typedef typename std::iterator_traits<Iter>::value_type::second_type V;
406 auto it = std::lower_bound(begin, end, std::make_pair(k, V()),
407 [&comp](
const std::pair<K,V>& e1,
const std::pair<K,V>& e2) {
408 return comp(e1.first, e2.first); });
409 if (it == end || comp(k, it->first))
419 template<
typename Iter>
422 typedef typename std::iterator_traits<Iter>::value_type::first_type K;
423 typedef typename std::iterator_traits<Iter>::value_type::second_type V;
424 std::sort(begin, end, [](
const std::pair<K,V>& e1,
const std::pair<K,V>& e2) {
425 return e1.first < e2.first; });
434 template<
typename Iter,
typename Comp>
437 typedef typename std::iterator_traits<Iter>::value_type::first_type K;
438 typedef typename std::iterator_traits<Iter>::value_type::second_type V;
439 std::sort(begin, end, [&comp](
const std::pair<K,V>& e1,
const std::pair<K,V>& e2) {
440 return comp(e1.first, e2.first); });
const T * begin() const
get iterator to first element
Definition: Containers.h:250
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:386
void swap(Array &array)
swap two arrays
Definition: Containers.h:277
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:264
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:273
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:260
Array & operator=(const Array &cp)
copy assignment
Definition: Containers.h:131
T * data()
get data
Definition: Containers.h:246
T & front()
get first element
Definition: Containers.h:267
void mapSort(Iter begin, Iter end)
map range of iterators
Definition: Containers.h:420
main namespace
Definition: AsmDefs.h:38
Array & assign(It b, It e)
assign from range of iterators
Definition: Containers.h:218
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:253
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:357
size_t size() const
returns number of elements
Definition: Containers.h:169
const T * data() const
get data
Definition: Containers.h:243
void clear()
clear array
Definition: Containers.h:210
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:270
const T * end() const
get iterator to after last element
Definition: Containers.h:257