A C++ template library for embedded applications
MIT licensed
Join the ETL community
Designed and
maintained by
John Wellbelove
Like the ETL? Become a patron!
or
Macros
Many of the features or options in the ETL can be selected by defining the appropriate macros.
Some macros are defined by the ETL.
____________________________________________________________________________________________________
User defined

These must be defined in the user created etl_profile.h.

ETL_NO_CHECKS                                   ETL_ASSERT has no effect.

ETL_THROW_EXCEPTIONS                            ETL_ASSERT throws the specified exception.

ETL_THROW_EXCEPTIONS + ETL_LOG_ERRORS           ETL_ASSERT calls the error handler then
                                                throws an exception.

ETL_LOG_ERRORS                                  ETL_ASSERT calls the error handler then asserts.

ETL_LOG_ERRORS + NDEBUG                         ETL_ASSERT calls the error handler.

ETL_CHECK_PUSH_POP                              Pushes and pops to containers are checked for bounds.

ETL_VERBOSE_ERRORS                              If this is defined then error messages and ouput in their
                                                long form.

ETL_BITSET_ELEMENT_TYPE                         If this is defined, then it will become the type used for
                                                elements in the bitset class.
                                                Default is uint_least8_t

ETL_FSM_STATE_ID_TYPE                           If this is defined, then it will become the type used for FSM
                                                state id numbers.
                                                Default is uint_least8_t

ETL_MESSAGE_ID_TYPE                             If this is defined, then it will become the type used for
                                                message id numbers.
                                                Default is uint_least8_t

ETL_TIMER_GUARD_TYPE                            If this is defined, then it will become the type used for the
                                                type for the timer guard variable. This must be a type that
                                                cannot be interrupted during a read/modify/write cycle.
                                                Default is etl::atomic_uint32_t

ETL_ISTRING_REPAIR_ENABLE                       Define this if you wish to memcpy ETL strings and repair them
                                                via an istring pointer or reference.
                                                Warning: This will make the container a virtual class.

ETL_IVECTOR_REPAIR_ENABLE                       Define this if you wish to memcpy ETL vectors and repair them
                                                via an ivector pointer or reference.
                                                Warning: This will make the container a virtual class.

ETL_IDEQUE_REPAIR_ENABLE                        Define this if you wish to memcpy ETL deques and repair them
                                                via an ideque pointer or reference.
                                                Warning: This will make the container a virtual class.

ETL_STLPORT                                     This must be defined in the user library profile when using
                                                STLPort as the standard library implementation.

ETL_NO_STL                                      If defined, the ETL will not use definitions from the STL.
                                                Instead it will use its own reverse engineered versions .

ETL_FORCE_EXPLICIT_STRING_CONVERSION_FROM_CHAR  If defined, the ETL will force string, wstring, u16string,  
                                                u32string and string_view to have explicit construction
                                                from a character pointer.

ETL_STRING_TRUNCATION_IS_ERROR                  If defined, then a string truncation will result in an
                                                etl::string_truncation error being emitted.                

ETL_POLYMORPHIC_BITSET                          Defining any one of these will make the corresponding                                              
ETL_POLYMORPHIC_DEQUE                           container polymorphic, turning the protected non-virtual
ETL_POLYMORPHIC_FLAT_MAP                        destructor to public virtual.
ETL_POLYMORPHIC_FLAT_MULTIMAP
ETL_POLYMORPHIC_FLAT_SET
ETL_POLYMORPHIC_FLAT_MULTISET
ETL_POLYMORPHIC_FORWARD_LIST
ETL_POLYMORPHIC_LIST
ETL_POLYMORPHIC_MAP
ETL_POLYMORPHIC_MULTIMAP
ETL_POLYMORPHIC_SET
ETL_POLYMORPHIC_MULTISET
ETL_POLYMORPHIC_QUEUE
ETL_POLYMORPHIC_STACK
ETL_POLYMORPHIC_REFERENCE_FLAT_MAP
ETL_POLYMORPHIC_REFERENCE_FLAT_MULTIMAP
ETL_POLYMORPHIC_REFERENCE_FLAT_SET
ETL_POLYMORPHIC_REFERENCE_FLAT_MULTISET
ETL_POLYMORPHIC_UNORDERED_MAP
ETL_POLYMORPHIC_UNORDERED_MULTIMAP
ETL_POLYMORPHIC_UNORDERED_SET
ETL_POLYMORPHIC_UNORDERED_MULTISET
ETL_POLYMORPHIC_STRINGS
ETL_POLYMORPHIC_POOL
ETL_POLYMORPHIC_VECTOR

ETL_POLYMORPHIC_CONTAINERS                      If defined then all containers are polymorphic.

ETL_POLYMORPHIC_MESSAGES                        If defined then etl::imessage is virtual.
                                                ETL_MESSAGES_ARE_VIRTUAL is deprecated and may be removed.

____________________________________________________________________________________________________
ETL defined

