- #70 CMake compiler option macro helper
- #69
get<T>(tuple)
now available - #58 ESP-IDF logging emulation
- #68
freertos::wrapper::task::create_static
now truly callsxTaskCreateStatic
- #66
tuple.visit()
now works with references too
estd::num_put
for bools & integers now available- Supports foreign locales, encodings, 16 bit characters and more
- Compile-time tuning options
estd::variadic::values
getswhere
andcontains()
- #49 rudimentary byteswap
- #51 enhanced operators for
units
- #53
function_traits
now active
- A full
num_put
is extensive functionality. Currently unsupported are floats, comma and decimal placement
- #48 more flexible span constructor
basic_ispanbuf
and friends promoted fromexperimental
toestd
- Adding simplistic beta-quality memory pool. Located in
estd::internal::memory::pool
- Adding
make_heap
,push_heap
andpop_heap
- #40 Fixed glitch in Streambuf c++20 concept
- #39 Upgraded & cleaned out internal
detail::function
- AVR pgm support additional testing & refinement
- Dogfooding internal
units
code intochrono
support - Fixed glitch in
variadic::values
when using non-integer types
- Our heapify functions are crude and won't be as optimized as
std
. Still, it's better than nothing
- #35 Top-level CMakeLists.txt now usable
- Massive cleanup of
estd/limits.h
:
- #31 Added
estd::detail::iostream
- #34 Added
uint_least64_t
and some othernumeric_traits
related goodies
- Improved clang compatibility, especially with c++20 concepts and bipbuffer
- Fixed bug: 64-bit numeric_limits sometimes resolved to 32-bit
- #24 Switched default size_type of strings from
int16
->size_t
(can still override with policy) - #32 Fixed various tuple::visit edge cases
- #33 Fixed minor glitch with
dec
,hex
manipulator dependencies
estd::tuple
now can operate in sparse mode, meaning it can fold down to 0 size if all its members are also 0 size.- Wrapping willemt's awesome bipbuffer as
layer1::bipbuf
andlayer3::bipbuf
Early access - marked internal mainly due to naming and API flux, but passes tests:
- Added
out_buffered_stringbuf
andout_bipbuf_streambuf
wrapper for "true" streambuf operations. These sit in front of a raw streambuf for additional caching. - Core units capability - including
bytes
andpercent
and SI helpers for converting to string
- Bringing back
c_str()
to layer1 and layer2 strings - Various AVR and
estd::variadic
cleanup - Fixed bug in
to_chars
(#28)
- Formally an esp-idf component now
- Adding floating point support to
num_get
- Formalizing
estd::detail::to_chars
, an even lower-level interpretation ofto_chars
- Using CMake's
FetchContent
now to acquire unit test frameworks rather than submodules - Minor breaking change: selector disambiguation
- v1 namespace - "selector" might mean API to select or result of selecting
- v2 namespace - "selector" only means API to select
- Fixed bug where hex 'a' was encoded incorrectly during
to_chars
from_chars
doesn't yet get floating point, even thoughnum_get
does
estd::detail::string
is a more manageable way to pass strings around- Experimental/partial support for AVR PGM strings:
estd::v0::avr::pgm_string
estd::tuple
now has conversion constructorestd::variant
on AVR now usable, with caveats (see next session)- String support code got a major scrub, though still a lot of crust in there
estd::vector
no longer does naughtymemmove
with non-trivial types
estd::is_constructible
is broken on AVR. Possibly this is due to-fpermissive
default flagestd::variant
on AVR caveats:- Using
is_convertible
rather thanis_constructible
, for assignment operator, so your mileage may vary when using more exotic types and constructors is_constructible
being how it is may negatively affect other areas. So far unit tests are OK though.- move semantic seems glitchy, destructs don't seem to get called
- Using
NOTICE: License changed from MIT to APACHE 2.0
- Added
estd::variant
- Added
estd::variadic
namespacevariadic::types
for compile-time management ofclass ...Types
variadic::values
for compile-time management ofT ...Values
(overlaps withestd::index_sequence
)variadic::selector
for compile-time evaluation ofclass ...Types
variadic::visitor
for runtime visitor pattern applied toclass ...Types
- Added ESTD_VERSION macro for compile-time version query
is_base_of
no longer caught up on access modifierrs- General Arduino, AVR, c++03 compatibility
estd::optional
andestd::expected
much more robust- shares code base with
estd::variant
- when available, exceptions are now supported
- shares code base with
estd::num_get
and by extensionistream
integer parsing now returns min/max value on overflowestd::priority_queue
works on more targets
estd::variant
not functional on AVR, probably bugs in #7
- Adding
setw
andsetfill
to ostream - Adding
estd::expected
andestd::unexpected
- Fixing signed/unsigned mismatch in
out_span_streambuf
- Fixing
estd::optional
bug when usingreset
on enum type - Adding edge case optimization to
estd::tuple
(see FEATURE_ESTD_SPARSE_TUPLE)
estd::expected
:- Not well tested outside of c++11 GCC, though designed to be compatible with c++03
- Various edge cases like returning && value() not yet implemented
- int -> string conversion general quality upgrades, better guard against non-int
- Fixed bug in
estd::to_string
inhibiting it from resolving certain integers
- Fixed bug in
estd::optional
gets a revamp, some bugfixes, and a nifty bool specialization- breaking change:
basic_istream
andbasic_ostream
are now moved frominternal
todetail
namespace - AVR MPU compatibility
- Added new
estd::internal::undefined_array
. This operates nearly identical toestd::array
except that default constructor for elements is not invoked - Added non-standard
length
tonumeric_limits
which finds maximum string length for int conversions
estd::layer1::vector
no longer requires a default contructor in its managed typesestd::span
rework and quality improvement- RISC-V int -> string conversion repaired, and general platform int -> string conversion improved
- Fixed
char_traits
specialization glitch - Misc c++03 compatibility
- Undecided what a good name for
undefined_array
really should be, thus its internal status. Considering stronglyestd::uarray
- Breaking changes:
layer2::array
,layer3::array
are now deprecated and moved toestd::legacy
namespace.estd::span
is a much better fit
- FreeRTOS:
estd::freertos::timer
estd::freertos::event_groups
- CMake: INTERFACE mode fixed, general cleanup, experimental
install
capability estd::freertos::queue
- aligning isr and non-isr send signatures (breaking change)
- adding convenience max-duration/timeout methods
estd::basic_istream
now reflects numeric parsing status in good() and has associated bool operator
- FreeRTOS:
estd::freertos::timer
static mode lacks proper unit test
- CMake:
install
capability not well tested
- Raspberry Pi Pico now tested and supported
- Includes lightweight
estd::basic_pico_ostream
- Includes experimental
chrono
support
- Includes lightweight
- Added official FreeRTOS support:
estd::freertos::mutex
estd::freertos::counting_semaphore
estd::freertos::queue
- above has static and dynamic allocation variants
- aliases of above to
estd::mutex
andestd::counting_semaphore
- Added low level variant of
std::function
:estd::detail::function
- estd::span now has default constructor
- CMake project name now
estd
rather thanestd_lib
- The latter still exists as an alias for legacy compatibility
- Added also
malachi-iot::estd
alias in case of collisions
- estd::priority_queue now can use instanced
Compare
- FreeRTOS support:
estd::freertos::recursive_mutex
not well tested or implementedestd::freertos::mutex
binary mode is confusing and might get removed. Usebinary_semaphore
- chrono:
- Added
hh_mm_ss
- Added
- ratio:
ratio
now auto reduces itstype
, as called for by std specratio_add
now presentratio_divide
andratio_multiply
auto reduce as briefl mentioned by std spec
- c++03 flavor of
tuple
now available - type_traits: added
underlying_type
andtype_identity
ratio_divide
andratio_multiply
are now aliased out for compilers that support the feature. The non aliased specialized structs are moved now todetail
namespace, which is a breaking change for c++03 targets.tuple
andpair
cleanup and minor improvements- chrono: general cleanup
platformio
unity tests working again- Minor c++20 compatibility
- Adding
remove_cv_t
and friends
chrono_literals
operators:- disabling on CLang as it generates warnings and doesn't compile right
- was returning
seconds
incorrectly instead ofmilliseconds
, etc.
vector
:- Fixed deep
layer1::vector
glitch which sometimes brokeemplace
- Fixed bug which disallowed resizing up to maximum layer1 size
- Fixed deep
- An iterated bool version of num_get is now available, called
bool_get
- Adding more bits and pieces to chrono: + operator, != operator and literals
- Fixed last-character bug in
internal::chooser
- Fixed
ostream
integer output glitch on m0
internal::chooser
very much a work in progress and only reliable for the limited use cases it's currently employed into
internal::basic_istream
can be configured in blocking or non blocking mode viaTPolicy
internal::flagged_istream
now available to makeTPolicy
interaction easier- istream and ostream wrappers for Arduino's
Stream
andPrint
classes - Groundwork for compile-time locale support, including
num_get
,moneypunct
andctype
- num_get is supported by a class named
iterated::num_get
which is, as the name suggests, a non blocking state machine
- num_get is supported by a class named
- Extraction operator >> now supports int types
istreambuf_iterator
has elevated from experimental to available API
- C++0x compatibility, especially where streambuf/iostreams are involved
- unit test under Windows (CLion) fixed
- More granular POSIX support for scenarios which only have partial POSIX capability (MINGW)
- istream:
- Blocking support is new and is likely to have deficiencies
- Arduino wrapper only works in blocking mode
- POSIX: Too much feature flagging depends on the POSIX flags, erroneous and confusing
- locale:
- support exists at this time to support
num_get
int processing specifically. It is very much not a complete locale implementation. - changing the locale on an istream is difficult at the moment
- support exists at this time to support
Although istreams can now be configured as blocking or nonblocking, underlying streambufs continue to be nonblocking. At some point we'll probably need a blocking streambuf paradigm as well, but so far we've avoided it.
Custom locales actually work, but slightly fiddly at the moment.
estd::char_traits
can now optionally overridestd::char_traits
- Vastly reduced stack usage in relation to
pos_type
- Finagled platformio package generation into behaving again
- Maintenance to test code overall
- platformio compilation of tests doesn't treat
estdlib
as a formal lib, instead referring to it assrc
Many updates since 0.1.7:
- streambufs now cleaned up and useful
- further target compatibility: VisualDSP/C++98, esp-idf, platformio
- estd::priority_queue added
- rounding out to_chars, adding in over-base-10 compatibility
- adding in rudimentary estd::num_get implementation
- better STD lib detection in the first place
Known issues:
- C++98 targets don't compile with some of the new queue code. I'm not sure anyone cares at this point
- estd::priority_queue does depend on std::push_heap (no dynamic allocation, but std lib required)
- Big stack usage on esp32 streambuf relating to
pos_type