18 KiB
Change Log
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
Unreleased
v0.8.0 - 2023-11-07
Added
- Add
CloneandPartialEqimplementations toHistoryBuffer. - Added an object pool API. see the
pool::objectmodule level doc for details - Add
HistoryBuffer::as_slices() - Implemented
retainforIndexMapandIndexSet. - Recover
StableDereftrait forpool::object::Objectandpool::boxed::Box. - Add polyfills for ESP32S2
- Added
String::from_utf8andString::from_utf8_unchecked.
Changed
- updated from edition 2018 to edition 2021
- [breaking-change]
IndexMapandIndexSetnow require that keys implement thecore::hash::Hashtrait instead of thehash32::Hash(v0.2.0) trait - move
pool::singleton::Boxto thepool::boxmodule - renamed
pool::singleton::PooltoBoxPooland moved it into thepool::boxmodule - move
pool::singleton::arc::Arcto thepool::arcmodule - renamed
pool::singleton::arc::PooltoArcPooland moved it into thepool::arcmodule - [breaking-change] changed the target support of memory pool API to only support 32-bit x86 and a
subset of ARM targets. See the module level documentation of the
poolmodule for details - relax trait requirements on
IndexMapandIndexSet. - export
IndexSetandIndexMapiterator types. - [breaking-change] export
IndexMapKeys,IndexMapValuesandIndexMapValuesMutiterator types. - [breaking-change] this crate now uses
portable-atomicv1.0 instead ofatomic-polyfillfor emulating CAS instructions on targets where they're not natively available. - [breaking-change]
From<&str>forStringwas replaced withTryFrom<&str>because theFromtrait must not fail. - [breaking-change] Renamed Cargo features
defmt-implis nowdefmt-03ufmt-implis nowufmtcasis removed, atomic polyfilling is now opt-in via theportable-atomicfeature.
Vec::as_mut_sliceis now a public method.
Fixed
- Fixed a
dropping_referenceswarning inLinearMap. - Fixed IndexMap entry API returning wrong slot after an insert on vacant entry. (#360)
Removed
-
[breaking-change] this crate no longer has a Minimum Supported Rust Version (MSRV) guarantee and should be used with the latest stable version of the Rust toolchain.
-
[breaking-change] removed the
InitandUnininttype states frompool::singleton::Box -
[breaking-change] removed the following
pool::singleton::Boxmethods:freeze,forgetandinit -
[breaking-change] removed the
pool::singleton::arc::ArcInnertype -
[breaking-change] removed support for attributes from
pool!andarc_pool!
v0.7.16 - 2022-08-09
Added
- add more
PartialEqimplementations toVecwhereVecis the RHS
Changed
Fixed
- clarify in the docs that the capacity
heapless::Stringis in bytes, not characters - Fixed some broken links in the documentation.
v0.7.15 - 2022-07-05
Added
- Added
Vec::insert(index, element) - Added
Vec::remove(index) - Added
Vec::retain(f) - Added
Vec::retain_mut(f)
v0.7.14 - 2022-06-15
Added
- Added support for AVR architecture.
Fixed
IndexSetandIndexMap'sdefaultmethod now compile time checks that their capacity is a power of two.
v0.7.13 - 2022-05-16
Added
- Added
into_vectoBinaryHeap
v0.7.12 - 2022-05-12
Added
- Added support for AVR architecture.
- Add
entryAPI toIndexMap - Implement
IntoIteratortrait forIndexmap - Implement
FromIteratorforString - Add
firstandlastmethods toIndexMapandIndexSet - Add
pop_{front_back}_uncheckedmethods toDeque
Changed
- Optimize the codegen of
Vec::clone riscv32iandriscv32imctargets unconditionally (e.g.build --no-default-features) depends onatomic-polyfill
Fixed
- Inserting an item that replaces an already present item will no longer fail with an error
v0.7.11 - 2022-05-09
Fixed
- Fixed
poolexample in docstring. - Fixed undefined behavior in
Vec::truncate(),Vec::swap_remove_unchecked(), andHole::move_to()(internal to the binary heap implementation). - Fixed
BinaryHeapelements are being dropped twice
v0.7.10 - 2022-01-21
Fixed
cargo testcan now run on non-x86hosts
Added
- Added
OldestOrderediterator forHistoryBuffer
Changed
atomic-polyfillis now enabled and used forcasatomic emulation onriscvtargets
v0.7.9 - 2021-12-16
Fixed
- Fix
IndexMapandIndexSetbounds - Make
IndexSet::new()aconst fn
v0.7.8 - 2021-11-11
Added
- A span of
defmtversions is now supported (0.2and0.3)
v0.7.7 - 2021-09-22
Fixed
- Fixed so
PoolisSyncon ARMv6
v0.7.6 - 2021-09-21
Added
- Added
ArcPool - Added
Debugimpl forDeque
Fixed
- ZSTs in
Poolnow works correctly - Some MIRI errors were resolved
- Allow
pool!on thumbv6 - Fixed possible UB in
Poolon x86
v0.7.5 - 2021-08-16
Added
- Added
SortedLinkedList - Added
Vec::is_empty, one does not need to go through a slice anymore
Changed
Vec::pop_uncheckedis now public
v0.7.4 - 2021-08-06
Added
- Implement
DefaultforMpMcQueue,QueueandHistoryBuffer - Implement
PartialOrdandOrdforVecandString
Fixed
- Fixed comments in SPSC
v0.7.3 - 2021-07-01
Added
- Added
Deque
Changed
Box::freezeis deprecated due to possibility of undefined behavior.
v0.7.2 - 2021-06-30
Added
- Added new
Vec::into_arraymethod - Added const-asserts to all data structures
v0.7.1 - 2021-05-23
Changed
- MPMC is now more generic
Added
defmtforVecandString
v0.7.0 - 2021-04-23
Changed
- [breaking-change] Converted all data structures to use the
const genericsMVP - [breaking-change]
HistoryBufferis now working with const constructors and non-Copydata - [breaking-change]
HistoryBuffer::as_sliceand others now only return initialized values - Added missing
Deref,AsRefandDebugforHistoryBuffer - [breaking-change]
MultiCore/SingleCoreandUxxis now removed fromspsc::Queue - [breaking-change]
spsc::Queueis nowusizeonly - [breaking-change]
spsc::Queuenow sacrifices one element for correctness (see issue #207), i.e. it creates anN - 1sized queue instead of the old that generated an sizeNqueue - [breaking-change]
Stringhas hadutf8related methods removed as this can be done viastr - [breaking-change] No data structures implement
AsSlicetraits any more, now usingAsRefandAsMutas they work with any size of array now
Fixed
PoolandMPMCnow works onthumbv6mIndexMap::new()is now aconst-fn
v0.6.1 - 2021-03-02
Fixed
- Security issue.
v0.6.0 - 2021-02-02
Changed
- [breaking-change] The version of the
generic-arraydependency has been bumped to v0.14.2.
[v0.5.6] - 2020-09-18
Added
- Added
as_mut_vecforString - Added
set_lenforVec - Performance improvements in
histbuf
Fixed
Producerwas madeSendfor single core applications
v0.5.5 - 2020-05-04
Added
- Added
HistoryBuffer - Added extra methods to
Vec:from_slice,starts_with,ends_with - Optional
ufmtsupport forStringandVec - Added
poolsupport for bare-metalarmebv7r-targets - Added Sync to
poolforx86
v0.5.4 - 2020-04-06
Added
- Added
StableDerefimplementation forpool::Boxandpool::singleton::Box.
v0.5.3 - 2020-01-27
Added
- Extend the ARMv7-A
Poolsupport to the bare-metalarmv7a-targets.
v0.5.2 - 2020-01-15
Fixed
- Fixed incorrect overflow behavior in computation of capacities
- Fixed edge case in
mpmc::Queue::dqueuethat led to an infinite loop - IndexMap and LinerMap are now deserialized as maps, rather than as sequences
- Fixed compilation of this crates on built-in targets that don't have CAS instructions
Changed
spsc::Queueiterators now implement the double ended iterator trait
Added
-
opt-out
casfeature to disable parts of the API that use CAS instructions. Useful if using a custom (i.e. not built-in) rustc target that does not have CAS instructions. -
singleton
Poolsupport on ARMv7-A devices
v0.5.1 - 2019-08-29
Added
- Added armv8 support
- Added
Queue::peek - Added
BinaryHeap::peek_mut
v0.5.0 - 2019-07-12
Added
-
Poolnow implements theSynctrait when targeting ARMv7-R. -
Most data structures can now be constructed in "const context" (e.g.
static [mut]variables) using a newtype inheapless::i. -
Poolhas gained agrow_exactmethod to more efficiently use statically allocated memory. -
The
pool!macro now accepts attributes. -
mpmc::Q*a family of fixed capacity multiple-producer multiple-consumer lock-free queues.
Changed
- [breaking-change]
binary_heap::Kindis now a sealed trait.
Removed
-
[breaking-change] The "smaller-atomics" feature has been removed. It is now always enabled.
-
[breaking-change] The "min-const-fn" feature has been removed. It is now always enabled.
-
[breaking-change] The MSRV has been bumped to Rust 1.36.0.
-
[breaking-change] The version of the
generic-arraydependency has been bumped to v0.13.0.
v0.4.4 - 2019-05-02
Added
- Implemented
PartialEq,PartialOrd,Eq,OrdandHashforpool::Boxandpool::singleton::Box.
Fixed
- Fixed UB in our internal, stable re-implementation of
core::mem::MaybeUninitthat occurred when using some of our data structures with types that implementDrop.
v0.4.3 - 2019-04-22
Added
-
Added a memory pool that's lock-free and interrupt-safe on the ARMv7-M architecture.
-
IndexMaphave gainedEqandPartialEqimplementations.
v0.4.2 - 2019-02-12
Added
-
All containers now implement
Clone -
spsc::Queuenow implementsDebug,Hash,PartialEqandEq -
LinearMapnow implementsDebug,FromIterator,IntoIter,PartialEq,EqandDefault -
BinaryHeapnow implementsDebugandDefault -
Stringnow implementsFromStr,Hash,From<uxx>andDefault -
Vecnow implementsHashandDefault -
A "serde" Cargo feature that when enabled adds a
serde::Serializeandserde::Deserializeimplementations to each collection.
v0.4.1 - 2018-12-16
Changed
- Add a new type parameter to
spsc::Queuethat indicates whether the queue is only single-core safe, or multi-core safe. By default the queue is multi-core safe; this preserves the current semantics. Newunsafeconstructors have been added to create the single-core variant.
v0.4.0 - 2018-10-19
Changed
-
[breaking-change] All Cargo features are disabled by default. This crate now compiles on stable by default.
-
[breaking-change] RingBuffer has been renamed to spsc::Queue. The ring_buffer module has been renamed to spsc.
-
[breaking-change] The bounds on spsc::Queue have changed.
Removed
- [breaking-change] The sealed
Uxxtrait has been removed from the public API.
v0.3.7 - 2018-08-19
Added
- Implemented
IntoIteratorandFromIteratorforVec readymethods toring_buffer::{Consumer,Producer}- An opt-out "const-fn" Cargo feature that turns
constfunctions into normal functions when disabled. - An opt-out "smaller-atomics" Cargo feature that removes the ability to shrink the size of
RingBufferwhen disabled.
Changed
- This crate now compiles on stable when both the "const-fn" and "smaller-atomics" features are disabled.
Fixed
- The
RingBuffer.lenfunction - Compilation on recent nightlies
v0.3.6 - 2018-05-04
Fixed
- The capacity of
RingBuffer. It should be the requested capacity plus not twice that plus one.
v0.3.5 - 2018-05-03
Added
RingBuffer.enqueue_uncheckedan unchecked version ofRingBuffer.enqueue
v0.3.4 - 2018-04-28
Added
BinaryHeap.pop_uncheckedan unchecked version ofBinaryHeap.pop
v0.3.3 - 2018-04-28
Added
BinaryHeap.push_uncheckedan unchecked version ofBinaryHeap.push
v0.3.2 - 2018-04-27
Added
- A re-export of
generic_array::ArrayLength, for convenience.
v0.3.1 - 2018-04-23
Added
- Fixed capacity implementations of
IndexMapandIndexSet. - A
Extendimplementation toVec - More
PartialEqimplementations toVec
v0.3.0 - 2018-04-22
Changed
-
[breaking-change] The capacity of all data structures must now be specified using type level integers (cf.
typenum). See documentation for details. -
[breaking-change]
BufferFullErrorhas been removed in favor of (a) returning ownership of the item that couldn't be added to the collection (cf.Vec.push), or (b) returning the unit type when the argument was not consumed (cf.Vec.extend_from_slice).
v0.2.7 - 2018-04-20
Added
- Unchecked methods to dequeue and enqueue items into a
RingBuffervia theConsumerandProducerend points.
Changed
RingBuffernow has a generic index type, which default tousizefor backward compatibility. Changing the index type tou8oru16reduces the footprint of theRingBufferbut limits its maximum capacity (254 and 65534, respectively).
v0.2.6 - 2018-04-18
Added
- A
BinaryHeapimplementation.BinaryHeapis a priority queue implemented with a binary heap.
v0.2.5 - 2018-04-13
Fixed
- Dereferencing
heapless::Vecno longer incurs in a bounds check.
v0.2.4 - 2018-03-12
Fixed
LinerMap::newis now a const fn
v0.2.3 - 2018-03-11
Added
- A
swap_removemethod toVec - A
LinearMapimplementation.LinearMapis a map / dict backed by an array and that performs lookups via linear search.
v0.2.2 - 2018-03-01
Added
- Fixed size version of
std::String
v0.2.1 - 2017-12-21
Added
-
Vecnow implements bothfmt::Debug,PartialEqandEq. -
resizeandresize_defaultmethods toVec.
v0.2.0 - 2017-11-22
Added
-
A single producer single consumer mode to
RingBuffer. -
A
truncatemethod toVec.
Changed
-
[breaking-change] Both
Vec::newandRingBuffer::newno longer require an initial value. The signature ofnewis nowconst fn() -> Self. -
[breaking-change] The error type of all operations that may fail has changed from
()toBufferFullError. -
Both
RingBufferandVecnow support arrays of any size for their backup storage.
[v0.1.0] - 2017-04-27
- Initial release