Releases: bodil/im-rs
Releases · bodil/im-rs
15.1.0
Added
-
HashSet
now implementsFrom<Vector<A>>
andFrom<&Vector<A>> where A: Clone
. -
Fixed
-
Fixed a long standing crash bug in
OrdMap
/OrdSet
. (#154, #143, #152, #124) -
The
union
method on maps/sets will now prefer to mutate the larger set (which leads to less work) rather than the first set. (#163) -
Ensure
TreeFocus
only implementsSend
/Sync
when the underlying type does. (#157, #158) -
There was an issue where nodes in very large
OrdMap
s could overflow when removing an element and cause a panic, which has now been fixed. (#141)
15.0.0
Changed
- Map iterators now return
(&K, &V)
and(&K, &mut V)
respectively, to be consistent withstd::collections
's API.DiffIter
forOrdMap
has also changed in the same manner. (#121)
Removed
- The
pool
feature flag has been removed from theim
version of the crate, asrefpool
no longer supports threadsafe pools. HashSet::iter_mut()
has been removed, because if you modify the hashed values in a hash set, you break the hash set.
Added
- The
pool
feature flag was missing from theim-rc
version of the crate, which is the version where it's actually useful. It's been added now. DiffIter
now has aDebug
implementation.- There is now a
Vector::is_inline()
method to determine whether aVector
is currently inlined. (#129)
Fixed
- A smarter implementation of the sorting algorithm for
Vector
has improved the performance ofVector::sort
by approximately 2x. (#126)
14.3.0
Changed
proptest
strategies have been moved toim::proptest
. The previous locations of the strategies (im::vector::proptest
etc) are still available, but have been deprecated.
Added
OrdSet
andOrdMap
now haveget_prev
andget_next
methods (with equivalentget_prev_mut
andget_next_mut
methods forOrdMap
) which will return the closest key match to the requested key in the specified direction if the key isn't in the set. (#95)- The
retain
method, inexplicably missing fromHashMap
but notHashSet
, has been added. (#120) - The
get_mut
method onOrdMap
was, equally inexplicably, private. It has now been made public.
14.2.0
[14.2.0] - 2020-01-17
Added
- Both map types now have the
get_key_value()
method, corresponding to the equivalent additions to the standard library. - The
ptr_eq
method has been added to all data types, allowing you to test whether two values refer to the same content in memory, by testing for pointer equality. (#117) HashMap
had lost itsArbitrary
implementation for thequickcheck
feature flag. It's now been restored. (#118)- Implementations for
Arbitrary
from thearbitrary
crate have been added behind thearbitrary
feature flag.
Fixed
- Fixed a bug when reversing a consuming iterator over a
Vector
by replacing the consuming iterator with a much simpler and slightly more efficient version. (#116)
14.1.0
Added
- If you enable the
pool
feature flag, im now supports constructing data types usingrefpool
to speed up chunk allocation. The performance boost will vary between use cases and operating systems, but generally at least a 10% speedup can be expected when constructing a data type from an iterator, and the more complex an operation is, the more likely it is to benefit from being able to quickly reallocate chunks. Note that in order to use this feature, you have to construct your data types using thewith_pool(&pool)
constructor, it's not enough just to enable the feature flag.
14.0.0
Changed
- As
sized-chunks
now requires a slightly more recent version ofrustc
to compile, specifically version 1.36.0, so doesim
. This is a breaking change, but will of course only affect your code if you're using an olderrustc
.
Fixed
13.0.0
The minimum supported Rust version is now 1.34.0.
Changed
im::iter::unfold
now gives you the owned state value rather than an immutable reference to it, which makes it a little more useful.
Removed
- The deprecated
singleton
constructors have been removed. Please useunit
instead. - The deprecated methods
Vector::chunks
andVector::chunks_mut
have been removed in favour ofVector::leaves
andVector::leaves_mut
respectively. (#50) - The deprecated reference to
sized-chunks
has been removed. If you need it, please use thesized-chunks
crate directly. im::iter::unfold_mut
has been removed, as there's no meaningful difference between it and rust-std 1.34.0'sstd::iter::from_fn
with a captured state variable.
Fixed
Vector
now usessized_chunks::InlineArray
instead of anEmpty
enum case to avoid allocation at very small sizes, letting you store a handful of elements on the stack before needing to grow into a full chunk. This has a beneficial effect on performance as well, as there's no pointer into the heap to dereference, making it faster thanstd::vec::Vec
in this configuration.- Some complexity timings have been added and corrected. (#87)
OrdSet::is_subset(&self, other)
now returns immediately whenself
is larger thanother
and thus could not possibly be a subset of it. (#87)
12.3.4
Changed
Clone
constraints have been further relaxed on maps and sets, so that you can now lookup and iterate over them without requiring aClone
constraint (though you do still needClone
to actually insert data into them to lookup or iterate over). (#81)
Fixed
12.3.3
12.3.2
Changed
Clone
constraints on all data structures, as well as relevant constraints on maps and sets, have been relaxed where possible, so that you can now construct empty instances and call most query methods without requiring values implementClone
etc. (#63)