A C++ template library for embedded applications
MIT licensed
Designed and
maintained by
John Wellbelove
Alignment
A way of aligning memory storage through template parameters.
____________________________________________________________________________________________________
type_with_alignment
Returns a fundamental type that has the same alignment as that specified in the template parameter.

template <const size_t ALIGNMENT>
class type_with_alignment

Example
typedef etl::type_with_alignment<4>::type type_t;
____________________________________________________________________________________________________
aligned_storage
Creates a memory store of the specified length at the specified alignment.

template <const size_t LENGTH, const size_t ALIGNMENT>
struct aligned_storage;

Example
// Creates aligned storage of length 100 at an alignment of 8.
etl::aligned_storage<100, 8>::type storage;

The class defines various conversion operators for ease of use.

Conversions are supplied to T&, const T&, T*, const T*, plus explicit get_address and get_reference member functions.
____________________________________________________________________________________________________
aligned_storage_as
Creates a memory store of the specified length at the same alignment as the specified type.

template <const size_t LENGTH, typename T>
struct aligned_storage_as;

Example
// Creates aligned storage of length 100 at an alignment of a double.
etl::aligned_storage_as<100, double>::type storage;

____________________________________________________________________________________________________
typed_storage
20.40.1

template <typename T>
class typed_storage;
Wrapper class that provides a memory area and lets the user create an instance of T in this memory at runtime.
This class also erases the destructor call of T, i.e. if typed_storage goes out of scope, the destructor if the wrapped
type will not be called. This can be done explicitly by calling destroy().

T        value_type
T&       reference
const T& const_reference
T*       pointer
const T* const_pointer

typed_storage()
Constructor
   
~typed_storage() = default;
Defaulted destructor which will NOT call the destructor of the object which was created by calling create().
____________________________________________________________________________________________________
void destroy()
Calls the destructor of the wrapped object and asserts if has_value() is false.
____________________________________________________________________________________________________
bool has_value() const
Returns true if object has been constructed using create().
Returns false otherwise.
____________________________________________________________________________________________________
template <typename... Args>
reference create(Args&&... args)
Constructs the instance of T forwarding the given args to its constructor and asserts etl::typed_storage_error if
has_value() is false.
Returns the instance of T which has been constructed in the internal byte array.
____________________________________________________________________________________________________
pointer operator->()
Returns a pointer of type T and asserts etl::typed_storage_error if has_value() is false.

const_pointer operator->() const
Returns a const pointer of type T and asserts etl::typed_storage_error if has_value() is false.
____________________________________________________________________________________________________
reference operator*()
Returns reference of type T and asserts if etl::typed_storage_error if has_value() is false.

const_reference operator*() const
Returns const reference of type T and asserts etl::typed_storage_error if has_value() is false.
____________________________________________________________________________________________________
is_aligned
20.35.12

bool is_aligned(void* p, size_t alignment)
Check that p has alignment
____________________________________________________________________________________________________
template <size_t Alignment>
bool is_aligned(void* p)
Check that p has Alignment
____________________________________________________________________________________________________
template <typename T>
bool is_aligned(void* p)
Check that p has the alignment of T
____________________________________________________________________________________________________
alignment_exception
20.35.12
Exception base for alignment
____________________________________________________________________________________________________
alignment_error
20.35.12
Memory misalignment exception.
alignment.h