31#ifndef ETL_ALIGNMENT_INCLUDED
32#define ETL_ALIGNMENT_INCLUDED
36#include "static_assert.h"
100 template <
size_t Alignment>
104 return (address % Alignment) == 0
U;
110 template <
typename T>
116 namespace private_alignment
122 template <
bool Is_Match,
size_t Alignment,
typename...
TRest>
123 class type_with_alignment_matcher;
126 template <
size_t Alignment,
typename T1,
typename...
TRest>
127 class type_with_alignment_matcher<true, Alignment,
T1,
TRest...>
135 template <
size_t Alignment,
typename T1,
typename T2,
typename...
TRest>
136 class type_with_alignment_matcher <false, Alignment,
T1,
T2,
TRest...>
144 template <
size_t Alignment,
typename T1>
145 class type_with_alignment_matcher <false, Alignment,
T1>
155 template <
size_t Alignment,
typename T1,
typename...
T>
156 class type_with_alignment_helper
171 template <
size_t Alignment,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8>
180 template <
size_t Alignment,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8>
189 template <
size_t Alignment>
200 template <
size_t Alignment,
typename T1,
typename T2 =
void,
typename T3 =
void,
typename T4 =
void,
215 template <
size_t Alignment>
221 typedef struct {
alignas(Alignment)
char dummy; } type;
223 #if ETL_NOT_USING_64BIT_TYPES
234 template <
size_t Alignment>
243 template <
size_t Length, const
size_t Alignment>
254 template <
typename T>
263 template <
typename T>
264 operator const T& ()
const
272 template <
typename T>
276 return reinterpret_cast<T*
>(data);
280 template <
typename T>
281 operator const T* ()
const
284 return reinterpret_cast<const T*
>(data);
288 template <
typename T>
297 template <
typename T>
306 template <
typename T>
310 return reinterpret_cast<T*
>(data);
314 template <
typename T>
318 return reinterpret_cast<const T*
>(data);
321#if ETL_USING_CPP11 && !defined(ETL_COMPILER_ARM5)
322 alignas(Alignment)
char data[
Length];
327 typename etl::type_with_alignment<Alignment>::type etl_alignment_type;
334 template <
size_t Length, const
size_t Alignment>
342 template <
size_t Length,
typename T>
348 template <
size_t Length,
typename T>
360 template <
typename T>
365 typedef T value_type;
366 typedef T& reference;
367 typedef const T& const_reference;
369 typedef const T* const_pointer;
401 template<
typename...
Args>
415 template<
typename T1>
429 template<
typename T1,
typename T2>
443 template<
typename T1,
typename T2,
typename T3>
457 template<
typename T1,
typename T2,
typename T3,
typename T4>
Memory misalignment exception.
Definition alignment.h:66
Exception base for alignment.
Definition alignment.h:53
Definition alignment.h:203
Definition alignment.h:168
Typed storage exception.
Definition alignment.h:79
Definition alignment.h:362
reference create(const T1 &t1, const T2 &t2)
Definition alignment.h:430
reference operator*()
Definition alignment.h:496
const_pointer operator->() const
Definition alignment.h:488
pointer operator->()
Definition alignment.h:479
reference create(const T1 &t1)
Definition alignment.h:416
const_reference operator*() const
Definition alignment.h:504
~typed_storage()
Definition alignment.h:381
reference create(const T1 &t1, const T2 &t2, const T3 &t3)
Definition alignment.h:444
void destroy()
Calls the destructor of the wrapped object and asserts if has_value() is false.
Definition alignment.h:469
reference create(const T1 &t1, const T2 &t2, const T3 &t3, const T4 &t4)
Definition alignment.h:458
bool has_value() const
Definition alignment.h:389
Definition alignment.h:217
Definition alignment.h:245
Definition alignment.h:344
#define ETL_ASSERT(b, e)
Definition error_handler.h:356
Definition exception.h:47
add_rvalue_reference
Definition type_traits_generator.h:1366
is_same
Definition type_traits_generator.h:1080
bitset_ext
Definition absolute.h:38
bool is_aligned(const void *p, size_t required_alignment)
Check that 'p' has 'required_alignment'.
Definition alignment.h:91
ETL_NODISCARD ETL_CONSTEXPR14 T round_half_even_unscaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:314
Definition alignment.h:247
const T * get_address() const
Get address as const T pointer.
Definition alignment.h:315
T * get_address()
Get address as T pointer.
Definition alignment.h:307
const T & get_reference() const
Get address as const T reference.
Definition alignment.h:298
T & get_reference()
Get address as T reference.
Definition alignment.h:289