1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
//! More collection types.
//!
//! # Small* collections
//!
//! Built on top of the excellent [smallvec](https://github.com/servo/rust-smallvec)
//! crate, [`SmallMap`] and [`SmallSet`] are a `Map` and `Set` respectively that
//! are inlined if they contain fewer values than a (statically chosen)
//! capacity `C`, otherwise they are heap allocated and backed by an
//! `IndexMap`.
//!
//! # `VecMap`
//!
//! See [`vec_map`] for more details.
//!
//! # Multimap
//!
//! A collection that maps keys to values, similar to [`HashMap`], but where
//! each key may be associated with _multiple_ values. Multimaps can be
//! visualized as a map from keys to non-empty collections of values:
//! - a → 0, 1
//! - b → 2
//!
//! Or, it can be visualized as a collection of key-value pairs:
//! - a → 0
//! - a → 1
//! - b → 2
//!
//! The multimap API is based on the second form, `len() == 3` and `keys_len()
//! == 2` for the above example.
//!
//! | Name | Behaves as | Keys order | Values order | May contain duplicates |
//! | -------------------- | ----------------------------------- | ------------------- |-------------------- | ---------------------- |
//! | [`HashSetMultimap`] | [`HashMap`]`<K,`[`HashSet`]`<V>>` | Arbitrary order | Arbitrary order | No |
//! | [`HashVecMultimap`] | [`HashMap`]`<K,`[`Vec`]`<V>>` | Arbitrary order | Insertion order[^1] | Yes |
//! | [`IndexSetMultimap`] | [`IndexMap`]`<K,`[`IndexSet`]`<V>>` | Insertion order[^1] | Insertion order[^1] | No |
//! | [`IndexVecMultimap`] | [`IndexMap`]`<K, `[`Vec`]`<V>>` | Insertion order[^1] | Insertion order[^1] | Yes |
//!
//! [^1]: Insertion order is preserved, unless `remove()` or `swap_remove()`
//! is called. See more in the [IndexMap](https://docs.rs/indexmap/1.7.0/indexmap/map/struct.IndexMap.html#order) documentation.
//!
//! # Crate features
//! All features are _disabled_ by default. The options are:
//! - `hashsetmultimap`
//! - `hashvecmultimap`
//! - `indexsetmultimap`
//! - `indexvecmultimap`
//!
//! [`HashMap`]: std::collections::HashMap
//! [`HashSet`]: std::collections::HashSet
//! [`IndexMap`]: indexmap::IndexMap
//! [`IndexSet`]: indexmap::IndexSet
//! [`Vec`]: std::vec::Vec
pub use *;
pub use SmallMap;
pub use SmallSet;
pub use IndexKey;
pub use VecMap;
// TODO follow all guidelines here https://rust-lang.github.io/api-guidelines/checklist.html