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.
- Add
Clone
andPartialEq
implementations toHistoryBuffer
. - Added an object pool API. see the
pool::object
module level doc for details
-
[breaking-change]
IndexMap
andIndexSet
now require that keys implement thecore::hash::Hash
trait instead of thehash32::Hash
(v0.2.0) trait -
move
pool::singleton::Box
to thepool::box
module -
renamed
pool::singleton::Pool
toBoxPool
and moved it into thepool::box
module -
move
pool::singleton::arc::Arc
to thepool::arc
module -
renamed
pool::singleton::arc::Pool
toArcPool
and moved it into thepool::arc
module -
[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
pool
module for details -
[breaking-change] this crate now depends on
atomic-polyfill
v1.0.1, meaning that targets that require a polyfill need acritical-section
v1.x.x implementation.
-
[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
Init
andUninint
type states frompool::singleton::Box
-
[breaking-change] removed the following
pool::singleton::Box
methods:freeze
,forget
andinit
-
[breaking-change] removed the
pool::singleton::arc::ArcInner
type -
[breaking-change] removed support for attributes from
pool!
andarc_pool!
v0.7.16 - 2022-08-09
- add more
PartialEq
implementations toVec
whereVec
is the RHS
- clarify in the docs that the capacity
heapless::String
is in bytes, not characters - Fixed some broken links in the documentation.
v0.7.15 - 2022-07-05
- 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 support for AVR architecture.
IndexSet
andIndexMap
'sdefault
method now compile time checks that their capacity is a power of two.
v0.7.13 - 2022-05-16
- Added
into_vec
toBinaryHeap
v0.7.12 - 2022-05-12
- Added support for AVR architecture.
- Add
entry
API toIndexMap
- Implement
IntoIterator
trait forIndexmap
- Implement
FromIterator
forString
- Add
first
andlast
methods toIndexMap
andIndexSet
- Add
pop_{front_back}_unchecked
methods toDeque
- Optimize the codegen of
Vec::clone
riscv32i
andriscv32imc
targets unconditionally (e.g.build --no-default-features
) depends onatomic-polyfill
- Inserting an item that replaces an already present item will no longer fail with an error
v0.7.11 - 2022-05-09
- Fixed
pool
example in docstring. - Fixed undefined behavior in
Vec::truncate()
,Vec::swap_remove_unchecked()
, andHole::move_to()
(internal to the binary heap implementation). - Fixed
BinaryHeap
elements are being dropped twice
v0.7.10 - 2022-01-21
cargo test
can now run on non-x86
hosts
- Added
OldestOrdered
iterator forHistoryBuffer
atomic-polyfill
is now enabled and used forcas
atomic emulation onriscv
targets
v0.7.9 - 2021-12-16
- Fix
IndexMap
andIndexSet
bounds - Make
IndexSet::new()
aconst fn
v0.7.8 - 2021-11-11
- A span of
defmt
versions is now supported (0.2
and0.3
)
v0.7.7 - 2021-09-22
- Fixed so
Pool
isSync
on ARMv6
v0.7.6 - 2021-09-21
- Added
ArcPool
- Added
Debug
impl forDeque
- ZSTs in
Pool
now works correctly - Some MIRI errors were resolved
- Allow
pool!
on thumbv6 - Fixed possible UB in
Pool
on x86
v0.7.5 - 2021-08-16
- Added
SortedLinkedList
- Added
Vec::is_empty
, one does not need to go through a slice anymore
Vec::pop_unchecked
is now public
v0.7.4 - 2021-08-06
- Implement
Default
forMpMcQueue
,Queue
andHistoryBuffer
- Implement
PartialOrd
andOrd
forVec
andString
- Fixed comments in SPSC
v0.7.3 - 2021-07-01
- Added
Deque
Box::freeze
is deprecated due to possibility of undefined behavior.
v0.7.2 - 2021-06-30
- Added new
Vec::into_array
method - Added const-asserts to all data structures
v0.7.1 - 2021-05-23
- MPMC is now more generic
defmt
forVec
andString
v0.7.0 - 2021-04-23
- [breaking-change] Converted all data structures to use the
const generics
MVP - [breaking-change]
HistoryBuffer
is now working with const constructors and non-Copy
data - [breaking-change]
HistoryBuffer::as_slice
and others now only return initialized values - Added missing
Deref
,AsRef
andDebug
forHistoryBuffer
- [breaking-change]
MultiCore
/SingleCore
andUxx
is now removed fromspsc::Queue
- [breaking-change]
spsc::Queue
is nowusize
only - [breaking-change]
spsc::Queue
now sacrifices one element for correctness (see issue #207), i.e. it creates anN - 1
sized queue instead of the old that generated an sizeN
queue - [breaking-change]
String
has hadutf8
related methods removed as this can be done viastr
- [breaking-change] No data structures implement
AsSlice
traits any more, now usingAsRef
andAsMut
as they work with any size of array now
Pool
andMPMC
now works onthumbv6m
IndexMap::new()
is now aconst-fn
v0.6.1 - 2021-03-02
- Security issue.
v0.6.0 - 2021-02-02
- [breaking-change] The version of the
generic-array
dependency has been bumped to v0.14.2.
- Added
as_mut_vec
forString
- Added
set_len
forVec
- Performance improvements in
histbuf
Producer
was madeSend
for single core applications
v0.5.5 - 2020-05-04
- Added
HistoryBuffer
- Added extra methods to
Vec
:from_slice
,starts_with
,ends_with
- Optional
ufmt
support forString
andVec
- Added
pool
support for bare-metalarmebv7r-
targets - Added Sync to
pool
forx86
v0.5.4 - 2020-04-06
- Added
StableDeref
implementation forpool::Box
andpool::singleton::Box
.
v0.5.3 - 2020-01-27
- Extend the ARMv7-A
Pool
support to the bare-metalarmv7a-
targets.
v0.5.2 - 2020-01-15
- Fixed incorrect overflow behavior in computation of capacities
- Fixed edge case in
mpmc::Queue::dqueue
that 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
spsc::Queue
iterators now implement the double ended iterator trait
-
opt-out
cas
feature 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
Pool
support on ARMv7-A devices
v0.5.1 - 2019-08-29
- Added armv8 support
- Added
Queue::peek
- Added
BinaryHeap::peek_mut
v0.5.0 - 2019-07-12
-
Pool
now implements theSync
trait when targeting ARMv7-R. -
Most data structures can now be constructed in "const context" (e.g.
static [mut]
variables) using a newtype inheapless::i
. -
Pool
has gained agrow_exact
method 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.
- [breaking-change]
binary_heap::Kind
is now a sealed trait.
-
[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-array
dependency has been bumped to v0.13.0.
v0.4.4 - 2019-05-02
- Implemented
PartialEq
,PartialOrd
,Eq
,Ord
andHash
forpool::Box
andpool::singleton::Box
.
- Fixed UB in our internal, stable re-implementation of
core::mem::MaybeUninit
that occurred when using some of our data structures with types that implementDrop
.
v0.4.3 - 2019-04-22
-
Added a memory pool that's lock-free and interrupt-safe on the ARMv7-M architecture.
-
IndexMap
have gainedEq
andPartialEq
implementations.
v0.4.2 - 2019-02-12
-
All containers now implement
Clone
-
spsc::Queue
now implementsDebug
,Hash
,PartialEq
andEq
-
LinearMap
now implementsDebug
,FromIterator
,IntoIter
,PartialEq
,Eq
andDefault
-
BinaryHeap
now implementsDebug
andDefault
-
String
now implementsFromStr
,Hash
,From<uxx>
andDefault
-
Vec
now implementsHash
andDefault
-
A "serde" Cargo feature that when enabled adds a
serde::Serialize
andserde::Deserialize
implementations to each collection.
v0.4.1 - 2018-12-16
- Add a new type parameter to
spsc::Queue
that 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. Newunsafe
constructors have been added to create the single-core variant.
v0.4.0 - 2018-10-19
-
[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.
- [breaking-change] The sealed
Uxx
trait has been removed from the public API.
v0.3.7 - 2018-08-19
- Implemented
IntoIterator
andFromIterator
forVec
ready
methods toring_buffer::{Consumer,Producer}
- An opt-out "const-fn" Cargo feature that turns
const
functions into normal functions when disabled. - An opt-out "smaller-atomics" Cargo feature that removes the ability to shrink the size of
RingBuffer
when disabled.
- This crate now compiles on stable when both the "const-fn" and "smaller-atomics" features are disabled.
- The
RingBuffer.len
function - Compilation on recent nightlies
v0.3.6 - 2018-05-04
- The capacity of
RingBuffer
. It should be the requested capacity plus not twice that plus one.
v0.3.5 - 2018-05-03
RingBuffer.enqueue_unchecked
an unchecked version ofRingBuffer.enqueue
v0.3.4 - 2018-04-28
BinaryHeap.pop_unchecked
an unchecked version ofBinaryHeap.pop
v0.3.3 - 2018-04-28
BinaryHeap.push_unchecked
an unchecked version ofBinaryHeap.push
v0.3.2 - 2018-04-27
- A re-export of
generic_array::ArrayLength
, for convenience.
v0.3.1 - 2018-04-23
- Fixed capacity implementations of
IndexMap
andIndexSet
. - A
Extend
implementation toVec
- More
PartialEq
implementations toVec
v0.3.0 - 2018-04-22
-
[breaking-change] The capacity of all data structures must now be specified using type level integers (cf.
typenum
). See documentation for details. -
[breaking-change]
BufferFullError
has 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
- Unchecked methods to dequeue and enqueue items into a
RingBuffer
via theConsumer
andProducer
end points.
RingBuffer
now has a generic index type, which default tousize
for backward compatibility. Changing the index type tou8
oru16
reduces the footprint of theRingBuffer
but limits its maximum capacity (254 and 65534, respectively).
v0.2.6 - 2018-04-18
- A
BinaryHeap
implementation.BinaryHeap
is a priority queue implemented with a binary heap.
v0.2.5 - 2018-04-13
- Dereferencing
heapless::Vec
no longer incurs in a bounds check.
v0.2.4 - 2018-03-12
LinerMap::new
is now a const fn
v0.2.3 - 2018-03-11
- A
swap_remove
method toVec
- A
LinearMap
implementation.LinearMap
is a map / dict backed by an array and that performs lookups via linear search.
v0.2.2 - 2018-03-01
- Fixed size version of
std::String
v0.2.1 - 2017-12-21
-
Vec
now implements bothfmt::Debug
,PartialEq
andEq
. -
resize
andresize_default
methods toVec
.
v0.2.0 - 2017-11-22
-
A single producer single consumer mode to
RingBuffer
. -
A
truncate
method toVec
.
-
[breaking-change] Both
Vec::new
andRingBuffer::new
no longer require an initial value. The signature ofnew
is nowconst fn() -> Self
. -
[breaking-change] The error type of all operations that may fail has changed from
()
toBufferFullError
. -
Both
RingBuffer
andVec
now support arrays of any size for their backup storage.
- Initial release