Skip to content

Latest commit

 

History

History
638 lines (406 loc) · 18.9 KB

CHANGELOG.md

File metadata and controls

638 lines (406 loc) · 18.9 KB

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.

Added

  • Added format macro.
  • Added String::from_utf16.
  • Added is_full, recent_index, oldest, and oldest_index to HistoryBuffer
  • Added infallible conversions from arrays to Vec.
  • Added Vec::spare_capacity_mut.
  • Added Extend impls for Deque.
  • Added Deque::make_contiguous.
  • Added VecView, the !Sized version of Vec.
  • Added pool implementations for 64-bit architectures.
  • Added IntoIterator implementation for LinearMap

Changed

  • Changed stable_deref_trait to a platform-dependent dependency.

Fixed

  • Fixed clippy lints.
  • Fixed {arc,box,object}_pool! emitting clippy lints.
  • Fixed the list of implemented data structures in the crate docs, by adding Deque, HistoryBuffer and SortedLinkedList to the list.
  • Fixed MpMcQueue with mpmc_large feature.

v0.8.0 - 2023-11-07

Added

  • Add Clone and PartialEq implementations to HistoryBuffer.
  • Added an object pool API. see the pool::object module level doc for details
  • Add HistoryBuffer::as_slices()
  • Implemented retain for IndexMap and IndexSet.
  • Recover StableDeref trait for pool::object::Object and pool::boxed::Box.
  • Add polyfills for ESP32S2
  • Added String::from_utf8 and String::from_utf8_unchecked.

Changed

  • updated from edition 2018 to edition 2021
  • [breaking-change] IndexMap and IndexSet now require that keys implement the core::hash::Hash trait instead of the hash32::Hash (v0.2.0) trait
  • move pool::singleton::Box to the pool::box module
  • renamed pool::singleton::Pool to BoxPool and moved it into the pool::box module
  • move pool::singleton::arc::Arc to the pool::arc module
  • renamed pool::singleton::arc::Pool to ArcPool and moved it into the pool::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
  • relax trait requirements on IndexMap and IndexSet.
  • export IndexSet and IndexMap iterator types.
  • [breaking-change] export IndexMapKeys, IndexMapValues and IndexMapValuesMut iterator types.
  • [breaking-change] this crate now uses portable-atomic v1.0 instead of atomic-polyfill for emulating CAS instructions on targets where they're not natively available.
  • [breaking-change] From<&str> for String was replaced with TryFrom<&str> because the From trait must not fail.
  • [breaking-change] Renamed Cargo features
    • defmt-impl is now defmt-03
    • ufmt-impl is now ufmt
    • cas is removed, atomic polyfilling is now opt-in via the portable-atomic feature.
  • Vec::as_mut_slice is now a public method.

Fixed

  • Fixed a dropping_references warning in LinearMap.
  • 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 Init and Uninint type states from pool::singleton::Box

  • [breaking-change] removed the following pool::singleton::Box methods: freeze, forget and init

  • [breaking-change] removed the pool::singleton::arc::ArcInner type

  • [breaking-change] removed support for attributes from pool! and arc_pool!

v0.7.16 - 2022-08-09

Added

  • add more PartialEq implementations to Vec where Vec is the RHS

Changed

Fixed

  • 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

  • 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

  • IndexSet and IndexMap's default method now compile time checks that their capacity is a power of two.

v0.7.13 - 2022-05-16

Added

  • Added into_vec to BinaryHeap

v0.7.12 - 2022-05-12

Added

  • Added support for AVR architecture.
  • Add entry API to IndexMap
  • Implement IntoIterator trait for Indexmap
  • Implement FromIterator for String
  • Add first and last methods to IndexMap and IndexSet
  • Add pop_{front_back}_unchecked methods to Deque

Changed

  • Optimize the codegen of Vec::clone
  • riscv32i and riscv32imc targets unconditionally (e.g. build --no-default-features) depends on atomic-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 pool example in docstring.
  • Fixed undefined behavior in Vec::truncate(), Vec::swap_remove_unchecked(), and Hole::move_to() (internal to the binary heap implementation).
  • Fixed BinaryHeap elements are being dropped twice

v0.7.10 - 2022-01-21

Fixed

  • cargo test can now run on non-x86 hosts

Added

  • Added OldestOrdered iterator for HistoryBuffer

Changed

  • atomic-polyfill is now enabled and used for cas atomic emulation on riscv targets

v0.7.9 - 2021-12-16

Fixed

  • Fix IndexMap and IndexSet bounds
  • Make IndexSet::new() a const fn

v0.7.8 - 2021-11-11

Added

  • A span of defmt versions is now supported (0.2 and 0.3)

v0.7.7 - 2021-09-22

Fixed

  • Fixed so Pool is Sync on ARMv6

v0.7.6 - 2021-09-21

Added

  • Added ArcPool
  • Added Debug impl for Deque

Fixed

  • 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

  • Added SortedLinkedList
  • Added Vec::is_empty, one does not need to go through a slice anymore

Changed

  • Vec::pop_unchecked is now public

v0.7.4 - 2021-08-06

Added

  • Implement Default for MpMcQueue, Queue and HistoryBuffer
  • Implement PartialOrd and Ord for Vec and String

Fixed

  • Fixed comments in SPSC

v0.7.3 - 2021-07-01

Added

  • Added Deque

Changed

  • Box::freeze is deprecated due to possibility of undefined behavior.

v0.7.2 - 2021-06-30

Added

  • Added new Vec::into_array method
  • Added const-asserts to all data structures

v0.7.1 - 2021-05-23

Changed

  • MPMC is now more generic

Added

  • defmt for Vec and String

