1- 1.9.2 2 3 - `IndexMap` and `IndexSet` both implement `arbitrary::Arbitrary<'_>` and 4 `quickcheck::Arbitrary` if those optional dependency features are enabled. 5 6- 1.9.1 7 8 - The MSRV now allows Rust 1.56.0 as well. However, currently `hashbrown` 9 0.12.1 requires 1.56.1, so users on 1.56.0 should downgrade that to 0.12.0 10 until there is a later published version relaxing its requirement. 11 12- 1.9.0 13 14 - **MSRV**: Rust 1.56.1 or later is now required. 15 16 - The `hashbrown` dependency has been updated to version 0.12. 17 18 - `IterMut` and `ValuesMut` now implement `Debug`. 19 20 - The new `IndexMap::shrink_to` and `IndexSet::shrink_to` methods shrink 21 the capacity with a lower bound. 22 23 - The new `IndexMap::move_index` and `IndexSet::move_index` methods change 24 the position of an item from one index to another, shifting the items 25 between to accommodate the move. 26 27- 1.8.2 28 29 - Bump the `rustc-rayon` dependency, for compiler use only. 30 31- 1.8.1 32 33 - The new `IndexSet::replace_full` will return the index of the item along 34 with the replaced value, if any, by @zakcutner in PR [222]. 35 36[222]: https://github.com/bluss/indexmap/pull/222 37 38- 1.8.0 39 40 - The new `IndexMap::into_keys` and `IndexMap::into_values` will consume 41 the map into keys or values, respectively, matching Rust 1.54's `HashMap` 42 methods, by @taiki-e in PR [195]. 43 44 - More of the iterator types implement `Debug`, `ExactSizeIterator`, and 45 `FusedIterator`, by @cuviper in PR [196]. 46 47 - `IndexMap` and `IndexSet` now implement rayon's `ParallelDrainRange`, 48 by @cuviper in PR [197]. 49 50 - `IndexMap::with_hasher` and `IndexSet::with_hasher` are now `const` 51 functions, allowing static maps and sets, by @mwillsey in PR [203]. 52 53 - `IndexMap` and `IndexSet` now implement `From` for arrays, matching 54 Rust 1.56's implementation for `HashMap`, by @rouge8 in PR [205]. 55 56 - `IndexMap` and `IndexSet` now have methods `sort_unstable_keys`, 57 `sort_unstable_by`, `sorted_unstable_by`, and `par_*` equivalents, 58 which sort in-place without preserving the order of equal items, by 59 @bhgomes in PR [211]. 60 61[195]: https://github.com/bluss/indexmap/pull/195 62[196]: https://github.com/bluss/indexmap/pull/196 63[197]: https://github.com/bluss/indexmap/pull/197 64[203]: https://github.com/bluss/indexmap/pull/203 65[205]: https://github.com/bluss/indexmap/pull/205 66[211]: https://github.com/bluss/indexmap/pull/211 67 68- 1.7.0 69 70 - **MSRV**: Rust 1.49 or later is now required. 71 72 - The `hashbrown` dependency has been updated to version 0.11. 73 74- 1.6.2 75 76 - Fixed to match `std` behavior, `OccupiedEntry::key` now references the 77 existing key in the map instead of the lookup key, by @cuviper in PR [170]. 78 79 - The new `Entry::or_insert_with_key` matches Rust 1.50's `Entry` method, 80 passing `&K` to the callback to create a value, by @cuviper in PR [175]. 81 82[170]: https://github.com/bluss/indexmap/pull/170 83[175]: https://github.com/bluss/indexmap/pull/175 84 85- 1.6.1 86 87 - The new `serde_seq` module implements `IndexMap` serialization as a 88 sequence to ensure order is preserved, by @cuviper in PR [158]. 89 90 - New methods on maps and sets work like the `Vec`/slice methods by the same name: 91 `truncate`, `split_off`, `first`, `first_mut`, `last`, `last_mut`, and 92 `swap_indices`, by @cuviper in PR [160]. 93 94[158]: https://github.com/bluss/indexmap/pull/158 95[160]: https://github.com/bluss/indexmap/pull/160 96 97- 1.6.0 98 99 - **MSRV**: Rust 1.36 or later is now required. 100 101 - The `hashbrown` dependency has been updated to version 0.9. 102 103- 1.5.2 104 105 - The new "std" feature will force the use of `std` for users that explicitly 106 want the default `S = RandomState`, bypassing the autodetection added in 1.3.0, 107 by @cuviper in PR [145]. 108 109[145]: https://github.com/bluss/indexmap/pull/145 110 111- 1.5.1 112 113 - Values can now be indexed by their `usize` position by @cuviper in PR [132]. 114 115 - Some of the generic bounds have been relaxed to match `std` by @cuviper in PR [141]. 116 117 - `drain` now accepts any `R: RangeBounds<usize>` by @cuviper in PR [142]. 118 119[132]: https://github.com/bluss/indexmap/pull/132 120[141]: https://github.com/bluss/indexmap/pull/141 121[142]: https://github.com/bluss/indexmap/pull/142 122 123- 1.5.0 124 125 - **MSRV**: Rust 1.32 or later is now required. 126 127 - The inner hash table is now based on `hashbrown` by @cuviper in PR [131]. 128 This also completes the method `reserve` and adds `shrink_to_fit`. 129 130 - Add new methods `get_key_value`, `remove_entry`, `swap_remove_entry`, 131 and `shift_remove_entry`, by @cuviper in PR [136] 132 133 - `Clone::clone_from` reuses allocations by @cuviper in PR [125] 134 135 - Add new method `reverse` by @linclelinkpart5 in PR [128] 136 137[125]: https://github.com/bluss/indexmap/pull/125 138[128]: https://github.com/bluss/indexmap/pull/128 139[131]: https://github.com/bluss/indexmap/pull/131 140[136]: https://github.com/bluss/indexmap/pull/136 141 142- 1.4.0 143 144 - Add new method `get_index_of` by @Thermatrix in PR [115] and [120] 145 146 - Fix build script rebuild-if-changed configuration to use "build.rs"; 147 fixes issue [123]. Fix by @cuviper. 148 149 - Dev-dependencies (rand and quickcheck) have been updated. The crate's tests 150 now run using Rust 1.32 or later (MSRV for building the crate has not changed). 151 by @kjeremy and @bluss 152 153[123]: https://github.com/bluss/indexmap/issues/123 154[115]: https://github.com/bluss/indexmap/pull/115 155[120]: https://github.com/bluss/indexmap/pull/120 156 157- 1.3.2 158 159 - Maintenance update to regenerate the published `Cargo.toml`. 160 161- 1.3.1 162 163 - Maintenance update for formatting and `autocfg` 1.0. 164 165- 1.3.0 166 167 - The deprecation messages in the previous version have been removed. 168 (The methods have not otherwise changed.) Docs for removal methods have been 169 improved. 170 - From Rust 1.36, this crate supports being built **without std**, requiring 171 `alloc` instead. This is enabled automatically when it is detected that 172 `std` is not available. There is no crate feature to enable/disable to 173 trigger this. The new build-dep `autocfg` enables this. 174 175- 1.2.0 176 177 - Plain `.remove()` now has a deprecation message, it informs the user 178 about picking one of the removal functions `swap_remove` and `shift_remove` 179 which have different performance and order semantics. 180 Plain `.remove()` will not be removed, the warning message and method 181 will remain until further. 182 183 - Add new method `shift_remove` for order preserving removal on the map, 184 and `shift_take` for the corresponding operation on the set. 185 186 - Add methods `swap_remove`, `swap_remove_entry` to `Entry`. 187 188 - Fix indexset/indexmap to support full paths, like `indexmap::indexmap!()` 189 190 - Internal improvements: fix warnings, deprecations and style lints 191 192- 1.1.0 193 194 - Added optional feature `"rayon"` that adds parallel iterator support 195 to `IndexMap` and `IndexSet` using Rayon. This includes all the regular 196 iterators in parallel versions, and parallel sort. 197 198 - Implemented `Clone` for `map::{Iter, Keys, Values}` and 199 `set::{Difference, Intersection, Iter, SymmetricDifference, Union}` 200 201 - Implemented `Debug` for `map::{Entry, IntoIter, Iter, Keys, Values}` and 202 `set::{Difference, Intersection, IntoIter, Iter, SymmetricDifference, Union}` 203 204 - Serde trait `IntoDeserializer` are implemented for `IndexMap` and `IndexSet`. 205 206 - Minimum Rust version requirement increased to Rust 1.30 for development builds. 207 208- 1.0.2 209 210 - The new methods `IndexMap::insert_full` and `IndexSet::insert_full` are 211 both like `insert` with the index included in the return value. 212 213 - The new method `Entry::and_modify` can be used to modify occupied 214 entries, matching the new methods of `std` maps in Rust 1.26. 215 216 - The new method `Entry::or_default` inserts a default value in unoccupied 217 entries, matching the new methods of `std` maps in Rust 1.28. 218 219- 1.0.1 220 221 - Document Rust version policy for the crate (see rustdoc) 222 223- 1.0.0 224 225 - This is the 1.0 release for `indexmap`! (the crate and datastructure 226 formerly known as “ordermap”) 227 - `OccupiedEntry::insert` changed its signature, to use `&mut self` for 228 the method receiver, matching the equivalent method for a standard 229 `HashMap`. Thanks to @dtolnay for finding this bug. 230 - The deprecated old names from ordermap were removed: `OrderMap`, 231 `OrderSet`, `ordermap!{}`, `orderset!{}`. Use the new `IndexMap` 232 etc names instead. 233 234- 0.4.1 235 236 - Renamed crate to `indexmap`; the `ordermap` crate is now deprecated 237 and the types `OrderMap/Set` now have a deprecation notice. 238 239- 0.4.0 240 241 - This is the last release series for this `ordermap` under that name, 242 because the crate is **going to be renamed** to `indexmap` (with types 243 `IndexMap`, `IndexSet`) and no change in functionality! 244 - The map and its associated structs moved into the `map` submodule of the 245 crate, so that the map and set are symmetric 246 247 + The iterators, `Entry` and other structs are now under `ordermap::map::` 248 249 - Internally refactored `OrderMap<K, V, S>` so that all the main algorithms 250 (insertion, lookup, removal etc) that don't use the `S` parameter (the 251 hasher) are compiled without depending on `S`, which reduces generics bloat. 252 253 - `Entry<K, V>` no longer has a type parameter `S`, which is just like 254 the standard `HashMap`'s entry. 255 256 - Minimum Rust version requirement increased to Rust 1.18 257 258- 0.3.5 259 260 - Documentation improvements 261 262- 0.3.4 263 264 - The `.retain()` methods for `OrderMap` and `OrderSet` now 265 traverse the elements in order, and the retained elements **keep their order** 266 - Added new methods `.sort_by()`, `.sort_keys()` to `OrderMap` and 267 `.sort_by()`, `.sort()` to `OrderSet`. These methods allow you to 268 sort the maps in place efficiently. 269 270- 0.3.3 271 272 - Document insertion behaviour better by @lucab 273 - Updated dependences (no feature changes) by @ignatenkobrain 274 275- 0.3.2 276 277 - Add `OrderSet` by @cuviper! 278 - `OrderMap::drain` is now (too) a double ended iterator. 279 280- 0.3.1 281 282 - In all ordermap iterators, forward the `collect` method to the underlying 283 iterator as well. 284 - Add crates.io categories. 285 286- 0.3.0 287 288 - The methods `get_pair`, `get_pair_index` were both replaced by 289 `get_full` (and the same for the mutable case). 290 - Method `swap_remove_pair` replaced by `swap_remove_full`. 291 - Add trait `MutableKeys` for opt-in mutable key access. Mutable key access 292 is only possible through the methods of this extension trait. 293 - Add new trait `Equivalent` for key equivalence. This extends the 294 `Borrow` trait mechanism for `OrderMap::get` in a backwards compatible 295 way, just some minor type inference related issues may become apparent. 296 See [#10] for more information. 297 - Implement `Extend<(&K, &V)>` by @xfix. 298 299[#10]: https://github.com/bluss/ordermap/pull/10 300 301- 0.2.13 302 303 - Fix deserialization to support custom hashers by @Techcable. 304 - Add methods `.index()` on the entry types by @garro95. 305 306- 0.2.12 307 308 - Add methods `.with_hasher()`, `.hasher()`. 309 310- 0.2.11 311 312 - Support `ExactSizeIterator` for the iterators. By @Binero. 313 - Use `Box<[Pos]>` internally, saving a word in the `OrderMap` struct. 314 - Serde support, with crate feature `"serde-1"`. By @xfix. 315 316- 0.2.10 317 318 - Add iterator `.drain(..)` by @stevej. 319 320- 0.2.9 321 322 - Add method `.is_empty()` by @overvenus. 323 - Implement `PartialEq, Eq` by @overvenus. 324 - Add method `.sorted_by()`. 325 326- 0.2.8 327 328 - Add iterators `.values()` and `.values_mut()`. 329 - Fix compatibility with 32-bit platforms. 330 331- 0.2.7 332 333 - Add `.retain()`. 334 335- 0.2.6 336 337 - Add `OccupiedEntry::remove_entry` and other minor entry methods, 338 so that it now has all the features of `HashMap`'s entries. 339 340- 0.2.5 341 342 - Improved `.pop()` slightly. 343 344- 0.2.4 345 346 - Improved performance of `.insert()` ([#3]) by @pczarn. 347 348[#3]: https://github.com/bluss/ordermap/pull/3 349 350- 0.2.3 351 352 - Generalize `Entry` for now, so that it works on hashmaps with non-default 353 hasher. However, there's a lingering compat issue since libstd `HashMap` 354 does not parameterize its entries by the hasher (`S` typarm). 355 - Special case some iterator methods like `.nth()`. 356 357- 0.2.2 358 359 - Disable the verbose `Debug` impl by default. 360 361- 0.2.1 362 363 - Fix doc links and clarify docs. 364 365- 0.2.0 366 367 - Add more `HashMap` methods & compat with its API. 368 - Experimental support for `.entry()` (the simplest parts of the API). 369 - Add `.reserve()` (placeholder impl). 370 - Add `.remove()` as synonym for `.swap_remove()`. 371 - Changed `.insert()` to swap value if the entry already exists, and 372 return `Option`. 373 - Experimental support as an *indexed* hash map! Added methods 374 `.get_index()`, `.get_index_mut()`, `.swap_remove_index()`, 375 `.get_pair_index()`, `.get_pair_index_mut()`. 376 377- 0.1.2 378 379 - Implement the 32/32 split idea for `Pos` which improves cache utilization 380 and lookup performance. 381 382- 0.1.1 383 384 - Initial release. 385