* 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>
* 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>
* 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>
* 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.
* 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.
* 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>
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.
* 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>
* 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>
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.
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.
* 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>
* 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>
* Print test names at test time (#1343)
* Fix operator| conflict with std::ranges (#1395)
* Make etl::optional, etl::variant and etl::vector methods noexcept
Adding type traits supporting the respective conditional noexcept
Fix missing etl::move() in etl::optional move constructors
---------
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
* Fix delegate not being cleared by assigning empty braces
Fixes issue #1399.
The non-capturing lambda support (PR#1295) added a non-explicit
delegate(function_ptr) constructor and operator=(function_ptr). This
caused `delegate = {}` to implicitly convert `{}` to a null function
pointer and bind it via function_ptr_stub, leaving the delegate
appearing valid (stub != nullptr) but invoking through a null pointer
(undefined behavior).
Fix:
- Mark delegate(function_ptr) constructor explicit to prevent implicit
conversion from `{}` during initialization.
- In operator=(function_ptr), clear the delegate when fp is null
instead of binding a null pointer through function_ptr_stub.
Added tests verifying that both `delegate d = {}` and `d = {}` produce
an invalid (cleared) delegate.
* Fix Dockerfile for powerpc cross build
Debian snapshot sources were mixed with plain sid sources which
mismatched after a while. Now, aligning all sources from snapshot
server.
Includes C++26 related infrastructure macros.
Fixes compile errors when compiling under C++26.
Initially supported C++26 features:
- [[indeterminate]]
- new 2022 ISO prefixes in ratio.h
- atomic fetch_max() and fetch_min()
- is_virtual_base_of
- is_trivially_relocatable and trivially_relocate
- saturation arithmetic: add_sat, sub_sat, mul_sat, div_sat, saturate_cast
* Add development tools to docker image
python3-cogapp, clang-format, treefmt
Add script to run development environment in docker container
Document docker use in docs/docker.md
---------
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
* Extensions for testing
Generalize run-tests.sh
Test all C++ versions at once
Fix combination of big endian and -Wsign-conversion
Failed on s390x (as reference for big endian)
Add github workflow for s390x
Add armhf container files
Devcontainers for i386 and riscv
Add github workflows for armhf, i386 and riscv64
Add run-tests.sh for foreign architectures
Document testing in doc/testing.md
Adjustments from clang-format run
Fix .devcontainer/s390x/Dockerfile for linebreak syntax
Fix exit code of run-test.sh
Previously, "exit $?" was used, actually the return value of
FailedCompilation and FailedTest which are always 0.
Now just using 1.
In run-tests.sh at ctest, use -V for printing number of tests unconditionally
While ctest suppresses individual test list by default, it didn't even
print the number of tests anymore, as run_tests.sh does because
it suppresses it output completely.
Now, by default print number of tests, and in verbose mode, print test list
in addition.
* Support powerpc as foreign architecture
* Add SFINAE constraints to etl::begin/end and reverse iterator free functions
The unconstrained etl::begin(), etl::end(), etl::cbegin(), etl::cend(),
etl::rbegin(), etl::rend(), etl::crbegin(), and etl::crend() templates
in the no-STL code path were matching iterator types during ADL, causing
a hard error with GCC 15's std::ranges::begin. When std::ranges performed
ADL on an etl::*::iterator, it found etl::begin() as a candidate; since
the iterator type has a nested iterator typedef, the return type TContainer::iterator
was valid, but calling .begin() on the iterator failed.
Fix: add etl::void_t<decltype(...)> SFINAE guards to each template,
ensuring they only participate in overload resolution when TContainer
actually has the corresponding member function (.begin(), .end(), etc.).
* - Fix red unit tests on 32 bits big-endian platform.
* Document powerpc architecture for testing
* Use Dockerfiles in cross testing github workflows
Synchronizes environment setup for github workflows to what is
defined in the development Dockerfiles. So they don't need to
be maintained separately.
---------
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
Co-authored-by: Sergei Shirokov <sergej.shirokov@gmail.com>
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
* Fix run-syntax-checks.sh to run with bash
Contains bash specific syntax, and sync with the other *.sh files
in this directory.
* Add missing header file adaptors to the directory and CMakeLists.txt
* run-syntax-checks.sh without ETL_IN_UNIT_TEST
* Fix usage of make_unsigned
* Removing crc.h from syntax checks because of redundancy
* Remove ETL_USING_CPP11 from unit tests
Unit tests are always run with at least C++11.
* Add missing copyright header in test_manchester.cpp
* Fixed usage of ETL_DEPRECATED_REASON(), wrong syntax by order
---------
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
* Print test names at test time (#1343)
* Suppress false positive compiler warnings when compiling with -O3
The CI checks currently only check everything with -O0. Wenn activating
higher optimization levels, more warnings kick in. Leading to errors,
depending on the configuration.
---------
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
* Print test names at test time (#1343)
* Fix chrono.h year_month_weekday_last and year_month_weekday sysdays()
Bug 1: year_month_weekday_last::operator sys_days() — wrong weekday construction
The code was constructing a weekday from a raw day count using weekday(unsigned),
which treats the value as a weekday encoding (0–6). The fix uses weekday(sys_days),
which correctly accounts for the epoch being a Thursday (+4 offset).
Bug 2: year_month_weekday::operator sys_days() — same wrong weekday
construction + off-by-one in day_of_month
Same weekday(unsigned) vs weekday(sys_days) issue. Additionally, the day_of_month
calculation was missing the 1 + base — it computed a 0-based offset from day 1,
but forgot to add the 1 back when converting to an actual day number.
---------
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
* Print test names at test time (#1343)
* Modified closure to accept the callback type as a template parameter
* Modified closure to accept the callback type as a template parameter
* Applied clang-format
* Fixed C++03 compatibility
* Fixed C++03 compatibility
# Conflicts:
# include/etl/closure.h
---------
Co-authored-by: Roland Reichwein <Roland.Reichwein@bmw.de>
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
* Print test names at test time (#1343)
* Fix initializer_list use in algorithm.h
Needs to be conditional.
* Move definition of data() in iterator.h
Needs to be defined earlier.
---------
Co-authored-by: John Wellbelove <john.wellbelove@etlcpp.com>
* Fix compilation with -Wsign-conversion
For tests with GCC and Clang
Fixes https://github.com/ETLCPP/etl/issues/632
* Fix support of negative Id in type_lookup.h: type_from_id
* Fix element access arithmetic in atomic_gcc_sync.h fetch_add/fetch_sub
* Fix rounded_integral_division.h: divide_round_half_odd(): direction is always 1
* Add a inplace_function constructor with a nullptr argument
* Add unit test for nullptr construction
---------
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
* add bounds and empty checks to containers
* address code rabbit review
* correct C++11 constexpr error
* rename new constexpr macro and make it global
* rename queue specializations' exceptions
* change front() implementation in locked queue specializations
* refactor usage of CONSTEXPR and NO_EXCEPT
* expand intrusive queue tests
* introduce lock guards on locked queues
* Print test names at test time (#1343)
* revert mutex and return changes on locking queues
* finish reverting the locked queues
---------
Co-authored-by: Roland Reichwein <Roland.Reichwein@bmw.de>
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>
* Print test names at test time (#1343)
* Restrict etl::atomic for general types
Needs adding is_copy_assignable and is_move_assignable, and
adjustments to is_trivially_copyable and is_assignable
* Resolve mutable T value vs. volatile qualified methods
* Remove volatile method overloads
They are deprecated in C++20 because they don't work as users expect anyway.
MSVC hinted for this.
---------
Co-authored-by: John Wellbelove <jwellbelove@users.noreply.github.com>