Defined in platform.h
These macros are normally used internally for ETL classes.

ETL_DEBUG                                       This is defined as 1 if DEBUG or _DEBUG is defined. Otherwise 0.

ETL_8BIT_SUPPORT                                This is defined as 1 if the platform supports 8 bit char types.
                                                Otherwise 0.

ETL_CONSTEXPR                                   If ETL_CPP11_SUPPORTED is defined as 1 then this macro is
                                                defined as constexpr, otherwise defined as blank.

ETL_CONSTEXPR14                                 If ETL_CPP14_SUPPORTED is defined as 1 then this macro is
                                                defined as constexpr, otherwise defined as blank.

ETL_CONSTEXPR17                                 If ETL_CPP17_SUPPORTED is defined as 1 then this macro is
                                                defined as constexpr, otherwise defined as blank.

ETL_IF_CONSTEXPR                                If ETL_CPP17_SUPPORTED is defined as 1 then this macro is
                                                defined as constexpr, otherwise defined as blank.

ETL_CONST_OR_CONSTEXPR                          If ETL_CPP11_SUPPORTED is defined as 1 then this macro is
                                                defined as constexpr, otherwise defined as const.

ETL_NOEXCEPT                                    If ETL_CPP11_SUPPORTED is defined as 1 then this macro is
                                                defined as noexcept, otherwise defined as blank.

ETL_NOEXCEPT_EXPR(expression)                   If ETL_CPP11_SUPPORTED is defined as 1 then this macro is
                                                defined as noexcept(expression), otherwise defined as blank.

ETL_NODISCARD                                   If ETL_CPP11_SUPPORTED is defined as 1 then this macro is
                                                defined as [[nodiscard]], otherwise defined as blank.

ETL_DEPRECATED                                  If ETL_CPP14_SUPPORTED is defined as 1 then this macro is
                                                defined as [[deprecated]], otherwise defined as blank.

ETL_DEPRECATED_REASON(reason)                   If ETL_CPP14_SUPPORTED is defined as 1 then this macro is
                                                defined as [[deprecated(reason)]], otherwise defined as blank.

ETL_FALLTHROUGH                                 If ETL_CPP17_SUPPORTED is defined as 1 then this macro is
                                                defined as [[falltrough]], otherwise defined as blank.

ETL_NORETURN                                    If ETL_CPP11_SUPPORTED is defined as 1 then this macro is
                                                defined as [[noreturn]], otherwise defined as blank.

ETL_OR_STD                                      If ETL_NO_STL is defined and ETL_IN_UNIT_TEST is not then
                                                ETL_OR_STD is defined as etl, otherwise it is defined as std.

ETL_IN_UNIT_TEST                                If defined, then the code is being compiled in the unit tests.
                                                For internal ETL use only.

ETL_HAS_ATOMIC                                  This is defined as 1 if the compiler supplies an atomic class.
                                                Otherwise 0.

____________________________________________________________________________________________________

These may be user defined in etl_profile.h, or automatically determined in platform.h

ETL_CPP11_SUPPORTED                             This is defined as 1 if the compiler supports C++11.
                                                Otherwise 0.

ETL_CPP14_SUPPORTED                             This is defined as 1 if the compiler supports C++14.
                                                Otherwise 0.

ETL_CPP17_SUPPORTED                             This is defined as 1 if the compiler supports C++17.
                                                Otherwise 0.

ETL_NO_NULLPTR_SUPPORT                          This is defined as 1 if compiler does not support nullptr
                                                Otherwise 0.

ETL_NO_LARGE_CHAR_SUPPORT                       This is defined as 1 if the compiler does not support char16_t
                                                or char32_t types. Otherwise 0.

ETL_CPP11_TYPE_TRAITS_IS_TRIVIAL_SUPPORTED      This is defined as 1 if compiler supports  the
                                                std::is_trivially_xxx set of traits. Otherwise 0.

ETL_COMPILER_IAR                                One of these will be defined.
ETL_COMPILER_GREEN_HILLS
ETL_COMPILER_INTEL
ETL_COMPILER_MICROSOFT
ETL_COMPILER_GCC
ETL_COMPILER_CLANG
ETL_COMPILER_ARM
ETL_COMPILER_TEXAS_INSTRUMENTS
ETL_COMPILER_GENERIC

ETL_COMPILER_VERSION                            These will be defined as the compiler version numbers,
ETL_COMPILER_FULL_VERSION                       if available.

ETL_DEVELOPMENT_OS_WINDOWS                      One of these will be defined.
ETL_DEVELOPMENT_OS_LINUX
ETL_DEVELOPMENT_OS_UNIX
ETL_DEVELOPMENT_OS_APPLE
ETL_DEVELOPMENT_OS_BSD
ETL_DEVELOPMENT_OS_GENERIC

ETL_NO_CPP_NAN_SUPPORT                          If defined, indicates that the compiler does not support nan(),
                                                nanf() or nanl().
                                                Automatically defined if using CodeWorks for ARM