PackageTrack
Sign in Get early access

sized-chunks

Efficient sized chunk datatypes

0.7.0 45M downloads/mo #1302 most downloaded on crates.io bodil/sized-chunks

What this package is like to depend on

Last release 4 years ago

no release in 18 months

Release timing varies

gaps range from 2 weeks to 13 months

Nearly every release is documented

notes for 20 of 20 stable releases

2 versions withdrawn

withdrawn after publishing

8 years old

22 releases · first in 2019

0 releases in the last 12 months

see the full history below

Release timeline

22 releases · Feb 2019 to Apr 2022
2020 2021 2022 2023 2024 2025 2026
Release Pre-release Withdrawn

Releases

latest 22
  1. 0.7.0 29 Apr 2022
    Release notes

    CHANGED

    • Switched to const generics instead of the typenum crate. Rust 1.51 or later is required.
    Open source →
    Release notes

    CHANGED

    • Switched to const generics instead of the typenum crate. Rust 1.51 or later is required.
    Open source →
  2. 0.6.5 16 Apr 2021
    Release notes

    FIXED

    • When InlineArray cannot hold any values because of misalignment, report it as capacity 0 instead of panicking at runtime. (#22)
    Open source →
    Release notes

    FIXED

    • When InlineArray cannot hold any values because of misalignment, report it as capacity 0 instead of panicking at runtime. (#22)
    Open source →
  3. 0.6.4 17 Feb 2021
    Release notes

    FIXED

    • InlineArray can be used in recursive types again.

    CHANGED

    • InlineArray::new() now panics when it can't store elements with large alignment (this was UB prior to 0.6.3). Alignments of usize and smaller are always supported. Larger alignments are supported if the capacity-providing type has sufficient alignment.
    Open source →
    Release notes

    FIXED

    • InlineArray can be used in recursive types again.

    CHANGED

    • InlineArray::new() now panics when it can't store elements with large alignment (this was UB prior to 0.6.3). Alignments of usize and smaller are always supported. Larger alignments are supported if the capacity-providing type has sufficient alignment.
    Open source →
  4. 0.6.3 14 Feb 2021
    Release notes

    FIXED

    • Multiple soundness fixes: InlineArray handles large alignment, panic safety in Chunk's clone and from_iter, capacity checks in unit(), pair() and from().
    • InlineArray can now handle zero sized values. This relies on conditionals in const functions, a feature which was introduced in Rust 1.46.0, which means this is now the minimum Rust version this crate will work on.
    Open source →
    Release notes

    FIXED

    • Multilple soundness fixes: InlineArray handles large alignment, panic safety in Chunk's clone and from_iter, capacity checks in unit(), pair() and from().
    • InlineArray can now handle zero sized values. This relies on conditionals in const functions, a feature which was introduced in Rust 1.46.0, which means this is now the minimum Rust version this crate will work on.
    Open source →
  5. 0.6.2 15 May 2020
    Release notes

    FIXED

    • This release exists for no other purpose than to bump the refpool optional dependency.
    Open source →
    Release notes

    FIXED

    • This release exists for no other purpose than to bump the refpool optional dependency.
    Open source →
  6. 0.6.1 26 Mar 2020
    Release notes

    ADDED

    • The crate now has a std feature flag, which is on by default, and will make the crate no_std if disabled.

    FIXED

    • Fixed a compilation error if you had the arbitrary feature flag enabled without the ringbuffer flag.
    Open source →
    Release notes

    ADDED

    • The crate now has a std feature flag, which is on by default, and will make the crate no_std if disabled.

    FIXED

    • Fixed a compilation error if you had the arbitrary feature flag enabled without the ringbuffer flag.
    Open source →
  7. 0.6.0 24 Mar 2020
    Release notes

    CHANGED

    • RingBuffer and its accompanying slice types Slice and SliceMut now implement Array and ArrayMut from array-ops, giving them most of the methods that would be available on primitive slice types and cutting down on code duplication in the implementation, but at the price of having to pull Array et al into scope when you need them. Because this means adding a dependency to array-ops, RingBuffer has now been moved behind the ringbuffer feature flag. Chunk and InlineArray don't and won't implement Array, because they are both able to implement Deref<[A]>, which provides the same functionality more efficiently.

    ADDED

    • The insert_from and insert_ordered methods recently added to Chunk have now also been added to RingBuffer.
    • RingBuffer's Slice and SliceMut now also have the three binary_search methods regular slices have.
    • SparseChunk, RingBuffer, Slice and SliceMut now have unsafe get_unchecked and get_unchecked_mut methods.
    • PartialEq implementations allowing you to compare RingBuffers, Slices and SliceMuts interchangeably have been added.

    FIXED

    • Fixed an aliasing issue in RingBuffer's mutable iterator, as uncovered by Miri. Behind the scenes, the full non-fuzzing unit test suite is now able to run on Miri without crashing it (after migrating the last Proptest tests away from the test suite into the fuzz targets), and this has been included in its CI build. (#6)
    Open source →
    Release notes

    CHANGED

    • RingBuffer and its accompanying slice types Slice and SliceMut now implement Array and ArrayMut from array-ops, giving them most of the methods that would be available on primitive slice types and cutting down on code duplication in the implementation, but at the price of having to pull Array et al into scope when you need them. Because this means adding a dependency to array-ops, RingBuffer has now been moved behind the ringbuffer feature flag. Chunk and InlineArray don't and won't implement Array, because they are both able to implement Deref<[A]>, which provides the same functionality more efficiently.

    ADDED

    • The insert_from and insert_ordered methods recently added to Chunk have now also been added to RingBuffer.
    • RingBuffer's Slice and SliceMut now also have the three binary_search methods regular slices have.
    • SparseChunk, RingBuffer, Slice and SliceMut now have unsafe get_unchecked and get_unchecked_mut methods.
    • PartialEq implementations allowing you to compare RingBuffers, Slices and SliceMuts interchangeably have been added.

    FIXED

    • Fixed an aliasing issue in RingBuffer's mutable iterator, as uncovered by Miri. Behind the scenes, the full non-fuzzing unit test suite is now able to run on Miri without crashing it (after migrating the last Proptest tests away from the test suite into the fuzz targets), and this has been included in its CI build. (#6)
    Open source →
  8. 0.5.3 11 Mar 2020
    Release notes

    FIXED

    • Debug only assertions made it into the previous release by accident, and this change has been reverted. (#7)
    Open source →
    Release notes

    FIXED

    • Debug only assertions made it into the previous release by accident, and this change has been reverted. (#7)
    Open source →
  9. 0.5.2 10 Mar 2020 withdrawn
    Release notes

    ADDED

    • Chunk now has an insert_from method for inserting multiple values at an index in one go.
    • Chunk now also has an insert_ordered method for inserting values into a sorted chunk.
    • SparseChunk now has the methods option_iter(), option_iter_mut() and option_drain() with their corresponding iterators to iterate over a chunk as if it were an array of Options.
    • Arbitrary implementations for all data types have been added behind the arbitrary feature flag.
    Open source →
    Release notes

    ADDED

    • Chunk now has an insert_from method for inserting multiple values at an index in one go.
    • Chunk now also has an insert_ordered method for inserting values into a sorted chunk.
    • SparseChunk now has the methods option_iter(), option_iter_mut() and option_drain() with their corresponding iterators to iterate over a chunk as if it were an array of Options.
    • Arbitrary implementations for all data types have been added behind the arbitrary feature flag.

    FIXED

    • Internal consistency assertions are now only performed in debug mode (like with debug_assert!). This means sized_chunks will no longer cause panics in release mode when you do things like pushing to a full chunk, but do bad and undefined things instead. It also means a very slight performance gain.
    Open source →
  10. 0.5.1 12 Dec 2019
    Release notes

    ADDED

    • PoolDefault and PoolClone implementations, from the refpool crate, are available for Chunk, SparseChunk and RingBuffer, behind the refpool feature flag.
    Open source →
    Release notes

    ADDED

    • PoolDefault and PoolClone implementations, from the refpool crate, are available for Chunk, SparseChunk and RingBuffer, behind the refpool feature flag.
    Open source →
  11. 0.5.0 09 Sep 2019
    Release notes

    CHANGED

    • The Bitmap type (and its helper type, Bits) has been split off into a separate crate, named bitmaps. If you need it, it's in that crate now. sized-chunks does not re-export it. Of course, this means sized-chunks has gained bitmaps as its second hard dependency.
    Open source →
  12. 0.4.0 02 Sep 2019
    Release notes

    CHANGED

    • The 0.3.2 release increased the minimum rustc version required, which should have been a major version bump, so 0.3.2 is being yanked and re-tagged as 0.4.0.
    Open source →
  13. 0.3.2 29 Aug 2019 withdrawn
    Release notes

    ADDED

    • Chunk/bitmap sizes up to 1024 are now supported.

    FIXED

    • Replaced ManuallyDrop in implementations with MaybeUninit, along with a general unsafe code cleanup. (#3)
    Open source →
  14. 0.3.1 03 Aug 2019
    Release notes

    ADDED

    • Chunk sizes up to 256 are now supported.
    Open source →
  15. 0.3.0 17 May 2019
    Release notes

    ADDED

    • A new data structure, InlineArray, which is a stack allocated array matching the size of a given type, intended for optimising for the case of very small vectors.
    • Chunk has an implementation of From<InlineArray> which is considerably faster than going via iterators.
    Open source →
  16. 0.2.2 10 May 2019
    Release notes

    ADDED

    • Slice::get methods now return references with the lifetime of the underlying RingBuffer rather than the lifetime of the slice.
    Open source →
  17. 0.2.1 15 Apr 2019
    Release notes

    ADDED

    • A lot of documentation.
    • std::io::Read implementations for Chunk<u8> and RingBuffer<u8> to match their Write implementations.
    Open source →
  18. 0.2.0 14 Apr 2019
    Release notes

    CHANGED

    • The capacity() method has been replacied with a CAPACITY const on each type.

    ADDED

    • There is now a RingBuffer implementation, which should be nearly a drop-in replacement for SizedChunk but is always O(1) on push and cannot be dereferenced to slices (but it has a set of custom slice-like implementations to make that less of a drawback).
    • The Drain iterator for SizedChunk now implements DoubleEndedIterator.

    FIXED

    • SizedChunk::drain_from_front/back will now always panic if the iterator underflows, instead of only doing it in debug mode.
    Open source →
  19. 0.1.3 12 Apr 2019
    Release notes

    ADDED

    • SparseChunk now has a default length of U64.
    • Chunk now has PartialEq defined for anything that can be borrowed as a slice.
    • SparseChunk<A> likewise has PartialEq defined for BTreeMap<usize, A> and HashMap<usize, A>. These are intended for debugging and aren't optimally `efficient.
    • Chunk and SparseChunk now have a new method capacity() which returns its maximum capacity (the number in the type) as a usize.
    • Added an entries() method to SparseChunk.
    • SparseChunk now has a Debug implementation.

    FIXED

    • Extensive integration tests were added for Chunk and SparseChunk.
    • Chunk::clear is now very slightly faster.
    Open source →
  20. 0.1.2 11 Mar 2019
    Release notes

    FIXED

    • Fixed an alignment issue in Chunk::drain_from_back. (#1)
    Open source →
  21. 0.1.1 19 Feb 2019
    Release notes

    FIXED

    • Some 2018 edition issues.
    Open source →
  22. 0.1.0 19 Feb 2019
    Release notes

    Initial release.

    Open source →

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive