14 #include <type_traits> 21 operator const bool&()
const {
return b; }
22 operator bool&() {
return b; }
33 template <
typename VAL,
size_t small_size,
size_t alignment = 16>
63 template <
typename TYPE,
typename POINTER,
typename REFERENCE>
66 using STORAGE = std::conditional_t<
127 return m_ptr - o.m_ptr;
153 std::copy(
m_v.begin(),
m_v.begin() + n,
m_a.begin());
169 m_v.assign(
m_v.size(), v);
self operator-=(difference_type n)
std::conditional_t< std::is_same_v< VAL, bool >, UnspecializedBool, VAL > T
typename large_vec::difference_type difference_type
std::vector< T, ALLOC > large_vec
iteratorImpl< NUMTYPE, const NUMTYPE *, const NUMTYPE &> const_iterator
Container that transparently and dynamically switches between a std::array and std::vector.
const_iterator end() const noexcept
std::random_access_iterator_tag iterator_category
reference operator[](size_type n)
iteratorImpl(STORAGE ptr)
self operator+=(difference_type n)
iterator begin() noexcept
const POINTER operator->() const
typename large_vec::size_type size_type
const T & const_reference
Aligned allocator that is compatible with C++11.
typename large_vec::difference_type difference_type
vector_with_small_size_optimization(size_t n)
self operator-(difference_type n)
const_iterator begin() const noexcept
bool operator!=(const self &o)
const_reference operator[](size_type n) const
std::array< T, small_size > small_array
self operator+(difference_type n)
std::conditional_t< std::is_same_v< POINTER, bool * >, UnspecializedBool *, std::conditional_t< std::is_same_v< POINTER, const bool * >, const UnspecializedBool *, POINTER > > STORAGE
const_reference front() const
bool operator==(const self &o)
const_reference back() const
difference_type operator-(const self &o) const
const REFERENCE operator*() const
iteratorImpl< NUMTYPE, NUMTYPE *, NUMTYPE &> iterator
vector_with_small_size_optimization()=default