31#ifndef ETL_MEMORY_INCLUDED
32#define ETL_MEMORY_INCLUDED
48#if defined(ETL_IN_UNIT_TEST) || ETL_USING_STL
72 template <
typename Iterator>
85 template <
typename TOutputIterator,
typename T>
99 template <
typename TOutputIterator,
typename T,
typename TCounter>
114 template <
typename TOutputIterator,
typename T>
128 template <
typename TOutputIterator,
typename T>
132 typedef typename etl::iterator_traits<TOutputIterator>::value_type value_type;
149 template <
typename TOutputIterator,
typename T,
typename TCounter>
166 template <
typename TOutputIterator,
typename T,
typename TCounter>
178#if ETL_USING_STL && ETL_USING_CPP11
184 template <
typename TOutputIterator,
typename TSize,
typename T>
187 return std::uninitialized_fill_n(
o_begin,
n, value);
196 template <
typename TOutputIterator,
typename TSize,
typename T,
typename TCounter>
201 return std::uninitialized_fill_n(
o_begin,
n, value);
209 template <
typename TOutputIterator,
typename TSize,
typename T>
221 template <
typename TOutputIterator,
typename TSize,
typename T,
typename TCounter>
236 template <
typename TInputIterator,
typename TOutputIterator>
248 template <
typename TInputIterator,
typename TOutputIterator,
typename TCounter>
261 template <
typename TInputIterator,
typename TOutputIterator>
273 template <
typename TInputIterator,
typename TOutputIterator>
277 typedef typename etl::iterator_traits<TOutputIterator>::value_type value_type;
297 template <
typename TInputIterator,
typename TOutputIterator,
typename TCounter>
313 template <
typename TInputIterator,
typename TOutputIterator,
typename TCounter>
325#if ETL_USING_STL && ETL_USING_CPP11
331 template <
typename TInputIterator,
typename TSize,
typename TOutputIterator>
343 template <
typename TInputIterator,
typename TSize,
typename TOutputIterator,
typename TCounter>
356 template <
typename TInputIterator,
typename TSize,
typename TOutputIterator>
368 template <
typename TInputIterator,
typename TSize,
typename TOutputIterator,
typename TCounter>
378#if ETL_USING_STL && ETL_USING_CPP17
384 template <
typename TInputIterator,
typename TOutputIterator>
396 template <
typename TInputIterator,
typename TOutputIterator,
typename TCounter>
409 template <
typename TInputIterator,
typename TOutputIterator>
421 template <
typename TInputIterator,
typename TOutputIterator>
425 typedef typename etl::iterator_traits<TOutputIterator>::value_type value_type;
445 template <
typename TInputIterator,
typename TOutputIterator,
typename TCounter>
461 template <
typename TInputIterator,
typename TOutputIterator,
typename TCounter>
479 template <
typename TInputIterator,
typename TOutputIterator>
492 template <
typename TInputIterator,
typename TOutputIterator,
typename TCounter>
503#if ETL_USING_STL && ETL_USING_CPP17
509 template <
typename TInputIterator,
typename TSize,
typename TOutputIterator>
521 template <
typename TInputIterator,
typename TSize,
typename TOutputIterator,
typename TCounter>
534 template <
typename TInputIterator,
typename TSize,
typename TOutputIterator>
546 template <
typename TInputIterator,
typename TSize,
typename TOutputIterator>
550 typedef typename etl::iterator_traits<TOutputIterator>::value_type value_type;
570 template <
typename TInputIterator,
typename TSize,
typename TOutputIterator,
typename TCounter>
586 template <
typename TInputIterator,
typename TSize,
typename TOutputIterator,
typename TCounter>
604 template <
typename TInputIterator,
typename TSize,
typename TOutputIterator>
621 template <
typename TInputIterator,
typename TSize,
typename TOutputIterator,
typename TCounter>
635#if ETL_USING_STL && ETL_USING_CPP17
641 template <
typename TOutputIterator>
654 template <
typename TOutputIterator,
typename TCounter>
668 template <
typename TOutputIterator>
680 template <
typename TOutputIterator>
685 typedef typename etl::iterator_traits<TOutputIterator>::value_type value_type;
700 template <
typename TOutputIterator,
typename TCounter>
713 template <
typename TOutputIterator,
typename TCounter>
723#if ETL_USING_STL && ETL_USING_CPP17
729 template <
typename TOutputIterator,
typename TSize>
732 return std::uninitialized_default_construct_n(
o_begin,
n);
741 template <
typename TOutputIterator,
typename TSize,
typename TCounter>
746 return std::uninitialized_default_construct_n(
o_begin,
n);
754 template <
typename TOutputIterator,
typename TSize>
767 template <
typename TOutputIterator,
typename TSize>
784 template <
typename TOutputIterator,
typename TSize,
typename TCounter>
801 template <
typename TOutputIterator,
typename TSize,
typename TCounter>
815#if ETL_USING_STL && ETL_USING_CPP17
821 template <
typename TOutputIterator>
833 template <
typename TOutputIterator,
typename TCounter>
846 template <
typename TOutputIterator>
850 typedef typename etl::iterator_traits<TOutputIterator>::value_type value_type;
860 template <
typename TOutputIterator>
864 typedef typename etl::iterator_traits<TOutputIterator>::value_type value_type;
879 template <
typename TOutputIterator,
typename TCounter>
888#if ETL_USING_STL && ETL_USING_CPP17
894 template <
typename TOutputIterator,
typename TSize>
897 return std::uninitialized_value_construct_n(
o_begin,
n);
906 template <
typename TOutputIterator,
typename TSize,
typename TCounter>
911 return std::uninitialized_value_construct_n(
o_begin,
n);
919 template <
typename TOutputIterator,
typename TSize>
935 template <
typename TOutputIterator,
typename TSize,
typename TCounter>
948#if ETL_USING_STL && ETL_USING_CPP20
954 template <
typename T,
typename...
TArgs>
965 template <
typename T,
typename...
TArgs>
976 template <
typename T>
979 return ::new (
const_cast<void*
>(
static_cast<const volatile void*
>(p)))
T();
986 template <
typename T,
typename TArg>
989 return ::new (
const_cast<void*
>(
static_cast<const volatile void*
>(p)))
T(
arg);
993#if ETL_USING_STL && ETL_USING_CPP20
999 template <
typename T>
1012 template <
typename T,
typename TCounter>
1025 template <
typename T>
1036 template <
typename T>
1049 template <
typename T,
typename TCounter>
1062 template <
typename T,
typename TCounter>
1071#if ETL_USING_STL && ETL_USING_CPP17
1077 template <
typename TIterator>
1089 template <
typename TIterator,
typename TCounter>
1102 template <
typename TIterator>
1113 template <
typename TIterator>
1130 template <
typename TIterator,
typename TCounter>
1143 template <
typename TIterator,
typename TCounter>
1157#if ETL_USING_STL && ETL_USING_CPP17
1163 template <
typename TIterator,
typename TSize>
1175 template <
typename TIterator,
typename TSize,
typename TCounter>
1188 template <
typename TIterator,
typename TSize>
1200 template <
typename TIterator,
typename TSize>
1220 template <
typename TIterator,
typename TSize,
typename TCounter>
1234 template <
typename TIterator,
typename TSize,
typename TCounter>
1257 template <
typename T>
1266 template <
typename U>
1272 void operator()(
T * p)
const ETL_NOEXCEPT
1284 template <
typename T>
1293 template <
typename U>
1300 void operator()(
U* p)
const
1312 template <
typename T,
typename TDeleter = etl::default_delete<T> >
1317 typedef T element_type;
1319 typedef T& reference;
1328 ETL_CONSTEXPR
explicit unique_ptr(pointer
p_) ETL_NOEXCEPT
1339 p =
other.release();
1340 deleter = etl::move(
other.deleter);
1349 p =
other.release();
1350 deleter =
other.deleter;
1372 template <
typename U,
typename E>
1383 if (p != ETL_NULLPTR)
1390 ETL_CONSTEXPR pointer get()
const ETL_NOEXCEPT
1396 TDeleter& get_deleter() ETL_NOEXCEPT
1402 const TDeleter& get_deleter()
const ETL_NOEXCEPT
1408 pointer release() ETL_NOEXCEPT
1417 void reset(pointer
p_ = pointer()) ETL_NOEXCEPT
1419 if (
p_ == ETL_NULLPTR ||
p_ != p)
1424 if (value != ETL_NULLPTR)
1434 using ETL_OR_STD::swap;
1440 ETL_CONSTEXPR
operator bool()
const ETL_NOEXCEPT
1442 return (p != ETL_NULLPTR);
1462 reset(
other.release());
1463 deleter = etl::move(
other.deleter);
1474 reset(
other.release());
1475 deleter =
other.deleter;
1483 ETL_CONSTEXPR reference operator *()
const
1489 ETL_CONSTEXPR pointer operator ->()
const ETL_NOEXCEPT
1495 ETL_CONSTEXPR reference operator [](
size_t i)
const
1516 template<
typename T,
typename TDeleter>
1521 typedef T element_type;
1523 typedef T& reference;
1532 ETL_CONSTEXPR
explicit unique_ptr(pointer
p_) ETL_NOEXCEPT
1543 p =
other.release();
1544 deleter = etl::move(
other.deleter);
1553 p =
other.release();
1554 deleter =
other.deleter;
1577 template <
typename U,
typename E>
1588 if (p != ETL_NULLPTR)
1595 ETL_CONSTEXPR pointer get()
const ETL_NOEXCEPT
1601 TDeleter& get_deleter() ETL_NOEXCEPT
1607 const TDeleter& get_deleter()
const ETL_NOEXCEPT
1613 pointer release() ETL_NOEXCEPT
1621 void reset(pointer
p_) ETL_NOEXCEPT
1628 if (value != ETL_NULLPTR)
1643 using ETL_OR_STD::swap;
1649 ETL_CONSTEXPR
operator bool()
const ETL_NOEXCEPT
1651 return (p != ETL_NULLPTR);
1668 reset(
other.release());
1669 deleter = etl::move(
other.deleter);
1680 reset(
other.release());
1681 deleter =
other.deleter;
1689 ETL_CONSTEXPR reference operator *()
const
1695 ETL_CONSTEXPR pointer operator ->()
const ETL_NOEXCEPT
1701 ETL_CONSTEXPR reference operator [](
size_t i)
const
1720template<
typename T1,
typename TD1,
typename T2,
typename TD2>
1723 return lhs.get() == rhs.get();
1727template<
typename T1,
typename TD1,
typename T2,
typename TD2>
1730 return reinterpret_cast<char*
>(lhs.get()) <
reinterpret_cast<char*
>(rhs.get());
1734template<
typename T1,
typename TD1,
typename T2,
typename TD2>
1737 return !(rhs < lhs);
1741template<
typename T1,
typename TD1,
typename T2,
typename TD2>
1748template<
typename T1,
typename TD1,
typename T2,
typename TD2>
1751 return !(lhs < rhs);
1760 template <
typename T>
1762 create_default_at(
T* )
1770 template <
typename T,
typename TCounter>
1781 template <
typename T>
1783 create_default_at(
T* p)
1792 template <
typename T,
typename TCounter>
1794 create_default_at(
T* p,
TCounter& count)
1804 template <
typename T>
1805 void create_value_at(
T* p)
1814 template <
typename T,
typename TCounter>
1815 void create_value_at(
T* p,
TCounter& count)
1825 template <
typename T>
1826 void create_copy_at(
T* p,
const T& value)
1836 template <
typename T>
1837 void create_copy_at(
T* p,
T&& value)
1839 ::new (p)
T(etl::move(value));
1847 template <
typename T,
typename TCounter>
1848 void create_copy_at(
T* p,
const T& value,
TCounter& count)
1858 template <
typename T>
1859 T& make_default_at(
T* p)
1862 return *
reinterpret_cast<T*
>(p);
1869 template <
typename T,
typename TCounter>
1874 return *
reinterpret_cast<T*
>(p);
1881 template <
typename T>
1882 T& make_copy_at(
T* p,
const T&
other)
1885 return *
reinterpret_cast<T*
>(p);
1893 template <
typename T>
1897 return *
reinterpret_cast<T*
>(p);
1905 template <
typename T,
typename TCounter>
1910 return *
reinterpret_cast<T*
>(p);
1917 template <
typename T,
typename TParameter>
1921 return *
reinterpret_cast<T*
>(p);
1929 template <
typename T,
typename TParameter>
1932 ::new (p)
T(etl::move(value));
1933 return *
reinterpret_cast<T*
>(p);
1941 template <
typename T,
typename TParameter,
typename TCounter>
1946 return *
reinterpret_cast<T*
>(p);
1954 template <
typename T>
1957 void create_copy_at(
void* p)
1959 new (p)
T(
static_cast<const T&
>(*
this));
1962 template <
typename TCounter>
1963 void create_copy_at(
void* p,
TCounter& count)
1965 new (p)
T(
static_cast<const T&
>(*
this));
1969 T& make_copy_at(
void* p)
1971 new (p)
T(
static_cast<const T&
>(*
this));
1972 return *
reinterpret_cast<T*
>(p);
1975 template <
typename TCounter>
1976 T& make_copy_at(
void* p,
TCounter& count)
1978 new (p)
T(
static_cast<const T&
>(*
this));
1980 return *
reinterpret_cast<T*
>(p);
1990 inline void memory_clear(
volatile char* p,
size_t n)
2004 template <
typename T>
2005 void memory_clear(
volatile T &
object)
2007 memory_clear(
reinterpret_cast<volatile char*
>(&
object),
sizeof(
T));
2017 template <
typename T>
2018 void memory_clear_range(
volatile T*
begin,
size_t n)
2020 memory_clear(
reinterpret_cast<volatile char*
>(
begin),
n *
sizeof(
T));
2030 template <
typename T>
2031 void memory_clear_range(
volatile T*
begin,
volatile T*
end)
2033 const size_t n =
static_cast<size_t>(etl::distance(
begin,
end));
2035 memory_clear_range(
begin,
n);
2045 inline void memory_set(
volatile char* p,
size_t n,
char value)
2060 template <
typename T>
2061 void memory_set(
volatile T &
object,
const char value)
2063 memory_set(
reinterpret_cast<volatile char*
>(&
object),
sizeof(
T), value);
2074 template <
typename T>
2075 void memory_set_range(
volatile T*
begin,
size_t n,
const char value)
2077 memory_set(
reinterpret_cast<volatile char*
>(
begin),
n *
sizeof(
T), value);
2088 template <
typename T>
2089 void memory_set_range(
volatile T*
begin,
volatile T*
end,
const char value)
2091 const size_t n =
static_cast<size_t>(etl::distance(
begin,
end));
2093 memory_set_range(
begin,
n, value);
2103 template <
typename T>
2104 struct wipe_on_destruct
2108 memory_clear(
static_cast<volatile T&
>(*
this));
2116 template <
size_t VObject_Size,
size_t VN_Objects,
size_t VAlignment>
2117 class uninitialized_buffer
2122 static ETL_CONSTANT
size_t N_Objects =
VN_Objects;
2123 static ETL_CONSTANT
size_t Alignment =
VAlignment;
2126 template <
typename T>
2130 return *
reinterpret_cast<T*
>(raw);
2134 template <
typename T>
2135 operator const T& ()
const
2138 return *
reinterpret_cast<const T*
>(raw);
2142 template <
typename T>
2146 return reinterpret_cast<T*
>(raw);
2150 template <
typename T>
2151 operator const T* ()
const
2154 return reinterpret_cast<const T*
>(raw);
2157#if ETL_USING_CPP11 && !defined(ETL_COMPILER_ARM5) && !defined(ETL_UNINITIALIZED_BUFFER_FORCE_CPP03_IMPLEMENTATION)
2158 alignas(
VAlignment)
char raw[Object_Size * N_Objects];
2163 typename etl::type_with_alignment<Alignment>::type etl_alignment_type;
2168 template <
size_t VObject_Size,
size_t VN_Objects,
size_t VAlignment>
2169 ETL_CONSTANT
size_t uninitialized_buffer<VObject_Size, VN_Objects, VAlignment>::Object_Size;
2171 template <
size_t VObject_Size,
size_t VN_Objects,
size_t VAlignment>
2172 ETL_CONSTANT
size_t uninitialized_buffer<VObject_Size, VN_Objects, VAlignment>::N_Objects;
2174 template <
size_t VObject_Size,
size_t VN_Objects,
size_t VAlignment>
2175 ETL_CONSTANT
size_t uninitialized_buffer<VObject_Size, VN_Objects, VAlignment>::Alignment;
2181 template <
typename T,
size_t VN_Objects>
2182 class uninitialized_buffer_of
2186 typedef T value_type;
2187 typedef T& reference;
2188 typedef const T& const_reference;
2190 typedef const T* const_pointer;
2191 typedef T* iterator;
2192 typedef const T* const_iterator;
2194 static ETL_CONSTANT
size_t Object_Size =
sizeof(
T);
2195 static ETL_CONSTANT
size_t N_Objects =
VN_Objects;
2199 T& operator [](
int i)
2201 return reinterpret_cast<T*
>(this->raw)[i];
2205 const T& operator [](
int i)
const
2207 return reinterpret_cast<const T*
>(this->raw)[i];
2213 return *
reinterpret_cast<T*
>(raw);
2217 operator const T& ()
const
2219 return *
reinterpret_cast<const T*
>(raw);
2226 return reinterpret_cast<T*
>(raw);
2230 operator const T* ()
const
2232 return reinterpret_cast<const T*
>(raw);
2237 return reinterpret_cast<T*
>(raw);
2242 return reinterpret_cast<const T*
>(raw);
2247 return reinterpret_cast<T*
>(raw + (
sizeof(
T) * N_Objects));
2250 const T*
end()
const
2252 return reinterpret_cast<const T*
>(raw + (
sizeof(
T) * N_Objects));
2255#if ETL_USING_CPP11 && !defined(ETL_COMPILER_ARM5) && !defined(ETL_UNINITIALIZED_BUFFER_FORCE_CPP03_IMPLEMENTATION)
2256 alignas(Alignment)
char raw[
sizeof(
T) * N_Objects];
2260 char raw[
sizeof(
T) * N_Objects];
2261 typename etl::type_with_alignment<Alignment>::type etl_alignment_type;
2266 template <
typename T,
size_t VN_Objects>
2267 ETL_CONSTANT
size_t uninitialized_buffer_of<T, VN_Objects>::Object_Size;
2269 template <
typename T,
size_t VN_Objects>
2270 ETL_CONSTANT
size_t uninitialized_buffer_of<T, VN_Objects>::N_Objects;
2272 template <
typename T,
size_t VN_Objects>
2273 ETL_CONSTANT
size_t uninitialized_buffer_of<T, VN_Objects>::Alignment;
2276 template <
typename T,
size_t N_Objects>
2288 template <
typename T>
2289 T* mem_copy(
const T*
sb,
const T*
se,
T*
db) ETL_NOEXCEPT
2294 reinterpret_cast<const void*
>(
sb),
2295 sizeof(
T) *
static_cast<size_t>(
se -
sb));
2307 template <
typename T>
2308 T* mem_copy(
const T*
sb,
size_t n,
T*
db) ETL_NOEXCEPT
2313 reinterpret_cast<const void*
>(
sb),
2326 template <
typename T>
2327 T* mem_move(
const T*
sb,
const T*
se,
T*
db) ETL_NOEXCEPT
2332 reinterpret_cast<const void*
>(
sb),
2333 sizeof(
T) *
static_cast<size_t>(
se -
sb));
2345 template <
typename T>
2346 T* mem_move(
const T*
sb,
size_t n,
T*
db) ETL_NOEXCEPT
2351 reinterpret_cast<const void*
>(
sb),
2366 template <
typename T>
2368 int mem_compare(
const T*
sb,
const T*
se,
const T*
db) ETL_NOEXCEPT
2372 return ::memcmp(
reinterpret_cast<const void*
>(
db),
2373 reinterpret_cast<const void*
>(
sb),
2374 sizeof(
T) *
static_cast<size_t>(
se -
sb));
2386 template <
typename T>
2388 int mem_compare(
const T*
sb,
size_t n,
const T*
db) ETL_NOEXCEPT
2392 return ::memcmp(
reinterpret_cast<const void*
>(
db),
2393 reinterpret_cast<const void*
>(
sb),
2404 template <
typename TPo
inter,
typename T>
2411 ETL_STATIC_ASSERT(
etl::is_trivially_copyable<
typename etl::iterator_traits<TPointer>::value_type>::value,
"Cannot mem_set a non trivially copyable type");
2414 static_cast<char>(value),
2415 sizeof(
typename etl::iterator_traits<TPointer>::value_type) *
static_cast<size_t>(
de -
db));
2427 template <
typename TPo
inter,
typename T>
2434 ETL_STATIC_ASSERT(
etl::is_trivially_copyable<
typename etl::iterator_traits<TPointer>::value_type>::value,
"Cannot mem_set a non trivially copyable type");
2437 static_cast<char>(value),
2438 sizeof(
typename etl::iterator_traits<TPointer>::value_type) *
n);
2450 template <
typename TPo
inter,
typename T>
2455 sizeof(
T) == 1,
char*>::type
2458 void* result =
::memchr(
reinterpret_cast<void*
>(
sb),
2459 static_cast<char>(value),
2460 sizeof(
typename etl::iterator_traits<TPointer>::value_type) *
static_cast<size_t>(
se -
sb));
2472 template <
typename TPo
inter,
typename T>
2477 sizeof(
T) == 1,
const char*>::type
2480 const void* result =
::memchr(
reinterpret_cast<const void*
>(
sb),
2481 static_cast<char>(value),
2482 sizeof(
typename etl::iterator_traits<TPointer>::value_type) *
static_cast<size_t>(
se -
sb));
2494 template <
typename TPo
inter,
typename T>
2499 sizeof(
T) == 1,
char*>::type
2502 void* result =
::memchr(
reinterpret_cast<void*
>(
sb),
2503 static_cast<char>(value),
2504 sizeof(
typename etl::iterator_traits<TPointer>::value_type) *
n);
2516 template <
typename TPo
inter,
typename T>
2521 sizeof(
T) == 1,
const char*>::type
2524 const void* result =
::memchr(
reinterpret_cast<const void*
>(
sb),
2525 static_cast<char>(value),
2526 sizeof(
typename etl::iterator_traits<TPointer>::value_type) *
n);
2535 template <
typename TObject>
2538#if ETL_IS_DEBUG_BUILD
2551#if ETL_IS_DEBUG_BUILD
2561 template <
typename TObject>
2562 TObject& construct_object_at(
void* p)
2564#if ETL_IS_DEBUG_BUILD
2574 template <
typename TObject>
2577#if ETL_IS_DEBUG_BUILD
2587 template <
typename TObject,
typename TArg>
2590#if ETL_IS_DEBUG_BUILD
2601 template <
typename TObject>
2602 TObject& get_object_at(
void* p)
2604#if ETL_IS_DEBUG_BUILD
2617 template <
typename TObject>
2618 void destroy_object_at(
void* p)
2620#if ETL_IS_DEBUG_BUILD
#define ETL_ASSERT(b, e)
Definition error_handler.h:356
TOutputIterator uninitialized_fill(TOutputIterator o_begin, TOutputIterator o_end, const T &value)
Definition memory.h:86
etl::enable_if< etl::is_trivially_constructible< typenameetl::iterator_traits< TOutputIterator >::value_type >::value, void >::type uninitialized_value_construct(TOutputIterator o_begin, TOutputIterator o_end)
Definition memory.h:848
TOutputIterator uninitialized_value_construct_n(TOutputIterator o_begin, TSize n)
Definition memory.h:920
etl::enable_if< etl::is_trivially_constructible< typenameetl::iterator_traits< TOutputIterator >::value_type >::value, TOutputIterator >::type uninitialized_default_construct_n(TOutputIterator o_begin, TSize n)
Definition memory.h:756
T * construct_at(T *p)
Definition memory.h:977
etl::enable_if< etl::is_trivially_destructible< T >::value, void >::type destroy_at(T *)
Definition memory.h:1027
TOutputIterator uninitialized_move_n(TInputIterator i_begin, TSize n, TOutputIterator o_begin)
Definition memory.h:605
TOutputIterator uninitialized_copy_n(TInputIterator i_begin, TSize n, TOutputIterator o_begin)
Definition memory.h:357
etl::enable_if< etl::is_trivially_destructible< typenameetl::iterator_traits< TIterator >::value_type >::value, TIterator >::type destroy_n(TIterator i_begin, TSize n)
Definition memory.h:1190
TOutputIterator uninitialized_move(TInputIterator i_begin, TInputIterator i_end, TOutputIterator o_begin)
Definition memory.h:480
TOutputIterator uninitialized_copy(TInputIterator i_begin, TInputIterator i_end, TOutputIterator o_begin)
Definition memory.h:237
etl::enable_if< etl::is_trivially_constructible< typenameetl::iterator_traits< TOutputIterator >::value_type >::value, void >::type uninitialized_default_construct(TOutputIterator, TOutputIterator)
Definition memory.h:670
TOutputIterator uninitialized_fill_n(TOutputIterator o_begin, TSize n, const T &value)
Definition memory.h:210
add_rvalue_reference
Definition type_traits_generator.h:1366
conditional
Definition type_traits_generator.h:1199
enable_if
Definition type_traits_generator.h:1230
is_const
Definition type_traits_generator.h:947
is_integral
Definition type_traits_generator.h:1040
is_reference
Definition type_traits_generator.h:1150
is_same
Definition type_traits_generator.h:1080
bitset_ext
Definition absolute.h:38
ETL_CONSTEXPR T * to_address(T *p)
Definition memory.h:62
ETL_CONSTEXPR TContainer::iterator begin(TContainer &container)
Definition iterator.h:962
void destroy(const T *const p)
Destroys the object.
Definition variant_pool_generator.h:370
ETL_NODISCARD ETL_CONSTEXPR14 T round_half_even_unscaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:314
ETL_CONSTEXPR TContainer::iterator end(TContainer &container)
Definition iterator.h:992
add_lvalue_reference
Definition type_traits_generator.h:1309
Definition type_traits_generator.h:2204