* Fix is_swappable for MSVC in C++14
* MSVC 19.44, Debug build, C++20 specific format adjustment
* Add docs and tutorial for etl::intrusive_avl_tree (#1608)
* 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>
* Updated sponsors pages
* Refactor the documentation css to group styles for light and dark themes
---------
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
Co-authored-by: Sergei <sergej.shirokov@gmail.com>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
* Add docs and tutorial for etl::intrusive_avl_tree (#1608)
* 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>
* Updated sponsors pages
* Refactor the documentation css to group styles for light and dark themes
* Fix circular reference in callback_timer_*
Fixes#967
* Unify timer tick() ordering and detect duplicate inserts
Address review feedback on #1611.
Replace the is_active() guard with a consistent tick() ordering across
all timer controllers: a repeating timer is now reinserted before its
callback is invoked or its message is sent, matching etl::callback_timer.
A callback that restarts the timer then replaces the existing entry
instead of causing a second insert. Applied to message_timer_atomic,
message_timer_interrupt and message_timer_locked as well, which are
affected in the same way.
Reject an insert of a timer that is already in the active list, rather
than linking it to itself, and record that it happened. The regression
tests now assert duplicate_insert_detected() instead of relying on the
resulting circular reference hanging the test.
---------
Co-authored-by: Sergei <sergej.shirokov@gmail.com>
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
* Add be_uint24_t etc. to unaligned_type.h
A typical use case is to endian convert 24, 40, 48 bits etc.
This change generalizes the pre-existing types in unaligned_type.h
to those odd sizes.
* Add documentation for odd sized unaligned_type specializations
* 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>
* Simplify noexcept containing ETL_NOT_USING_EXCEPTIONS
* Revert some format
---------
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
Co-authored-by: Roland Reichwein <Roland.Reichwein@bmw.de>
This was disabled explicitly in recent commit
232c948674cff1b4b72c2d6b3acfa7342d096dd1 to prevent using
the <compare> header from STL.
Now, re-enabling by implementing an ETL version of it in compare.h
* Help the compiler optimize unaligned_type.
This fixes a regression in 266b0f99 when the type was made constexpr. When
switching to a loop to construct the value the compiler was unable to detect
what was going on. We now unroll the loop at compile time into what's
essentially a hand rolled shift and OR operation which the compiler detects
and replaces with a byte swap. Tested on gcc (x86+arm) and clang (x86).
Introduce a static value_from which can be used to convert a value from an
existing buffer. There were previously three options for this, all bad or
awkward in different ways:
- val = etl::be_uint32_t(address)
Copies to temporary storage.
- val = *reinterpret_cast<const etl::be_uint32_t*>(address);
Unreadable.
- etl::be_uint32_t::copy_store_to_value(address, output);
Requires an output parameter.
The new addition is:
- val = etl::be_uint32_t::value_from(address);
Additionally, update the documentation with value_from and the missing,
existing constructors.
* Please clang-format.
---------
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>