* zephyr: make `ETL_DEBUG` default to on if Zephyr assertions are enabled
this is the more appropriate default: ETL_DEBUG controls some container assertions, so it should follow the Zephyr assertions by default
* zephyr: expose new error-checking configs
* zephyr: add Kconfig choices for error handling
* Add docs and tutorial for etl::intrusive_avl_tree
Documents the intrusive AVL tree added in PR #1425: a full API reference
page under Containers/Trees, and a tutorial demonstrating ordered access
to intrusively-linked objects with unpredictable lifetimes, including
move support and destructor-driven automatic removal from the tree.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
* Add complexity shortcode and document its usage
Introduces a {{< complexity >}} Hugo shortcode (with light/dark styling
for constant/logarithmic/linear/linearithmic/polynomial/exponential
classes) for rendering Big-O complexity inline, applies it throughout
the intrusive_avl_tree API reference in place of raw "O(...)" text, and
documents the Description/Complexity structure and supported classes in
DOCUMENTATION.md.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
* Fix issues found by @CodeRabbit
* Put complexity notes on their own lines in intrusive_avl_tree docs
Move the complexity shortcode from the inline "**Complexity:**" label
to its own line under a "**Complexity**" label. Notes that give several
alternatives (e.g. amortized vs. worst-case) now show each one on a
separate line. Update the guideline in DOCUMENTATION.md to match.
* Update complexity examples in DOCUMENTATION.md
Add the hard line break after the "**Complexity**" label in the
example, and rewrite the list of supported complexity classes in the
new two-line format, including an example with several alternatives.
* Add logarithmic complexity example to DOCUMENTATION.md
---------
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
* feat: add clamped_value utility
* style: format clamped_value include list
* feat: enhance clamped_value with runtime bounds and comparison operators and DRY up the implementation
* refactor: call set in runtime ctor
instead of duplicated the clamping logic
* Add C++20 floating-point clamped_value support
* Document and stress clamped_value edge cases
* Change ETL_NOEXCEPT_IF(ETL_NOT_USING_EXCEPTIONS) to ETL_NOEXCEPT
* Change ETL_NOEXCEPT_IF(ETL_NOT_USING_EXCEPTIONS) to ETL_NOEXCEPT
* Revert changes
---------
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
Dispatch only the argument types which are actually stated. For everything
else, don't generate the code anymore.
Detemplatize parse_format_spec().
Collapse long double and double to double on targets where they are
same size. This helps prevent duplicate code generation.
Even without ETL_USE_TYPE_TRAITS_BUILTINS in the profile, we get
compiler builtins detected. Makes detection more consistent now.
Previously, some type trait builtins were detected automatically,
and some others needed to be activated via ETL_USE_TYPE_TRAITS_BUILTINS
in the profile explicitly.
Replaces: #1174
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
Further, switching internal member from array_view to span to
be closer to standard, and more constexpr friendly.
Also adjusting to C++11 template syntax.
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
Besides, remove unused ASAN_OPTIONS from github workflows.
Further, activate sanitizers for C++23 workflows, at the places
where we also activated -O3 optimization. Not activating everywhere
for CI efficiency reasons for now.
Note that the sanitizers are activated on clang C++23 workflows
only, since there is a remaining issue with GCC in delegate_cpp11.
* Update _index.md
* Update _index.md
* Cherry pick the Docker fixes for PowerPC (#1563)
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
* Fixed building and unit tests run under XCode 2027 Beta 6 (AppleClang 21.0.0.21000333):
- Compilation failures:
- `etl::ideque::iterator::operator[]` index type should be `difference_type` (instead of `size_t`).
- random-access `etl::poly_span::iterator` is missing `operator[]`.
- Unit tests failures of `test_multimap` suit:
- fixed `equal_range`-related tests to properly verify result range (via new `Check_Equal` overload helper).
- fixed `find`-related tests to not depend on particular order of `second` values (via new `Check_ContainsPair` helper). See note 1,2) at [cppreference](https://cppreference.com/cpp/container/multimap/find) about order.
* PR review fixes.
---------
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
mutex_freertos.h unconditionally included the vanilla FreeRTOS header
layout (FreeRTOS.h and semphr.h at the include root). On ESP-IDF, and
therefore Arduino-ESP32 as well since it's built on top of ESP-IDF,
these headers are nested one level deeper under freertos/, so the
unconditional include fails to compile on any ESP32 target with
ETL_TARGET_OS_FREERTOS defined.
Use __has_include to try the standard path first, fall back to the
ESP-IDF nested path, and fail with a clear #error if neither is found,
rather than a mysterious "file not found" from the compiler.
Also resolves a pre-existing include-style inconsistency in this file:
the old code mixed "FreeRTOS.h" (quotes) with <semphr.h> (angle
brackets). All includes now uniformly use angle brackets.
* Topic/optional monadic operations
* topic/optional-monadic-operations:
- added and_then, or_else, and transform to etl::optional with unit tests
- added is_optional to optional.h, used in and_then and or_else to ensure that the returned type is an optional
- implemented as ref-qualified overloads with C++11 compatible trailing return types, following the etl::expected implementation
* Convert to C++11 style type traits
* Coderabbit changes
Constrain transform before forming etl::optional<U>.
Remove references from monadic result types.
* clang-format updates
---------
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>