v0.7.0 - 2021-04-23

Changed

  • [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 and Debug for HistoryBuffer
  • [breaking-change] MultiCore/SingleCore and Uxx is now removed from spsc::Queue
  • [breaking-change] spsc::Queue is now usize only
  • [breaking-change] spsc::Queue now sacrifices one element for correctness (see issue #207), i.e. it creates an N - 1 sized queue instead of the old that generated an size N queue
  • [breaking-change] String has had utf8 related methods removed as this can be done via str
  • [breaking-change] No data structures implement AsSlice traits any more, now using AsRef and AsMut as they work with any size of array now

Fixed

  • Pool and MPMC now works on thumbv6m
  • IndexMap::new() is now a const-fn

v0.6.1 - 2021-03-02

Fixed

  • Security issue.

v0.6.0 - 2021-02-02

Changed

  • [breaking-change] The version of the generic-array dependency has been bumped to v0.14.2.

[v0.5.6] - 2020-09-18

Added

  • Added as_mut_vec for String
  • Added set_len for Vec
  • Performance improvements in histbuf

Fixed

  • Producer was made Send for single core applications

v0.5.5 - 2020-05-04

Added

  • Added HistoryBuffer
  • Added extra methods to Vec: from_slice, starts_with, ends_with
  • Optional ufmt support for String and Vec
  • Added pool support for bare-metal armebv7r- targets
  • Added Sync to pool for x86

v0.5.4 - 2020-04-06

Added

  • Added StableDeref implementation for pool::Box and pool::singleton::Box.

v0.5.3 - 2020-01-27

Added

  • Extend the ARMv7-A Pool support to the bare-metal armv7a- targets.

v0.5.2 - 2020-01-15

Fixed

  • 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

Changed

  • spsc::Queue iterators now implement the double ended iterator trait

Added

  • 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

  • Added armv8 support
  • Added Queue::peek
  • Added BinaryHeap::peek_mut

v0.5.0 - 2019-07-12

Added

  • Pool now implements the Sync trait when targeting ARMv7-R.

  • Most data structures can now be constructed in "const context" (e.g. static [mut] variables) using a newtype in heapless::i.

  • Pool has gained a grow_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.

Changed

  • [breaking-change] binary_heap::Kind is 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-array dependency has been bumped to v0.13.0.

v0.4.4 - 2019-05-02

Added

  • Implemented PartialEq, PartialOrd, Eq, Ord and Hash for pool::Box and pool::singleton::Box.

Fixed

  • Fixed UB in our internal, stable re-implementation of core::mem::MaybeUninit that occurred when using some of our data structures with types that implement Drop.

v0.4.3 - 2019-04-22

Added

  • Added a memory pool that's lock-free and interrupt-safe on the ARMv7-M architecture.

  • IndexMap have gained Eq and PartialEq implementations.

v0.4.2 - 2019-02-12

Added

  • All containers now implement Clone

  • spsc::Queue now implements Debug, Hash, PartialEq and Eq

  • LinearMap now implements Debug, FromIterator, IntoIter, PartialEq, Eq and Default

  • BinaryHeap now implements Debug and Default

  • String now implements FromStr, Hash, From<uxx> and Default

  • Vec now implements Hash and Default

  • A "serde" Cargo feature that when enabled adds a serde::Serialize and serde::Deserialize implementations to each collection.

v0.4.1 - 2018-12-16

Changed

  • 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. New unsafe constructors 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 Uxx trait has been removed from the public API.

v0.3.7 - 2018-08-19

Added

  • Implemented IntoIterator and FromIterator for Vec
  • ready methods to ring_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.

Changed

  • This crate now compiles on stable when both the "const-fn" and "smaller-atomics" features are disabled.

Fixed

  • The RingBuffer.len function
  • 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_unchecked an unchecked version of RingBuffer.enqueue

v0.3.4 - 2018-04-28

Added

  • BinaryHeap.pop_unchecked an unchecked version of BinaryHeap.pop

v0.3.3 - 2018-04-28

Added

  • BinaryHeap.push_unchecked an unchecked version of BinaryHeap.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 IndexMap and IndexSet.
  • A Extend implementation to Vec
  • More PartialEq implementations to Vec

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] 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

Added

  • Unchecked methods to dequeue and enqueue items into a RingBuffer via the Consumer and Producer end points.

Changed

  • RingBuffer now has a generic index type, which default to usize for backward compatibility. Changing the index type to u8 or u16 reduces the footprint of the RingBuffer but limits its maximum capacity (254 and 65534, respectively).

v0.2.6 - 2018-04-18

Added

  • A BinaryHeap implementation. BinaryHeap is a priority queue implemented with a binary heap.

v0.2.5 - 2018-04-13

Fixed

  • Dereferencing heapless::Vec no longer incurs in a bounds check.

v0.2.4 - 2018-03-12

Fixed

  • LinerMap::new is now a const fn

v0.2.3 - 2018-03-11

Added

  • A swap_remove method to Vec
  • 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

Added

  • Fixed size version of std::String

v0.2.1 - 2017-12-21

Added

  • Vec now implements both fmt::Debug, PartialEq and Eq.

  • resize and resize_default methods to Vec.

v0.2.0 - 2017-11-22

Added

  • A single producer single consumer mode to RingBuffer.

  • A truncate method to Vec.

Changed

  • [breaking-change] Both Vec::new and RingBuffer::new no longer require an initial value. The signature of new is now const fn() -> Self.

  • [breaking-change] The error type of all operations that may fail has changed from () to BufferFullError.

  • Both RingBuffer and Vec now support arrays of any size for their backup storage.

[v0.1.0] - 2017-04-27

  • Initial release