6148 Commits

Author SHA1 Message Date
John Wellbelove
decef93534
Merge 475abe4d69f2a747166bed3a6eb9bdd1d2381bbe into 20cab3225691a9782f422ad1ad132f3f8ce5cf8a 2026-06-13 20:05:25 +01:00
John Wellbelove
475abe4d69
Merge branch 'development' into feature/Add-intersect-and-union-actions-to-type_list 2026-06-13 20:05:23 +01:00
John Wellbelove
8cadfc0b10 Corrections from review 2026-06-13 19:57:12 +01:00
John Wellbelove
6b9dd86b40 clang-format changes 2026-06-13 11:35:07 +01:00
John Wellbelove
5bfb9530ac New metafunctions for type_list 2026-06-13 11:33:51 +01:00
Roland Reichwein
20cab32256
Make ipriority_queue non-sized base class (#1459)
* Fix iterator access algorithm.h

Move from operator[] access to operator+ and operator- to prevent
limited compatibility. This worked before for vector because of
iterators being ptrdiff_t (signed), but not for unsigned access
like size_t as in etl::queue.

* Make ipriority_queue non-sized base class

Fixes issue #1457

---------

Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
2026-06-13 11:00:39 +02:00
Roland Reichwein
6d9ed143b2
Add etl::infinite_loop (#1458) 2026-06-12 08:04:24 +01:00
Christoph Rüthing
4f9618d8df
Make Constructors of Atomics for trivial Types constexpr (#1453)
* Bold project documentation link in README

* Add constexpr to trivial Atomics

According to https://en.cppreference.com/cpp/atomic/atomic/atomic the constructors of atomics should be constexpr. This change marks (at least for the trivial types) the constructor as constexpr.

---------

Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
Co-authored-by: Roland Reichwein <Roland.Reichwein@bmw.de>
2026-06-08 15:23:35 +01:00
John Wellbelove
1ca5bb012f
to string() does not handle floating point number with integer part exceeding max uint64 t (#1455)
* Added 'scientific' flag to basic_format_spec to allow forcing of scientific format for all floating point values.

* Forces floating point numbers that are larger than than the internal integral workspace types to be formatted in scientific format.

Also allows scientific format to be forced for all floating point output.
NAN and INF outputs now follow case settings, as does the new scientific exponent letter. 'e' or 'E'.

* treefmt changes

* Quick fixes

* Removed <format>

* Added tests for NAN and INF

Fixed result for -INF

* Added tests for upper and lower case scintific format.

* Changed incorrect stream header from <strstream> to <sstream>

* Update test_to_string.cpp

* Update test_to_u16string.cpp

* Update test_to_u32string.cpp

* Update test_to_u8string.cpp

* Update test_to_wstring.cpp

* clang-format updates

* clang-format updates

* Re-coded the precision calculation in add_floating_point_scientific to match add_floating_point_non_scientific

* Rename step 1

* Fix: rename docs/Messaging to docs/messaging

* Rename step 1

* Fix: rename docs/Messaging to docs/messaging

* Rename step 1

* Fix: rename docs/Messaging to docs/messaging

* Changed incorrect stream header from <strstream> to <sstream>

* Update test_to_string.cpp

* clang-format updates

# Conflicts:
#	test/test_to_string.cpp

* Remove old docs folder

* clang-format updates

# Conflicts:
#	test/test_to_string.cpp

* Re-commit missing file

---------

Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
2026-06-08 14:16:52 +01:00
John Wellbelove
9b56ffe676 Fix: rename docs/Messaging to docs/messaging 2026-06-08 11:16:22 +01:00
John Wellbelove
b969b2c46c Rename step 1 2026-06-08 11:16:02 +01:00
John Wellbelove
b3ade470b0 Fix: rename docs/Messaging to docs/messaging 2026-06-08 11:05:31 +01:00
John Wellbelove
9907ab3b68 Rename step 1 2026-06-08 11:04:58 +01:00
John Wellbelove
12792e418f Fix: rename docs/Messaging to docs/messaging 2026-06-08 10:42:41 +01:00
John Wellbelove
f383184b0e Rename step 1 2026-06-08 10:42:10 +01:00
John Wellbelove
eed3d0b7b0
Hotfix/documentation updates (#1456)
* message_router and fsm documentation corrections

* message_router and fsm documentation corrections

* message_router and fsm documentation corrections

* Delete docs/Messaging/message-router.md

The folder is no longer valid.

---------

Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
2026-06-08 08:58:47 +01:00
John Wellbelove
4a88884b39
Issue/add hugo support for documentation (#1449)
* Add ranges

* Initial Hugo setup

* Work in progress

* Added selection for local or remote site

* Updated to 'light' theme

* Changed to using Hextra Hugo theme

* Changed to using Hextra Hugo theme

* Changed to Hextra Hugo theme

* Change to Hextra Hugo theme

* Updated Hugo setup.

* Updated Hugo setup.

# Conflicts:
#	docs/releases/_index.md

* Work in progress

* Added new fonts

Added new documentation

* Latest documentation updates

* Latest documentation updates

# Conflicts:
#	docs/containers/array.md
#	docs/containers/array_view.md
#	docs/containers/array_wrapper.md
#	docs/containers/bip_buffer_spsc_atomic.md
#	docs/containers/bitset.md
#	docs/containers/indirect_vector.md
#	docs/containers/vector.md
#	docs/getting-started/compilers.md

* Added bloom_filter markdown doc

* Added more documentation

Updated CSS for light and dark modes

* Fixed some menus

Added mode documentation files

* Updated CSS rules

Added badges to home page
Added uniqur_ptr + pool tutorial

* Fixed formatting on the home page markdown

Modified light amd dark code formatting

* Updated unique_ptr-with-pool

* Added container and shared message tutorials

* Updates to documentation

* Added const_multimap

* Updated source-formatting.md

* Added initial raw text files form Web site editor

* Innore coverage build directory

* Exported raw text documentation files from the web site editor

* Hugo updates

* Added Hugo intalation and markdown descriptions

* More addition to the documentation

* Added closure.md and updates to delegate.md

* Added format.md

* Added documentation for etl::delegate_observable, etl::function, Base64 codec

* Added io_port documentation

* Added basic_format_spec

* Added documentation for string_stream and string utilities.

* Added more documentation

Updated the documentation CSS

* Added documentation for clocks, day, duration

* Added more documentation for chrono classes

Updated callouts

* More chrono documentation

* Completed chrono documentation

* Maths functions documentation

* Completed maths documentation

* Completed maths documentation

* Completed maths documentation

* Completed maths documentation

* Added multiple documentation files

* Added iterator.md

* Added debug_count.md and versions.md

* Added debug_count.md and versions.md

* Added more documentation

* More documentation

* Added some design pattern documentation

Modified some of the layout files
Modified the About documentation

* Converted more documentation pages

Modified the site CSS

* Added more documentation

Moced some documentation files to new directories

* Added more documentation

Tweaks to CSS

* Added callback_timer_deferred_locked documentation

* Added callback_timer_locked documentation

* More documentation updates

* More documentation updates

* More documentation updates

* New documentation files.

Harmonised file name format

* New documentation files.

* Multiple document updates

* Multiple document updates

* Final conversion of web pages

* Updates before PR

* Updates before PR

* Updates before PR

# Conflicts:
#	docs/blog/_index.md

* Final pre PR updates

* Updates to message framework documentation

* Renamed directory

* Fix spelling

* Added author and date to blog files

Moved documentation files merged from development

* Fixed 'Description' typo

* Fix typos

# Conflicts:
#	docs/IO/io_port.md
#	docs/containers/sets/const-multiset.md
#	docs/containers/sets/const-set.md
#	docs/maths/correlation.md
#	docs/maths/gamma.md

* Renamed two files to lower case

* Minor renaming

* Added author and date

* Updated callout on bresenham_line.md

Added support for showing the ETL version on the documentation first page, by copying the version.txt file as a hugo asset.
Updated the Python 'update_release.py' to copy 'version.txt'

* Replace space in filename with hyphen.

Added more information to hugo-commands.md

* Replace space in filename with hyphen.

Added more information to hugo-commands.md

# Conflicts:
#	docs/getting-started/view-the-docs-locally/hugo-commands.md

* Added a link to pseudo_moving_average.md

* Updated title pages for groups

* Fixed missing 404 for non-existent pages

* Fixed coordinate variable names in the 'Calculating the intersection' example

---------

Co-authored-by: Roland Reichwein <Roland.Reichwein@bmw.de>
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.co.uk>
2026-06-06 13:12:44 +01:00
Roland Reichwein
42a21a92e8
Fix copy and move in signal.h (#1454)
* Fix copy and move in signal.h

* Delete copy and move in callback_service.h

The implicitly provided copy and move copied internal pointers
which are invalid after copying.

* Delete copy and move in delegate_service.h

The implicitly provided copy and move copied internal pointers
which are invalid after copying.
2026-06-04 22:34:59 +01:00
John Wellbelove
e379c13543 Merge branch 'serges147/master' into development
# Conflicts:
#	include/etl/intrusive_avl_tree.h
2026-06-01 11:34:59 +01:00
John Wellbelove
7e782b850d Added documentation deploy action to www.etlcpp.com 2026-06-01 11:32:10 +01:00
Roland Reichwein
8a782cc7f1
Add more constexpr to constructors (#1450)
* Add more constexpr to ctors

* Adjust operator!=() in fixed_iterator.h

Instead of taking an iterator by reference, take it by value as
done in the other operators and overloads.

* Initialize move_iterator() current member

Prevent indeterminate values

* Fix fixed_iterator::operator* return type

fixed_iterator::operator* returned value_type by value, so writes like *it = ...
modified a temporary rather than the underlying location. This broke the
iterator’s intended use (e.g., writing to a fixed register/memory location).
Now returning iterator_traits<TIterator>::reference instead (const and
non-const overloads).

* Fixed move_iterator::operator+= and operator-= return type

move_iterator::operator+= / operator-= returned by value, but RandomAccessIterator
requirements (and std::move_iterator) expect these to return move_iterator&.
Returning by value also added an unnecessary copy and could break generic code
expecting reference semantics.
2026-05-31 19:32:38 +01:00
Sergei
e3fad3c908
Add etl::intrusive_avl_tree class. (#1425)
* Print test names at test time (#1343)

* Fix operator| conflict with std::ranges (#1395)

* Added etl::intrusive_avl_tree class.

* PR review minor fixes.

* Fix `std::move` -> `etl::move`

* Apply AI spell checking

* Try to fix C++03 build.

---------

Co-authored-by: Roland Reichwein <Roland.Reichwein@bmw.de>
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
2026-05-31 09:49:55 +01:00
Roland Reichwein
af3944acdb
Fix iterator_traits: make SFINAE-friendly for iterators without nested typedefs (#1447)
The primary etl::iterator_traits template previously required all five
nested typedefs (iterator_category, value_type, difference_type,
pointer, reference) to exist, causing hard compilation errors with
iterators like std::common_iterator or ranges::common_iterator.

Changes:

1. Make primary template SFINAE-friendly: split into an empty primary
   template and a void_t-guarded partial specialization that only
   activates when all nested typedefs are present.

2. Add explicit std::common_iterator specialization (C++20/STL): a
   partial specialization that delegates to
   std::iterator_traits<std::common_iterator<I,S>>.

3. Fall through to std::iterator_traits: the empty primary template
   inherits from std::iterator_traits<TIterator> when building with
   STL and C++20, so any iterator with a std::iterator_traits
   specialization works automatically.

4. Remove iterator_traits dependency from etl::vector: assign() now
   uses decltype(*first) for the type-compatibility static assert,
   and insert() uses ptrdiff_t directly instead of querying
   iterator_traits<TIterator>::difference_type.
2026-05-26 09:11:24 +01:00
Roland Reichwein
9765cbf764
Fix format: float zero-padding, nested replacement width, octal alternate form, and extreme doubles (#1442)
format.h:
- Fix float zero-padding ({:010f}): output sign first, then zero-fill,
  then the unsigned formatted value, matching std::format behavior.
- Fix nested replacement fields ({:{}d}): consume the value's auto-index
  in parse_format_spec before parsing nested width/precision fields, so
  auto-indexing order matches the C++ standard.
- Fix {:#o} with value 0: produce "0" instead of "00" by skipping the
  octal prefix when the value is zero.
- Fix format_floating_default overflow for extreme doubles (DBL_MIN,
  DBL_MAX): fall back to scientific notation for values >= 1e18 or
  tiny positives < 1e-6, delegating to format_floating_e.
- Fix format_floating_e precision loss: replace iterative multiply-by-10
  normalization loop with O(1) log10/pow/floor computation.
- Add resolve_nested_replacements helper to extract width/precision
  from format args at formatting time.

test_format.cpp:
- Add tests for float zero-padding, nested replacement width, octal
  alternate form with zero, float sign/width/alignment, negative floats,
  scientific notation for large/small values, default-to-scientific
  switch, positive zero, brace escaping, and integer limits.

format.h + platform.h:
- log10l fix for different toolchain support:
  Define ETL_FORMAT_NO_LONG_DOUBLE_MATH in the profile if libm doesn't
  provide log10l. This is identified by linker error missing this symbol.
  It was identified with the llvm/clang cross toolchain for ARM.
2026-05-26 04:19:42 +01:00
Roland Reichwein
41174ed7f6
Add missing constexpr to intrusive_links.h constructors (#1446) 2026-05-26 04:18:27 +01:00
SamHalvoe
6bb9841dae
added Pico and additional Teensy defines (#1444)
* Print test names at test time (#1343)

* Fix operator| conflict with std::ranges (#1395)

* added Pico and additional Teensy defines

* fix format

---------

Co-authored-by: Roland Reichwein <Roland.Reichwein@bmw.de>
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
Co-authored-by: SamHalvoe <SamHalvoe@users.noreply.github.com>
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
2026-05-25 20:47:34 +01:00
Roland Reichwein
652034603b
Add test/run-clang-tidy.sh (#1409)
* Print test names at test time (#1343)

* Fix operator| conflict with std::ranges (#1395)

* Add test/run-clang-tidy.sh

Also, add .clang-tidy configuration file.

In test/syntax_check/CMakeLists.txt, make ETL headers non-system headers.

Added .github/workflow/clang-tidy.yaml. Does not break the build for now
on clang-tidy findings/warnings.

Fix syntax issues

Those issues were uncovered by making ETL headers
non-system headers in test/syntax_checks/CMakeLists.txt

* Fix macro syntax

---------

Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
2026-05-18 08:01:17 +01:00
Roland Reichwein
373247e5c1
Make etl::variant capable for ROM placement and optimize runtime size (#1441)
Via an variadic_union, the internal storage is adjusted to be
able to be constexpr.
2026-05-18 07:14:26 +01:00
Roland Reichwein
eba472fa3a
Simplify and fix test/run-syntax-checks.sh (#1432) 2026-05-12 20:02:32 +01:00
Roland Reichwein
57d3867694
Fix the case of using STL without pthreads but with mutexes (#1433)
* Print test names at test time (#1343)

* Fix operator| conflict with std::ranges (#1395)

* Fix the case of using STL without pthreads but with mutexes

On non-POSIX targets in STL mode, std::mutex is included from
mutex.h but will probably miss pthreads. Instead, other
implementations might be detected and used in mutex.h.

Therefore, adding ETL_NO_STD_MUTEX as a profile option for ETL.

Further, removing unnecessary includes from queue headers.

---------

Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
2026-05-09 09:29:18 +01:00
Sergei
f6f145c5e5
Apply the rule of zero for etl::optional type. (#1426)
* Apply the rule of zero for `etl::optional` type.
Correct move behavior of `TestDataM` - it should preserve `valid` value.
Implemented overloads of `etl::make_optional` free function.
Extend optional moveable tests
- fundamental vs non-fundamental
- move construct/assign from valueless
- Verify nothrow of `etl::swap` for `etl::optional`.

* coderabbitai review fixes.

---------

Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
2026-05-08 09:33:21 +01:00
Roland Reichwein
079b3345d9
Various bugfixes (#1428)
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
2026-05-06 18:26:10 +01:00
Roland Reichwein
c9198d089c
Add format checks at compile time to format.h (#1419)
* Add format checks at compile time to format.h

* format.h: Refactor padding calculation

* format.h: Code cleanup
2026-05-06 10:16:20 +01:00
Roland Reichwein
a5d279d5e4
Fix sanitizer use (#1429)
* Fix sanitizer use

A case issue prevented adding sanitizer in the tests.

* Fix compiler warnings from actual sanitizer use
2026-05-06 10:13:02 +01:00
Roland Reichwein
fe17d32e9b
Fix meson build (#1431)
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
2026-05-06 10:10:14 +01:00
Roland Reichwein
e8206cca83
Remove unnecessary includes (#1434)
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
2026-05-06 09:10:10 +01:00
John Wellbelove
fdfd17a1c2 Added missing format and print headers from VS2022 project 2026-05-06 08:00:49 +01:00
Roland Reichwein
4f411c66a9
Remove dead code (#1427)
Removing private class members, code unused by ETL in "private"
namespaces, code unreachable via preprocessor guards (C++11 inside
C++03).

For code still to be kept, even though unused at first sight, add
tests.
2026-05-03 22:49:02 +02:00
Sergei Shirokov
2d7ddb056c PR review minor fixes. 2026-05-02 17:25:23 +03:00
Sergei Shirokov
1ea8473fe1 Added etl::intrusive_avl_tree class. 2026-05-02 01:04:32 +03:00
Roland Reichwein
b9b36d8155
Add bazel support (#1420)
* Add bazel support

* Add github workflow for bazel
2026-04-30 12:30:01 +02:00
Roland Reichwein
a2e274bbc5
Run C++26 workflows with docker (#1421)
Ubuntu 26.04 is not available in github workflows directly and won't be soon.
But ubuntu-26.04 is available as docker container. So use it for running
C++26 workflows which were disabled previously.
2026-04-30 12:27:12 +02:00
Roland Reichwein
d1fe2938e1
Remove unused reinstall-cmake.sh (#1422)
* Print test names at test time (#1343)

* Fix operator| conflict with std::ranges (#1395)

* Remove unused reinstall-cmake.sh

---------

Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
2026-04-29 10:11:02 +02:00
Roland Reichwein
a1cd6a5569
Activate -O3 in CI builds for C++23 (#1415)
* Activate -O3 in CI builds for C++23

For good coverage of potential warnings triggered by -O3, activate
it for:

* .github/workflows/clang-c++23.yml
* .github/workflows/gcc-c++23.yml

So additionally necessary CPU resources are limited.

* Use Ubuntu-24.04 to test C++23

---------

Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
2026-04-29 09:33:56 +02:00
Roland Reichwein
943e8e6089
Add invocable and further missing concepts to concepts.h (#1412)
* Print test names at test time (#1343)

* Fix operator| conflict with std::ranges (#1395)

* Add concept invocable and further missing concepts to concepts.h

---------

Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
2026-04-28 15:35:21 +02:00
Joris Putcuyps
15ca12649e
Global namespace bitset free functions cleanup (#1411)
* Print test names at test time (#1343)

* Fix operator| conflict with std::ranges (#1395)

* Keep comparison and swap free functions out of the global namespace and
let ADL do its thing.

* Apply the same global to etl namespace move on overlooked functions

---------

Co-authored-by: Roland Reichwein <Roland.Reichwein@bmw.de>
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
2026-04-28 14:13:55 +02:00
Roland Reichwein
ee0d4740b3
Add begin() and end() to etl::expected (#1410)
* Print test names at test time (#1343)

* Fix operator| conflict with std::ranges (#1395)

* Add begin() and end() to etl::expected

* Adding error_or() to etl::expected

---------

Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
2026-04-28 11:43:54 +02:00
Roland Reichwein
fe7b2da10c
Fix missing tuple_size (#1407)
* Print test names at test time (#1343)

* Fix operator| conflict with std::ranges (#1395)

* Fix missing tuple_size

In case of certain clang versions, a wrong combination of activated
and deactivated template forward declarations and specializations
were provided.

This led to redefinition errors and specialization errors.

Now aligning those combinations, and providing definitions from
<utility> from std in the STL using case.

---------

Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
2026-04-28 11:03:25 +02:00
Joris Putcuyps
5ccbc6fbff
Swap can be part of the etl namespace and let ADL do its thing (#1414)
* Print test names at test time (#1343)

* Fix operator| conflict with std::ranges (#1395)

* Swap can be part of the etl namespace and let ADL do its thing

---------

Co-authored-by: Roland Reichwein <Roland.Reichwein@bmw.de>
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
2026-04-28 10:23:52 +02:00
Roland Reichwein
ff772d4bd1
Move operators for etl::unique_ptr to etl namespace (#1408)
* Print test names at test time (#1343)

* Fix operator| conflict with std::ranges (#1395)

* Move operators for etl::unique_ptr to etl namespace

This is in accordance with the operators of std::unique_ptr. Also,
it doesn't pollute the global namespace, and also works together
with ADL, finding the operators in the etl namespace now.

---------

Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
2026-04-28 09:57:21 +02:00