]>
Commit | Line | Data |
---|---|---|
6522a427 EL |
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 | ||
923072b8 FG |
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. |