- 1.8.2 - Bump the ``rustc-rayon`` dependency, for compiler use only. - 1.8.1 - The new ``IndexSet::replace_full`` will return the index of the item along with the replaced value, if any, by @zakcutner in PR 222_. .. _222: https://github.com/bluss/indexmap/pull/222 - 1.8.0 - The new ``IndexMap::into_keys`` and ``IndexMap::into_values`` will consume the map into keys or values, respectively, matching Rust 1.54's ``HashMap`` methods, by @taiki-e in PR 195_. - More of the iterator types implement ``Debug``, ``ExactSizeIterator``, and ``FusedIterator``, by @cuviper in PR 196_. - ``IndexMap`` and ``IndexSet`` now implement rayon's ``ParallelDrainRange``, by @cuviper in PR 197_. - ``IndexMap::with_hasher`` and ``IndexSet::with_hasher`` are now ``const`` functions, allowing static maps and sets, by @mwillsey in PR 203_. - ``IndexMap`` and ``IndexSet`` now implement ``From`` for arrays, matching Rust 1.56's implementation for ``HashMap``, by @rouge8 in PR 205_. - ``IndexMap`` and ``IndexSet`` now have methods ``sort_unstable_keys``, ``sort_unstable_by``, ``sorted_unstable_by``, and ``par_*`` equivalents, which sort in-place without preserving the order of equal items, by @bhgomes in PR 211_. .. _195: https://github.com/bluss/indexmap/pull/195 .. _196: https://github.com/bluss/indexmap/pull/196 .. _197: https://github.com/bluss/indexmap/pull/197 .. _203: https://github.com/bluss/indexmap/pull/203 .. _205: https://github.com/bluss/indexmap/pull/205 .. _211: https://github.com/bluss/indexmap/pull/211 - 1.7.0 - **MSRV**: Rust 1.49 or later is now required. - The ``hashbrown`` dependency has been updated to version 0.11. - 1.6.2 - Fixed to match ``std`` behavior, ``OccupiedEntry::key`` now references the existing key in the map instead of the lookup key, by @cuviper in PR 170_. - The new ``Entry::or_insert_with_key`` matches Rust 1.50's ``Entry`` method, passing ``&K`` to the callback to create a value, by @cuviper in PR 175_. .. _170: https://github.com/bluss/indexmap/pull/170 .. _175: https://github.com/bluss/indexmap/pull/175 - 1.6.1 - The new ``serde_seq`` module implements ``IndexMap`` serialization as a sequence to ensure order is preserved, by @cuviper in PR 158_. - New methods on maps and sets work like the ``Vec``/slice methods by the same name: ``truncate``, ``split_off``, ``first``, ``first_mut``, ``last``, ``last_mut``, and ``swap_indices``, by @cuviper in PR 160_. .. _158: https://github.com/bluss/indexmap/pull/158 .. _160: https://github.com/bluss/indexmap/pull/160 - 1.6.0 - **MSRV**: Rust 1.36 or later is now required. - The ``hashbrown`` dependency has been updated to version 0.9. - 1.5.2 - The new "std" feature will force the use of ``std`` for users that explicitly want the default ``S = RandomState``, bypassing the autodetection added in 1.3.0, by @cuviper in PR 145_. .. _145: https://github.com/bluss/indexmap/pull/145 - 1.5.1 - Values can now be indexed by their ``usize`` position by @cuviper in PR 132_. - Some of the generic bounds have been relaxed to match ``std`` by @cuviper in PR 141_. - ``drain`` now accepts any ``R: RangeBounds`` by @cuviper in PR 142_. .. _132: https://github.com/bluss/indexmap/pull/132 .. _141: https://github.com/bluss/indexmap/pull/141 .. _142: https://github.com/bluss/indexmap/pull/142 - 1.5.0 - **MSRV**: Rust 1.32 or later is now required. - The inner hash table is now based on ``hashbrown`` by @cuviper in PR 131_. This also completes the method ``reserve`` and adds ``shrink_to_fit``. - Add new methods ``get_key_value``, ``remove_entry``, ``swap_remove_entry``, and ``shift_remove_entry``, by @cuviper in PR 136_ - ``Clone::clone_from`` reuses allocations by @cuviper in PR 125_ - Add new method ``reverse`` by @linclelinkpart5 in PR 128_ .. _125: https://github.com/bluss/indexmap/pull/125 .. _128: https://github.com/bluss/indexmap/pull/128 .. _131: https://github.com/bluss/indexmap/pull/131 .. _136: https://github.com/bluss/indexmap/pull/136 - 1.4.0 - Add new method ``get_index_of`` by @Thermatrix in PR 115_ and 120_ - Fix build script rebuild-if-changed configuration to use "build.rs"; fixes issue 123_. Fix by @cuviper. - Dev-dependencies (rand and quickcheck) have been updated. The crate's tests now run using Rust 1.32 or later (MSRV for building the crate has not changed). by @kjeremy and @bluss .. _123: https://github.com/bluss/indexmap/issues/123 .. _115: https://github.com/bluss/indexmap/pull/115 .. _120: https://github.com/bluss/indexmap/pull/120 - 1.3.2 - Maintenance update to regenerate the published `Cargo.toml`. - 1.3.1 - Maintenance update for formatting and ``autocfg`` 1.0. - 1.3.0 - The deprecation messages in the previous version have been removed. (The methods have not otherwise changed.) Docs for removal methods have been improved. - From Rust 1.36, this crate supports being built **without std**, requiring ``alloc`` instead. This is enabled automatically when it is detected that ``std`` is not available. There is no crate feature to enable/disable to trigger this. The new build-dep ``autocfg`` enables this. - 1.2.0 - Plain ``.remove()`` now has a deprecation message, it informs the user about picking one of the removal functions ``swap_remove`` and ``shift_remove`` which have different performance and order semantics. Plain ``.remove()`` will not be removed, the warning message and method will remain until further. - Add new method ``shift_remove`` for order preserving removal on the map, and ``shift_take`` for the corresponding operation on the set. - Add methods ``swap_remove``, ``swap_remove_entry`` to ``Entry``. - Fix indexset/indexmap to support full paths, like ``indexmap::indexmap!()`` - Internal improvements: fix warnings, deprecations and style lints - 1.1.0 - Added optional feature `"rayon"` that adds parallel iterator support to `IndexMap` and `IndexSet` using Rayon. This includes all the regular iterators in parallel versions, and parallel sort. - Implemented ``Clone`` for ``map::{Iter, Keys, Values}`` and ``set::{Difference, Intersection, Iter, SymmetricDifference, Union}`` - Implemented ``Debug`` for ``map::{Entry, IntoIter, Iter, Keys, Values}`` and ``set::{Difference, Intersection, IntoIter, Iter, SymmetricDifference, Union}`` - Serde trait ``IntoDeserializer`` are implemented for ``IndexMap`` and ``IndexSet``. - Minimum Rust version requirement increased to Rust 1.30 for development builds. - 1.0.2 - The new methods ``IndexMap::insert_full`` and ``IndexSet::insert_full`` are both like ``insert`` with the index included in the return value. - The new method ``Entry::and_modify`` can be used to modify occupied entries, matching the new methods of ``std`` maps in Rust 1.26. - The new method ``Entry::or_default`` inserts a default value in unoccupied entries, matching the new methods of ``std`` maps in Rust 1.28. - 1.0.1 - Document Rust version policy for the crate (see rustdoc) - 1.0.0 - This is the 1.0 release for ``indexmap``! (the crate and datastructure formerly known as “ordermap”) - ``OccupiedEntry::insert`` changed its signature, to use ``&mut self`` for the method receiver, matching the equivalent method for a standard ``HashMap``. Thanks to @dtolnay for finding this bug. - The deprecated old names from ordermap were removed: ``OrderMap``, ``OrderSet``, ``ordermap!{}``, ``orderset!{}``. Use the new ``IndexMap`` etc names instead. - 0.4.1 - Renamed crate to ``indexmap``; the ``ordermap`` crate is now deprecated and the types ``OrderMap/Set`` now have a deprecation notice. - 0.4.0 - This is the last release series for this ``ordermap`` under that name, because the crate is **going to be renamed** to ``indexmap`` (with types ``IndexMap``, ``IndexSet``) and no change in functionality! - The map and its associated structs moved into the ``map`` submodule of the crate, so that the map and set are symmetric + The iterators, ``Entry`` and other structs are now under ``ordermap::map::`` - Internally refactored ``OrderMap`` so that all the main algorithms (insertion, lookup, removal etc) that don't use the ``S`` parameter (the hasher) are compiled without depending on ``S``, which reduces generics bloat. - ``Entry`` no longer has a type parameter ``S``, which is just like the standard ``HashMap``'s entry. - Minimum Rust version requirement increased to Rust 1.18 - 0.3.5 - Documentation improvements - 0.3.4 - The ``.retain()`` methods for ``OrderMap`` and ``OrderSet`` now traverse the elements in order, and the retained elements **keep their order** - Added new methods ``.sort_by()``, ``.sort_keys()`` to ``OrderMap`` and ``.sort_by()``, ``.sort()`` to ``OrderSet``. These methods allow you to sort the maps in place efficiently. - 0.3.3 - Document insertion behaviour better by @lucab - Updated dependences (no feature changes) by @ignatenkobrain - 0.3.2 - Add ``OrderSet`` by @cuviper! - ``OrderMap::drain`` is now (too) a double ended iterator. - 0.3.1 - In all ordermap iterators, forward the ``collect`` method to the underlying iterator as well. - Add crates.io categories. - 0.3.0 - The methods ``get_pair``, ``get_pair_index`` were both replaced by ``get_full`` (and the same for the mutable case). - Method ``swap_remove_pair`` replaced by ``swap_remove_full``. - Add trait ``MutableKeys`` for opt-in mutable key access. Mutable key access is only possible through the methods of this extension trait. - Add new trait ``Equivalent`` for key equivalence. This extends the ``Borrow`` trait mechanism for ``OrderMap::get`` in a backwards compatible way, just some minor type inference related issues may become apparent. See `#10`__ for more information. - Implement ``Extend<(&K, &V)>`` by @xfix. __ https://github.com/bluss/ordermap/pull/10 - 0.2.13 - Fix deserialization to support custom hashers by @Techcable. - Add methods ``.index()`` on the entry types by @garro95. - 0.2.12 - Add methods ``.with_hasher()``, ``.hasher()``. - 0.2.11 - Support ``ExactSizeIterator`` for the iterators. By @Binero. - Use ``Box<[Pos]>`` internally, saving a word in the ``OrderMap`` struct. - Serde support, with crate feature ``"serde-1"``. By @xfix. - 0.2.10 - Add iterator ``.drain(..)`` by @stevej. - 0.2.9 - Add method ``.is_empty()`` by @overvenus. - Implement ``PartialEq, Eq`` by @overvenus. - Add method ``.sorted_by()``. - 0.2.8 - Add iterators ``.values()`` and ``.values_mut()``. - Fix compatibility with 32-bit platforms. - 0.2.7 - Add ``.retain()``. - 0.2.6 - Add ``OccupiedEntry::remove_entry`` and other minor entry methods, so that it now has all the features of ``HashMap``'s entries. - 0.2.5 - Improved ``.pop()`` slightly. - 0.2.4 - Improved performance of ``.insert()`` (`#3`__) by @pczarn. __ https://github.com/bluss/ordermap/pull/3 - 0.2.3 - Generalize ``Entry`` for now, so that it works on hashmaps with non-default hasher. However, there's a lingering compat issue since libstd ``HashMap`` does not parameterize its entries by the hasher (``S`` typarm). - Special case some iterator methods like ``.nth()``. - 0.2.2 - Disable the verbose ``Debug`` impl by default. - 0.2.1 - Fix doc links and clarify docs. - 0.2.0 - Add more ``HashMap`` methods & compat with its API. - Experimental support for ``.entry()`` (the simplest parts of the API). - Add ``.reserve()`` (placeholder impl). - Add ``.remove()`` as synonym for ``.swap_remove()``. - Changed ``.insert()`` to swap value if the entry already exists, and return ``Option``. - Experimental support as an *indexed* hash map! Added methods ``.get_index()``, ``.get_index_mut()``, ``.swap_remove_index()``, ``.get_pair_index()``, ``.get_pair_index_mut()``. - 0.1.2 - Implement the 32/32 split idea for ``Pos`` which improves cache utilization and lookup performance. - 0.1.1 - Initial release.