1Version 1.0.7 2============= 3 4 - Added `clone_from` implementations for all slot maps. 5 - Added `try_insert_with_key` methods that accept a fallible closure. 6 - Improved performance of insertion and key hashing. 7 - Made `new_key_type` resistant to shadowing. 8 - Made iterators clonable regardless of item type clonability. 9 10 11Version 1.0.6 12============= 13 14 - Made `Key` trait unsafe, as it was erroneously safe to implement. 15 16 17Version 1.0.5 18============= 19 20 - Added fuzzing for extra testing. 21 - Fixed an issue that could cause a segfault when using `HopSlotMap::retain` 22 that had the same underlying cause as the fix in 1.0.4 but was missed. 23 24 25Version 1.0.4 26============= 27 28 - Fixed an issue that could cause a segfault when using `HopSlotMap::drain`. 29 All versions 0.3+ are affected, and thus yanked. 30 31 32Version 1.0.3 33============= 34 35 - Made `get_disjoint_mut` available on stable Rust 1.51 and up. 36 - Added unchecked variants for the getters on `SparseSecondaryMap`. 37 38 39Version 1.0.2 40============= 41 42 - Fixed the `new_key_type!` macro, it assumed the `Key` trait was in scope. 43 - Updated code base with more stringent (clippy) warnings, and many small code 44 quality and documentation changes. 45 - Documented the minimum required stable Rust version, which is 1.49. 46 47 48Version 1.0.1 49============= 50 51 - Fixed an instance where an uninitialized `[u32; N]` was created. The 52 uninitialized values were never read - the code always initialized them 53 before reading - but simply having the variable be uninitialized (despite all 54 bit patterns being valid) is technically undefined behavior. 55 56 57Version 1.0.0 58============= 59 60 - Removed all `Copy` trait restrictions of value types stable Rust! There are 61 no longer any restrictions on the types you can store in any of the 62 slot maps. For that reason `Slottable` was deprecated as well. 63 64 - `no_std` support was added, use it by opting out of the default feature `std`. 65 66 - Added `sm.get_disjoint_mut([k1, k2, ...])` which allows you to get mutable 67 references from multiple disjoint keys at the same time. This requires 68 `min-const-generics` to be stabilized, so until Rust 1.51 comes out this is 69 only available on nightly by setting the `unstable` feature. 70 71 - Added an `Entry` API to the secondary maps. 72 73 - Added `derive(Clone)` for iterators where possible. 74 75 - Replaced `Into<KeyData>` with `Key::data()`. 76 77 - `SecondaryMap` now uses minimal space overhead. Each slot now uses 78 `max(sizeof(T), 4)` bytes. 79 80 - Moved `SlotMap` to the `basic` module. 81 82 83Version 0.4.1 84============= 85 86 - Backport of fix made in 1.0.4. 87 88 89Version 0.4.0 90============= 91 92 - Codebase moved to 2018 Edition. 93 94 - Reintroduce `DenseSlotMap` - an overzealous removal in 0.3.0. 95 96 - Added support for `try_reserve`. 97 98 - Added support for custom hashers in `SparseSecondaryMap`. 99 100 - `SparseSecondaryMap` and `SecondaryMap` can now be cloned. 101 102 - Keys have a more terse debug output. 103 104 - Fixed a bug that caused an overflowing left shift on 32-bit targets. 105 106 107Version 0.3.0 108============= 109 110 - Massive rework, with a focus on secondary maps and custom keys to prevent 111 cross-slotmap key usage. 112 113 - Removed `DenseSlotMap` in favour of `HopSlotMap` as the latter performs 114 better when secondary maps are in use. 115 116 - Unfortunately due to the redesign the first slot in a slot map must now 117 always be empty. This means some deserializations of slot maps serialized 118 with a version before 0.3.0 can fail. 119 120 - Added `SecondaryMap` and `SparseSecondaryMap`, which allows you to associate 121 extra data with keys given by a slot map. 122 123 - Added `DefaultKey`, custom key types, and support for them on all slot maps 124 and secondary maps. You must now always specify the key type you're using 125 with a slot map, so `SlotMap<i32>` would be `SlotMap<DefaultKey, i32>`. It is 126 recommended to make a custom key type with `new_key_type!` for any slot map 127 you create, as this entirely prevents using the wrong key on the wrong slot 128 map. 129 130 - `KeyData` now has `as_ffi` and `from_ffi` functions that convert the data 131 that makes up a key to/from an `u64`. This allows you to use slot map keys 132 as opaque handles in FFI code. 133 134 135Version 0.2.1 136============= 137 138 - Fixed a potential uninitialized memory vulnerability. No uninitialized memory 139 was read or used directly, but Rust's assumptions could lead to it. Yanked 140 all previous versions as they were all vulnerable. 141 142 - Made a `Key` member non-zero so that `Option<Key>` is optimized. 143 144 145Version 0.2.0 146============= 147Start of version history. 148