1 use dlv_list::{
2     Drain as VecListDrain, Index, IntoIter as VecListIntoIter, Iter as VecListIter,
3     IterMut as VecListIterMut, VecList,
4 };
5 use hashbrown::hash_map::{RawEntryMut, RawOccupiedEntryMut};
6 use hashbrown::HashMap;
7 use std::borrow::Borrow;
8 use std::collections::hash_map::RandomState;
9 use std::fmt::{self, Debug, Formatter};
10 use std::hash::{BuildHasher, Hash, Hasher};
11 use std::iter::{FromIterator, FusedIterator};
12 use std::marker::PhantomData;
13 use std::sync::atomic::{AtomicUsize, Ordering};
14 use std::sync::Arc;
15 
16 #[derive(Clone)]
17 pub struct ListOrderedMultimap<Key, Value, State = RandomState> {
18     /// The hasher builder that constructs new hashers for hashing keys. We have to keep this
19     /// separate from the hashmap itself as we need to be able to access it when the hashmap keys
20     /// are reallocated due to reallocation. We cannot use the hash of the actual keys in the map
21     /// as those hashes are not representative of what hash they truly represent.
22     build_hasher: State,
23 
24     /// The list of the keys in the multimap. This is ordered by time of insertion.
25     keys: VecList<Key>,
26 
27     /// The map from indices of keys to the indices of their values in the value list. The list of
28     /// the indices is ordered by time of insertion. We never use hasher of the hashmap explicitly
29     /// here, we instead use [`ListOrderedMultimap::build_hasher`].
30     map: HashMap<Index<Key>, MapEntry<Key, Value>, DummyState>,
31 
32     /// The list of the values in the multimap. This is ordered by time of insertion.
33     values: VecList<ValueEntry<Key, Value>>,
34 }
35 
36 impl<Key, Value> ListOrderedMultimap<Key, Value, RandomState>
37 where
38     Key: Eq + Hash,
39 {
40     /// Creates a new multimap with no initial capacity.
41     ///
42     /// # Examples
43     ///
44     /// ```
45     /// use ordered_multimap::ListOrderedMultimap;
46     ///
47     /// let mut map = ListOrderedMultimap::new();
48     /// map.insert("key1", "value1");
49     /// assert_eq!(map.get(&"key1"), Some(&"value1"));
50     /// ```
new() -> ListOrderedMultimap<Key, Value, RandomState>51     pub fn new() -> ListOrderedMultimap<Key, Value, RandomState> {
52         ListOrderedMultimap::default()
53     }
54 
55     /// Creates a new multimap with the specified capacities.
56     ///
57     /// The multimap will be able to hold at least `key_capacity` keys and `value_capacity` values
58     /// without reallocating. A capacity of 0 will result in no allocation for the respective
59     /// container.
60     ///
61     /// # Examples
62     ///
63     /// ```
64     /// use ordered_multimap::ListOrderedMultimap;
65     ///
66     /// let map: ListOrderedMultimap<&str, &str> = ListOrderedMultimap::new();
67     /// assert_eq!(map.keys_capacity(), 0);
68     /// assert_eq!(map.values_capacity(), 0);
69     ///
70     /// let map: ListOrderedMultimap<&str, &str> = ListOrderedMultimap::with_capacity(5, 10);
71     /// assert_eq!(map.keys_capacity(), 5);
72     /// assert_eq!(map.values_capacity(), 10);
73     /// ```
with_capacity( key_capacity: usize, value_capacity: usize, ) -> ListOrderedMultimap<Key, Value, RandomState>74     pub fn with_capacity(
75         key_capacity: usize,
76         value_capacity: usize,
77     ) -> ListOrderedMultimap<Key, Value, RandomState> {
78         ListOrderedMultimap {
79             build_hasher: RandomState::new(),
80             keys: VecList::with_capacity(key_capacity),
81             map: HashMap::with_capacity_and_hasher(key_capacity, DummyState),
82             values: VecList::with_capacity(value_capacity),
83         }
84     }
85 }
86 
87 impl<Key, Value, State> ListOrderedMultimap<Key, Value, State>
88 where
89     Key: Eq + Hash,
90     State: BuildHasher,
91 {
92     /// Appends a value to the list of values associated with the given key.
93     ///
94     /// If the key is not already in the multimap, this will be identical to an insert and the
95     /// return value will be `false`. Otherwise, `true` will be returned.
96     ///
97     /// Complexity: amortized O(1)
98     ///
99     /// # Examples
100     ///
101     /// ```
102     /// use ordered_multimap::ListOrderedMultimap;
103     ///
104     /// let mut map = ListOrderedMultimap::new();
105     /// let already_exists = map.append("key", "value");
106     /// assert!(!already_exists);
107     /// assert_eq!(map.values_len(), 1);
108     /// assert_eq!(map.get(&"key"), Some(&"value"));
109     ///
110     /// let already_exists = map.append("key", "value2");
111     /// assert!(already_exists);
112     /// assert_eq!(map.values_len(), 2);
113     /// ```
append(&mut self, key: Key, value: Value) -> bool114     pub fn append(&mut self, key: Key, value: Value) -> bool {
115         use self::RawEntryMut::*;
116 
117         let hash = hash_key(&self.build_hasher, &key);
118         let entry = raw_entry_mut(&self.keys, &mut self.map, hash, &key);
119         let build_hasher = &self.build_hasher;
120 
121         match entry {
122             Occupied(mut entry) => {
123                 let key_index = entry.key();
124                 let mut value_entry = ValueEntry::new(*key_index, value);
125                 let map_entry = entry.get_mut();
126                 value_entry.previous_index = Some(map_entry.tail_index);
127                 let index = self.values.push_back(value_entry);
128                 self.values
129                     .get_mut(map_entry.tail_index)
130                     .unwrap()
131                     .next_index = Some(index);
132                 map_entry.append(index);
133                 true
134             }
135             Vacant(entry) => {
136                 let key_index = self.keys.push_back(key);
137                 let value_entry = ValueEntry::new(key_index, value);
138                 let index = self.values.push_back(value_entry);
139                 let keys = &self.keys;
140                 entry.insert_with_hasher(hash, key_index, MapEntry::new(index), |&key_index| {
141                     let key = keys.get(key_index).unwrap();
142                     hash_key(build_hasher, key)
143                 });
144                 false
145             }
146         }
147     }
148 
149     /// Returns an immutable reference to the first key-value pair in the multimap
150     ///
151     /// Complexity: O(1)
152     ///
153     /// # Examples
154     ///
155     /// ```
156     /// use ordered_multimap::ListOrderedMultimap;
157     ///
158     /// let mut map = ListOrderedMultimap::new();
159     /// assert_eq!(map.back(), None);
160     ///
161     /// map.insert("key", "value");
162     /// assert_eq!(map.back(), Some((&"key", &"value")));
163     /// ```
back(&self) -> Option<(&Key, &Value)>164     pub fn back(&self) -> Option<(&Key, &Value)> {
165         self.iter().next_back()
166     }
167 
168     /// Returns an immutable reference to the first key-value pair in the multimap
169     ///
170     /// Complexity: O(1)
171     ///
172     /// # Examples
173     ///
174     /// ```
175     /// use ordered_multimap::ListOrderedMultimap;
176     ///
177     /// let mut map = ListOrderedMultimap::new();
178     /// assert_eq!(map.back_mut(), None);
179     ///
180     /// map.insert("key", "value");
181     /// assert_eq!(map.back_mut(), Some((&"key", &mut "value")));
182     /// ```
back_mut(&mut self) -> Option<(&Key, &mut Value)>183     pub fn back_mut(&mut self) -> Option<(&Key, &mut Value)> {
184         self.iter_mut().next_back()
185     }
186 
187     /// Removes all keys and values from the multimap.
188     ///
189     /// Complexity: O(|K| + |V|) where |K| is the number of keys and |V| is the number of values.
190     ///
191     /// # Examples
192     ///
193     /// ```
194     /// use ordered_multimap::ListOrderedMultimap;
195     ///
196     /// let mut map = ListOrderedMultimap::new();
197     /// map.insert("key", "value");
198     /// assert_eq!(map.keys_len(), 1);
199     /// assert_eq!(map.values_len(), 1);
200     ///
201     /// map.clear();
202     /// assert_eq!(map.keys_len(), 0);
203     /// assert_eq!(map.values_len(), 0);
204     /// ```
clear(&mut self)205     pub fn clear(&mut self) {
206         self.keys.clear();
207         self.map.clear();
208         self.values.clear();
209     }
210 
211     /// Returns whether the given key is in the multimap.
212     ///
213     /// Complexity: O(1)
214     ///
215     /// # Examples
216     ///
217     /// ```
218     /// use ordered_multimap::ListOrderedMultimap;
219     ///
220     /// let mut map = ListOrderedMultimap::new();
221     /// assert!(!map.contains_key(&"key"));
222     /// map.insert("key", "value");
223     /// assert!(map.contains_key(&"key"));
224     /// ```
contains_key<KeyQuery>(&self, key: &KeyQuery) -> bool where Key: Borrow<KeyQuery>, KeyQuery: ?Sized + Eq + Hash,225     pub fn contains_key<KeyQuery>(&self, key: &KeyQuery) -> bool
226     where
227         Key: Borrow<KeyQuery>,
228         KeyQuery: ?Sized + Eq + Hash,
229     {
230         let hash = hash_key(&self.build_hasher, &key);
231         raw_entry(&self.keys, &self.map, hash, key).is_some()
232     }
233 
234     /// Returns an iterator that yields keys and all associated values with those keys as separate
235     /// drain iterators. The order of yielded pairs will be the order in which the keys were first
236     /// inserted into the multimap.
237     ///
238     /// Regardless of whether this iterator is fully consumed, all keys and values will be removed
239     /// from the map.
240     ///
241     /// # Examples
242     ///
243     /// ```
244     /// use ordered_multimap::ListOrderedMultimap;
245     ///
246     /// let mut map = ListOrderedMultimap::new();
247     ///
248     /// map.insert("key", "value1");
249     /// map.append("key", "value2");
250     ///
251     /// let mut iter = map.drain_pairs();
252     ///
253     /// let (key, mut values) = iter.next().unwrap();
254     /// assert_eq!(key, "key");
255     /// assert_eq!(values.next(), Some("value1"));
256     /// assert_eq!(values.next(), Some("value2"));
257     /// assert_eq!(values.next(), None);
258     /// ```
drain_pairs(&mut self) -> KeyValuesDrain<Key, Value, State>259     pub fn drain_pairs(&mut self) -> KeyValuesDrain<Key, Value, State> {
260         KeyValuesDrain {
261             build_hasher: &self.build_hasher,
262             keys: &self.keys as *const _,
263             dropped: Arc::new(AtomicUsize::new(self.keys_len())),
264             iter: self.keys.drain(),
265             map: &mut self.map,
266             values: &mut self.values as *mut _,
267         }
268     }
269 
270     /// Returns whether the given key is in the multimap.
271     ///
272     /// Complexity: O(1)
273     ///
274     /// # Examples
275     ///
276     /// ```
277     /// use ordered_multimap::ListOrderedMultimap;
278     ///
279     /// let mut map = ListOrderedMultimap::new();
280     /// let value = map.entry("key").or_insert("value");
281     /// assert_eq!(value, &"value");
282     /// assert_eq!(map.get(&"key"), Some(&"value"));
283     /// ```
entry(&mut self, key: Key) -> Entry<Key, Value, State>284     pub fn entry(&mut self, key: Key) -> Entry<Key, Value, State> {
285         use self::RawEntryMut::*;
286 
287         let hash = hash_key(&self.build_hasher, &key);
288 
289         // TODO: This ugliness arises from borrow checking issues which seems to happen when the
290         // vacant entry is created in the match block further below for `Vacant` even though it
291         // should be perfectly safe. Is there a better way to do this?
292         if !self.contains_key(&key) {
293             Entry::Vacant(VacantEntry {
294                 build_hasher: &self.build_hasher,
295                 hash,
296                 key,
297                 keys: &mut self.keys,
298                 map: &mut self.map,
299                 values: &mut self.values,
300             })
301         } else {
302             match raw_entry_mut(&self.keys, &mut self.map, hash, &key) {
303                 Occupied(entry) => Entry::Occupied(OccupiedEntry {
304                     entry,
305                     keys: &mut self.keys,
306                     values: &mut self.values,
307                 }),
308                 _ => panic!("expected occupied entry"),
309             }
310         }
311     }
312 
313     /// Returns the number of values associated with a key.
314     ///
315     /// Complexity: O(1)
316     ///
317     /// # Examples
318     ///
319     /// ```
320     /// use ordered_multimap::ListOrderedMultimap;
321     ///
322     /// let mut map = ListOrderedMultimap::new();
323     /// assert_eq!(map.entry_len(&"key"), 0);
324     ///
325     /// map.insert("key", "value1");
326     /// assert_eq!(map.entry_len(&"key"), 1);
327     ///
328     /// map.append(&"key", "value2");
329     /// assert_eq!(map.entry_len(&"key"), 2);
330     /// ```
entry_len<KeyQuery>(&self, key: &KeyQuery) -> usize where Key: Borrow<KeyQuery>, KeyQuery: ?Sized + Eq + Hash,331     pub fn entry_len<KeyQuery>(&self, key: &KeyQuery) -> usize
332     where
333         Key: Borrow<KeyQuery>,
334         KeyQuery: ?Sized + Eq + Hash,
335     {
336         let hash = hash_key(&self.build_hasher, &key);
337 
338         match raw_entry(&self.keys, &self.map, hash, key) {
339             Some((_, map_entry)) => map_entry.length,
340             None => 0,
341         }
342     }
343 
344     /// Returns an immutable reference to the first key-value pair in the multimap
345     ///
346     /// Complexity: O(1)
347     ///
348     /// # Examples
349     ///
350     /// ```
351     /// use ordered_multimap::ListOrderedMultimap;
352     ///
353     /// let mut map = ListOrderedMultimap::new();
354     /// assert_eq!(map.front(), None);
355     ///
356     /// map.insert("key", "value");
357     /// assert_eq!(map.front(), Some((&"key", &"value")));
358     /// ```
front(&self) -> Option<(&Key, &Value)>359     pub fn front(&self) -> Option<(&Key, &Value)> {
360         self.iter().next()
361     }
362 
363     /// Returns an immutable reference to the first key-value pair in the multimap
364     ///
365     /// Complexity: O(1)
366     ///
367     /// # Examples
368     ///
369     /// ```
370     /// use ordered_multimap::ListOrderedMultimap;
371     ///
372     /// let mut map = ListOrderedMultimap::new();
373     /// assert_eq!(map.front_mut(), None);
374     ///
375     /// map.insert("key", "value");
376     /// assert_eq!(map.front_mut(), Some((&"key", &mut "value")));
377     /// ```
front_mut(&mut self) -> Option<(&Key, &mut Value)>378     pub fn front_mut(&mut self) -> Option<(&Key, &mut Value)> {
379         self.iter_mut().next()
380     }
381 
382     /// Returns an immutable reference to the first value, by insertion order, associated with the
383     /// given key, or `None` if the key is not in the multimap.
384     ///
385     /// Complexity: O(1)
386     ///
387     /// # Examples
388     ///
389     /// ```
390     /// use ordered_multimap::ListOrderedMultimap;
391     ///
392     /// let mut map: ListOrderedMultimap<&str, &str> = ListOrderedMultimap::new();
393     /// assert_eq!(map.get(&"key"), None);
394     ///
395     /// ```
get<KeyQuery>(&self, key: &KeyQuery) -> Option<&Value> where Key: Borrow<KeyQuery>, KeyQuery: ?Sized + Eq + Hash,396     pub fn get<KeyQuery>(&self, key: &KeyQuery) -> Option<&Value>
397     where
398         Key: Borrow<KeyQuery>,
399         KeyQuery: ?Sized + Eq + Hash,
400     {
401         let hash = hash_key(&self.build_hasher, &key);
402         let (_, map_entry) = raw_entry(&self.keys, &self.map, hash, key)?;
403         self.values
404             .get(map_entry.head_index)
405             .map(|entry| &entry.value)
406     }
407 
408     /// Returns an iterator that yields immutable references to all values associated with the
409     /// given key by insertion order.
410     ///
411     /// If the key is not in the multimap, the iterator will yield no values.
412     ///
413     /// # Examples
414     ///
415     /// ```
416     /// use ordered_multimap::ListOrderedMultimap;
417     ///
418     /// let mut map = ListOrderedMultimap::new();
419     /// map.insert("key", "value");
420     /// map.append("key", "value2");
421     ///
422     /// let mut iter = map.get_all(&"key");
423     /// assert_eq!(iter.next(), Some(&"value"));
424     /// assert_eq!(iter.next(), Some(&"value2"));
425     /// assert_eq!(iter.next(), None);
426     /// ```
get_all<KeyQuery>(&self, key: &KeyQuery) -> EntryValues<Key, Value> where Key: Borrow<KeyQuery>, KeyQuery: ?Sized + Eq + Hash,427     pub fn get_all<KeyQuery>(&self, key: &KeyQuery) -> EntryValues<Key, Value>
428     where
429         Key: Borrow<KeyQuery>,
430         KeyQuery: ?Sized + Eq + Hash,
431     {
432         let hash = hash_key(&self.build_hasher, &key);
433 
434         match raw_entry(&self.keys, &self.map, hash, key) {
435             Some((_, map_entry)) => EntryValues::from_map_entry(&self.values, &map_entry),
436             None => EntryValues::empty(&self.values),
437         }
438     }
439 
440     /// Returns an iterator that yields mutable references to all values associated with the given
441     /// key by insertion order.
442     ///
443     /// If the key is not in the multimap, the iterator will yield no values.
444     ///
445     /// # Examples
446     ///
447     /// ```
448     /// use ordered_multimap::ListOrderedMultimap;
449     ///
450     /// let mut map = ListOrderedMultimap::new();
451     /// map.insert("key", "value1");
452     /// map.append("key", "value2");
453     ///
454     /// let mut iter = map.get_all_mut(&"key");
455     ///
456     /// let first = iter.next().unwrap();
457     /// assert_eq!(first, &mut "value1");
458     /// *first = "value3";
459     ///
460     /// assert_eq!(iter.next(), Some(&mut "value2"));
461     /// assert_eq!(iter.next(), None);
462     ///
463     /// assert_eq!(map.get(&"key"), Some(&"value3"));
464     /// ```
get_all_mut<KeyQuery>(&mut self, key: &KeyQuery) -> EntryValuesMut<Key, Value> where Key: Borrow<KeyQuery>, KeyQuery: ?Sized + Eq + Hash,465     pub fn get_all_mut<KeyQuery>(&mut self, key: &KeyQuery) -> EntryValuesMut<Key, Value>
466     where
467         Key: Borrow<KeyQuery>,
468         KeyQuery: ?Sized + Eq + Hash,
469     {
470         let hash = hash_key(&self.build_hasher, &key);
471 
472         match raw_entry(&self.keys, &self.map, hash, key) {
473             Some((_, map_entry)) => EntryValuesMut::from_map_entry(&mut self.values, &map_entry),
474             None => EntryValuesMut::empty(&mut self.values),
475         }
476     }
477 
478     /// Returns a mutable reference to the first value, by insertion order, associated with the
479     /// given key, or `None` if the key is not in the multimap.
480     ///
481     /// Complexity: O(1)
482     ///
483     /// # Examples
484     ///
485     /// ```
486     /// use ordered_multimap::ListOrderedMultimap;
487     ///
488     /// let mut map = ListOrderedMultimap::new();
489     /// assert_eq!(map.get(&"key"), None);
490     ///
491     /// map.insert("key", "value");
492     /// assert_eq!(map.get(&"key"), Some(&"value"));
493     ///
494     /// let mut value = map.get_mut(&"key").unwrap();
495     /// *value = "value2";
496     ///
497     /// assert_eq!(map.get(&"key"), Some(&"value2"));
498     /// ```
get_mut<KeyQuery>(&mut self, key: &KeyQuery) -> Option<&mut Value> where Key: Borrow<KeyQuery>, KeyQuery: ?Sized + Eq + Hash,499     pub fn get_mut<KeyQuery>(&mut self, key: &KeyQuery) -> Option<&mut Value>
500     where
501         Key: Borrow<KeyQuery>,
502         KeyQuery: ?Sized + Eq + Hash,
503     {
504         let hash = hash_key(&self.build_hasher, &key);
505         let (_, map_entry) = raw_entry(&self.keys, &self.map, hash, key)?;
506         self.values
507             .get_mut(map_entry.head_index)
508             .map(|entry| &mut entry.value)
509     }
510 
511     /// Returns a reference to the multimap's [`BuildHasher`].
512     ///
513     /// # Examples
514     ///
515     /// ```
516     /// use ordered_multimap::ListOrderedMultimap;
517     ///
518     /// let map: ListOrderedMultimap<&str, &str> = ListOrderedMultimap::new();
519     /// let hasher = map.hasher();
520     /// ```
hasher(&self) -> &State521     pub fn hasher(&self) -> &State {
522         &self.build_hasher
523     }
524 
525     /// Inserts the key-value pair into the multimap and returns the first value, by insertion
526     /// order, that was already associated with the key.
527     ///
528     /// If the key is not already in the multimap, `None` will be returned. If the key is already in
529     /// the multimap, the insertion ordering of the keys will remain unchanged.
530     ///
531     /// Complexity: O(1) amortized
532     ///
533     /// # Examples
534     ///
535     /// ```
536     /// use ordered_multimap::ListOrderedMultimap;
537     ///
538     /// let mut map = ListOrderedMultimap::new();
539     /// assert!(map.is_empty());
540     ///
541     /// let old_value = map.insert("key", "value");
542     /// assert!(old_value.is_none());
543     /// assert_eq!(map.values_len(), 1);
544     /// assert_eq!(map.get(&"key"), Some(&"value"));
545     ///
546     /// let old_value = map.insert("key", "value2");
547     /// assert_eq!(old_value, Some("value"));
548     /// assert_eq!(map.values_len(), 1);
549     /// assert_eq!(map.get(&"key"), Some(&"value2"));
550     /// ```
insert(&mut self, key: Key, value: Value) -> Option<Value>551     pub fn insert(&mut self, key: Key, value: Value) -> Option<Value> {
552         self.insert_all(key, value).next()
553     }
554 
555     /// Inserts the key-value pair into the multimap and returns an iterator that yields all values
556     /// previously associated with the key by insertion order.
557     ///
558     /// If the key is not already in the multimap, the iterator will yield no values.If the key is
559     /// already in the multimap, the insertion ordering of the keys will remain unchanged.
560     ///
561     /// Complexity: O(1) amortized
562     ///
563     /// # Examples
564     ///
565     /// ```
566     /// use ordered_multimap::ListOrderedMultimap;
567     ///
568     /// let mut map = ListOrderedMultimap::new();
569     /// assert!(map.is_empty());
570     ///
571     /// {
572     ///     let mut old_values = map.insert_all("key", "value");
573     ///     assert_eq!(old_values.next(), None);
574     /// }
575     ///
576     /// assert_eq!(map.values_len(), 1);
577     /// assert_eq!(map.get(&"key"), Some(&"value"));
578     ///
579     /// map.append("key", "value2");
580     ///
581     /// {
582     ///     let mut old_values = map.insert_all("key", "value3");
583     ///     assert_eq!(old_values.next(), Some("value"));
584     ///     assert_eq!(old_values.next(), Some("value2"));
585     ///     assert_eq!(old_values.next(), None);
586     /// }
587     ///
588     /// assert_eq!(map.values_len(), 1);
589     /// assert_eq!(map.get(&"key"), Some(&"value3"));
590     /// ```
insert_all(&mut self, key: Key, value: Value) -> EntryValuesDrain<Key, Value>591     pub fn insert_all(&mut self, key: Key, value: Value) -> EntryValuesDrain<Key, Value> {
592         use self::RawEntryMut::*;
593 
594         let hash = hash_key(&self.build_hasher, &key);
595         let entry = raw_entry_mut(&self.keys, &mut self.map, hash, &key);
596         let build_hasher = &self.build_hasher;
597 
598         match entry {
599             Occupied(mut entry) => {
600                 let key_index = entry.key();
601                 let value_entry = ValueEntry::new(*key_index, value);
602                 let index = self.values.push_back(value_entry);
603                 let map_entry = entry.get_mut();
604                 let iter = EntryValuesDrain::from_map_entry(&mut self.values, &map_entry);
605                 map_entry.reset(index);
606                 iter
607             }
608             Vacant(entry) => {
609                 let key_index = self.keys.push_back(key);
610                 let value_entry = ValueEntry::new(key_index, value);
611                 let index = self.values.push_back(value_entry);
612                 let keys = &self.keys;
613                 entry.insert_with_hasher(hash, key_index, MapEntry::new(index), |&key_index| {
614                     let key = keys.get(key_index).unwrap();
615                     hash_key(build_hasher, key)
616                 });
617                 EntryValuesDrain::empty(&mut self.values)
618             }
619         }
620     }
621 
622     /// Returns whether the multimap is empty.
623     ///
624     /// # Examples
625     ///
626     /// ```
627     /// use ordered_multimap::ListOrderedMultimap;
628     ///
629     /// let mut map = ListOrderedMultimap::new();
630     /// assert!(map.is_empty());
631     ///
632     /// map.insert("key1", "value");
633     /// assert!(!map.is_empty());
634     ///
635     /// map.remove(&"key1");
636     /// assert!(map.is_empty());
637     /// ```
is_empty(&self) -> bool638     pub fn is_empty(&self) -> bool {
639         self.keys.is_empty()
640     }
641 
642     /// Returns an iterator that yields immutable references to all key-value pairs in the multimap
643     /// by insertion order.
644     ///
645     /// # Examples
646     ///
647     /// ```
648     /// use ordered_multimap::ListOrderedMultimap;
649     ///
650     /// let mut map = ListOrderedMultimap::new();
651     /// map.insert("key1", "value1");
652     /// map.insert("key2", "value1");
653     /// map.append(&"key1", "value2");
654     /// map.append(&"key2", "value2");
655     ///
656     /// let mut iter = map.iter();
657     /// assert_eq!(iter.size_hint(), (4, Some(4)));
658     /// assert_eq!(iter.next(), Some((&"key1", &"value1")));
659     /// assert_eq!(iter.next(), Some((&"key2", &"value1")));
660     /// assert_eq!(iter.next(), Some((&"key1", &"value2")));
661     /// assert_eq!(iter.next(), Some((&"key2", &"value2")));
662     /// assert_eq!(iter.next(), None);
663     /// ```
iter(&self) -> Iter<Key, Value>664     pub fn iter(&self) -> Iter<Key, Value> {
665         Iter {
666             keys: &self.keys,
667             iter: self.values.iter(),
668         }
669     }
670 
671     /// Returns an iterator that yields mutable references to all key-value pairs in the multimap by
672     /// insertion order.
673     ///
674     /// Only the values are mutable, the keys are immutable.
675     ///
676     /// # Examples
677     ///
678     /// ```
679     /// use ordered_multimap::ListOrderedMultimap;
680     ///
681     /// let mut map = ListOrderedMultimap::new();
682     /// map.insert("key1", "value1");
683     /// map.insert("key2", "value1");
684     /// map.append(&"key1", "value2");
685     /// map.append(&"key2", "value2");
686     ///
687     /// let mut iter = map.iter_mut();
688     /// assert_eq!(iter.size_hint(), (4, Some(4)));
689     ///
690     /// let first = iter.next().unwrap();
691     /// assert_eq!(first, (&"key1", &mut "value1"));
692     /// *first.1 = "value3";
693     ///
694     /// assert_eq!(iter.next(), Some((&"key2", &mut "value1")));
695     /// assert_eq!(iter.next(), Some((&"key1", &mut "value2")));
696     /// assert_eq!(iter.next(), Some((&"key2", &mut "value2")));
697     /// assert_eq!(iter.next(), None);
698     ///
699     /// assert_eq!(map.get(&"key1"), Some(&"value3"));
700     /// ```
iter_mut(&mut self) -> IterMut<Key, Value>701     pub fn iter_mut(&mut self) -> IterMut<Key, Value> {
702         IterMut {
703             keys: &self.keys,
704             iter: self.values.iter_mut(),
705         }
706     }
707 
708     /// Returns an iterator that yields immutable references to all keys in the multimap by
709     /// insertion order.
710     ///
711     /// Insertion order of keys is determined by the order in which a given key is first inserted
712     /// into the multimap with a value. Any subsequent insertions with that key without first
713     /// removing it will not affect its ordering.
714     ///
715     /// # Examples
716     ///
717     /// ```
718     /// use ordered_multimap::ListOrderedMultimap;
719     ///
720     /// let mut map = ListOrderedMultimap::new();
721     /// map.insert("key1", "value");
722     /// map.insert("key2", "value");
723     /// map.insert("key3", "value");
724     ///
725     /// let mut keys = map.keys();
726     /// assert_eq!(keys.next(), Some(&"key1"));
727     /// assert_eq!(keys.next(), Some(&"key2"));
728     /// assert_eq!(keys.next(), Some(&"key3"));
729     /// assert_eq!(keys.next(), None);
730     /// ```
keys(&self) -> Keys<Key>731     pub fn keys(&self) -> Keys<Key> {
732         Keys(self.keys.iter())
733     }
734 
735     /// Returns the number of keys the multimap can hold without reallocating.
736     ///
737     /// This number is a lower bound, and the multimap may be able to hold more.
738     ///
739     /// # Examples
740     ///
741     /// ```
742     /// use ordered_multimap::ListOrderedMultimap;
743     ///
744     /// let mut map = ListOrderedMultimap::new();
745     /// assert_eq!(map.keys_capacity(), 0);
746     ///
747     /// map.insert("key", "value");
748     /// assert!(map.keys_capacity() > 0);
749     /// ```
keys_capacity(&self) -> usize750     pub fn keys_capacity(&self) -> usize {
751         self.keys.capacity()
752     }
753 
754     /// Returns the number of keys in the multimap.
755     ///
756     /// # Examples
757     ///
758     /// ```
759     /// use ordered_multimap::ListOrderedMultimap;
760     ///
761     /// let mut map = ListOrderedMultimap::new();
762     /// assert_eq!(map.keys_len(), 0);
763     ///
764     /// map.insert("key1", "value");
765     /// map.insert("key2", "value");
766     /// map.insert("key3", "value");
767     /// assert_eq!(map.keys_len(), 3);
768     /// ```
keys_len(&self) -> usize769     pub fn keys_len(&self) -> usize {
770         self.keys.len()
771     }
772 
773     /// Reorganizes the multimap to ensure maximum spatial locality and changes the key and value
774     /// capacities to the provided values.
775     ///
776     /// This function can be used to actually increase the capacity of the multimap.
777     ///
778     /// Complexity: O(|K| + |V|) where |K| is the number of keys and |V| is the number of values.
779     ///
780     /// # Panics
781     ///
782     /// Panics if either of the given minimum capacities are less than their current respective
783     /// lengths.
784     ///
785     /// # Examples
786     ///
787     /// ```
788     /// use ordered_multimap::ListOrderedMultimap;
789     ///
790     /// let mut map = ListOrderedMultimap::with_capacity(10, 10);
791     ///
792     /// map.insert("key1", "value1");
793     /// map.insert("key2", "value2");
794     /// map.append("key2", "value3");
795     /// map.append("key1", "value4");
796     /// map.pack_to(5, 5);
797     ///
798     /// assert_eq!(map.keys_capacity(), 5);
799     /// assert_eq!(map.keys_len(), 2);
800     /// assert_eq!(map.values_capacity(), 5);
801     /// assert_eq!(map.values_len(), 4);
802     /// ```
pack_to(&mut self, keys_minimum_capacity: usize, values_minimum_capacity: usize) where State: Default,803     pub fn pack_to(&mut self, keys_minimum_capacity: usize, values_minimum_capacity: usize)
804     where
805         State: Default,
806     {
807         assert!(
808             keys_minimum_capacity >= self.keys_len(),
809             "cannot pack multimap keys lower than current length"
810         );
811         assert!(
812             values_minimum_capacity >= self.values_len(),
813             "cannot pack multimap values lower than current length"
814         );
815 
816         let key_map = self.keys.pack_to(keys_minimum_capacity);
817         let value_map = self.values.pack_to(values_minimum_capacity);
818         let mut map = HashMap::with_capacity_and_hasher(keys_minimum_capacity, DummyState);
819         let build_hasher = &self.build_hasher;
820 
821         for value_entry in self.values.iter_mut() {
822             value_entry.key_index = key_map[&value_entry.key_index];
823             value_entry.next_index = value_entry.next_index.map(|index| value_map[&index]);
824             value_entry.previous_index = value_entry.previous_index.map(|index| value_map[&index]);
825         }
826 
827         for (key_index, mut map_entry) in self.map.drain() {
828             map_entry.head_index = value_map[&map_entry.head_index];
829             map_entry.tail_index = value_map[&map_entry.tail_index];
830             let key_index = key_map[&key_index];
831             let key = self.keys.get(key_index).unwrap();
832             let hash = hash_key(&self.build_hasher, key);
833 
834             match map.raw_entry_mut().from_hash(hash, |_| false) {
835                 RawEntryMut::Vacant(entry) => {
836                     let keys = &self.keys;
837                     entry.insert_with_hasher(hash, key_index, map_entry, |&key_index| {
838                         let key = keys.get(key_index).unwrap();
839                         hash_key(build_hasher, key)
840                     });
841                 }
842                 _ => panic!("expected vacant entry"),
843             }
844         }
845 
846         self.map = map;
847     }
848 
849     /// Reorganizes the multimap to ensure maximum spatial locality and removes any excess key and
850     /// value capacity.
851     ///
852     /// Complexity: O(|K| + |V|) where |K| is the number of keys and |V| is the number of values.
853     ///
854     /// # Examples
855     ///
856     /// ```
857     /// use ordered_multimap::ListOrderedMultimap;
858     ///
859     /// let mut map = ListOrderedMultimap::with_capacity(5, 5);
860     ///
861     /// map.insert("key1", "value1");
862     /// map.insert("key2", "value2");
863     /// map.append("key2", "value3");
864     /// map.append("key1", "value4");
865     /// map.pack_to_fit();
866     ///
867     /// assert_eq!(map.keys_capacity(), 2);
868     /// assert_eq!(map.keys_len(), 2);
869     /// assert_eq!(map.values_capacity(), 4);
870     /// assert_eq!(map.values_len(), 4);
871     /// ```
pack_to_fit(&mut self) where State: Default,872     pub fn pack_to_fit(&mut self)
873     where
874         State: Default,
875     {
876         self.pack_to(self.keys_len(), self.values_len());
877     }
878 
879     /// Returns an iterator that yields immutable references to keys and all associated values with
880     /// those keys as separate iterators. The order of yielded pairs will be the order in which the
881     /// keys were first inserted into the multimap.
882     ///
883     /// # Examples
884     ///
885     /// ```
886     /// use ordered_multimap::ListOrderedMultimap;
887     ///
888     /// let mut map = ListOrderedMultimap::new();
889     ///
890     /// map.insert("key", "value1");
891     /// map.append("key", "value2");
892     ///
893     /// let mut iter = map.pairs();
894     ///
895     /// let (key, mut values) = iter.next().unwrap();
896     /// assert_eq!(key, &"key");
897     /// assert_eq!(values.next(), Some(&"value1"));
898     /// assert_eq!(values.next(), Some(&"value2"));
899     /// assert_eq!(values.next(), None);
900     /// ```
pairs(&self) -> KeyValues<Key, Value, State>901     pub fn pairs(&self) -> KeyValues<Key, Value, State> {
902         KeyValues {
903             build_hasher: &self.build_hasher,
904             keys: &self.keys,
905             iter: self.keys.iter(),
906             map: &self.map,
907             values: &self.values,
908         }
909     }
910 
911     /// Returns an iterator that yields immutable references to keys and mutable references to all
912     /// associated values with those keys as separate iterators. The order of yielded pairs will be
913     /// the order in which the keys were first inserted into the multimap.
914     ///
915     /// # Examples
916     ///
917     /// ```
918     /// use ordered_multimap::ListOrderedMultimap;
919     ///
920     /// let mut map = ListOrderedMultimap::new();
921     ///
922     /// map.insert("key", "value1");
923     /// map.append("key", "value2");
924     ///
925     /// let mut iter = map.pairs_mut();
926     ///
927     /// let (key, mut values) = iter.next().unwrap();
928     /// assert_eq!(key, &"key");
929     /// assert_eq!(values.next(), Some(&mut "value1"));
930     /// assert_eq!(values.next(), Some(&mut "value2"));
931     /// assert_eq!(values.next(), None);
932     /// ```
pairs_mut(&mut self) -> KeyValuesMut<Key, Value, State>933     pub fn pairs_mut(&mut self) -> KeyValuesMut<Key, Value, State> {
934         KeyValuesMut {
935             build_hasher: &self.build_hasher,
936             keys: &self.keys,
937             iter: self.keys.iter(),
938             map: &self.map,
939             values: &mut self.values as *mut _,
940         }
941     }
942 
943     /// Removes the last key-value pair to have been inserted.
944     ///
945     /// Because a single key can be associated with many values, the key returned by this function
946     /// is a [`KeyWrapper`] which can be either owned or borrowed. If the value removed was the only
947     /// value associated with the key, then the key will be returned. Otherwise, a reference to the
948     /// key will be returned.
949     ///
950     /// This function along with [`ListOrderedMultimap::pop_front`] act as replacements for a drain
951     /// iterator since an iterator cannot be done over [`KeyWrapper`].
952     ///
953     /// Complexity: O(1)
954     ///
955     /// # Examples
956     ///
957     /// ```
958     /// use ordered_multimap::ListOrderedMultimap;
959     /// use ordered_multimap::list_ordered_multimap::KeyWrapper;
960     ///
961     /// let mut map = ListOrderedMultimap::new();
962     ///
963     /// map.insert("key", "value1");
964     /// map.append("key", "value2");
965     ///
966     /// let (key, value) = map.pop_back().unwrap();
967     /// assert_eq!(key, KeyWrapper::Borrowed(&"key"));
968     /// assert_eq!(&value, &"value2");
969     ///
970     /// let (key, value) = map.pop_back().unwrap();
971     /// assert_eq!(key, KeyWrapper::Owned("key"));
972     /// assert_eq!(&value, &"value1");
973     /// ```
pop_back(&mut self) -> Option<(KeyWrapper<Key>, Value)>974     pub fn pop_back(&mut self) -> Option<(KeyWrapper<Key>, Value)> {
975         let value_entry = self.values.pop_back()?;
976 
977         let key_wrapper = match value_entry.previous_index {
978             Some(previous_index) => {
979                 let key = self.keys.get(value_entry.key_index).unwrap();
980                 let hash = hash_key(&self.build_hasher, &key);
981 
982                 let mut entry = match raw_entry_mut(&self.keys, &mut self.map, hash, key) {
983                     RawEntryMut::Occupied(entry) => entry,
984                     _ => panic!("expected occupied entry in internal map"),
985                 };
986                 let map_entry = entry.get_mut();
987                 map_entry.length -= 1;
988                 map_entry.tail_index = previous_index;
989 
990                 let previous_value_entry = self.values.get_mut(previous_index).unwrap();
991                 previous_value_entry.next_index = None;
992 
993                 KeyWrapper::Borrowed(key)
994             }
995             None => {
996                 let key = self.keys.remove(value_entry.key_index).unwrap();
997                 let hash = hash_key(&self.build_hasher, &key);
998 
999                 match raw_entry_mut_empty(&self.keys, &mut self.map, hash) {
1000                     RawEntryMut::Occupied(entry) => {
1001                         entry.remove();
1002                     }
1003                     _ => panic!("expectd occupied entry in internal map"),
1004                 }
1005 
1006                 KeyWrapper::Owned(key)
1007             }
1008         };
1009 
1010         Some((key_wrapper, value_entry.value))
1011     }
1012 
1013     /// Removes the first key-value pair to have been inserted.
1014     ///
1015     /// Because a single key can be associated with many values, the key returned by this function
1016     /// is a [`KeyWrapper`] which can be either owned or borrowed. If the value removed was the only
1017     /// value associated with the key, then the key will be returned. Otherwise, a reference to the
1018     /// key will be returned.
1019     ///
1020     /// This function along with [`ListOrderedMultimap::pop_back`] act as replacements for a drain
1021     /// iterator since an iterator cannot be done over [`KeyWrapper`].
1022     ///
1023     /// Complexity: O(1)
1024     ///
1025     /// # Examples
1026     ///
1027     /// ```
1028     /// use ordered_multimap::ListOrderedMultimap;
1029     /// use ordered_multimap::list_ordered_multimap::KeyWrapper;
1030     ///
1031     /// let mut map = ListOrderedMultimap::new();
1032     ///
1033     /// map.insert("key", "value1");
1034     /// map.append("key", "value2");
1035     ///
1036     /// let (key, value) = map.pop_front().unwrap();
1037     /// assert_eq!(key, KeyWrapper::Borrowed(&"key"));
1038     /// assert_eq!(&value, &"value1");
1039     ///
1040     /// let (key, value) = map.pop_front().unwrap();
1041     /// assert_eq!(key, KeyWrapper::Owned("key"));
1042     /// assert_eq!(&value, &"value2");
1043     /// ```
pop_front(&mut self) -> Option<(KeyWrapper<Key>, Value)>1044     pub fn pop_front(&mut self) -> Option<(KeyWrapper<Key>, Value)> {
1045         let value_entry = self.values.pop_front()?;
1046 
1047         let key_wrapper = match value_entry.next_index {
1048             Some(next_index) => {
1049                 let key = self.keys.get(value_entry.key_index).unwrap();
1050                 let hash = hash_key(&self.build_hasher, &key);
1051 
1052                 let mut entry = match raw_entry_mut(&self.keys, &mut self.map, hash, key) {
1053                     RawEntryMut::Occupied(entry) => entry,
1054                     _ => panic!("expected occupied entry in internal map"),
1055                 };
1056                 let map_entry = entry.get_mut();
1057                 map_entry.length -= 1;
1058                 map_entry.head_index = next_index;
1059 
1060                 let next_value_entry = self.values.get_mut(next_index).unwrap();
1061                 next_value_entry.previous_index = None;
1062 
1063                 KeyWrapper::Borrowed(key)
1064             }
1065             None => {
1066                 let key = self.keys.remove(value_entry.key_index).unwrap();
1067                 let hash = hash_key(&self.build_hasher, &key);
1068 
1069                 match raw_entry_mut_empty(&self.keys, &mut self.map, hash) {
1070                     RawEntryMut::Occupied(entry) => {
1071                         entry.remove();
1072                     }
1073                     _ => panic!("expectd occupied entry in internal map"),
1074                 }
1075 
1076                 KeyWrapper::Owned(key)
1077             }
1078         };
1079 
1080         Some((key_wrapper, value_entry.value))
1081     }
1082 
1083     /// Removes all values associated with the given key from the map and returns the first value
1084     /// by insertion order.
1085     ///
1086     /// Complexity: O(1)
1087     ///
1088     /// # Examples
1089     ///
1090     /// ```
1091     /// use ordered_multimap::ListOrderedMultimap;
1092     ///
1093     /// let mut map = ListOrderedMultimap::new();
1094     ///
1095     /// let removed_value = map.remove(&"key");
1096     /// assert_eq!(removed_value, None);
1097     ///
1098     /// map.insert("key", "value");
1099     /// assert_eq!(map.get(&"key"), Some(&"value"));
1100     ///
1101     /// let removed_value = map.remove(&"key");
1102     /// assert_eq!(removed_value, Some("value"));
1103     /// assert_eq!(map.get(&"key"), None);
1104     /// ```
remove<KeyQuery>(&mut self, key: &KeyQuery) -> Option<Value> where Key: Borrow<KeyQuery>, KeyQuery: ?Sized + Eq + Hash,1105     pub fn remove<KeyQuery>(&mut self, key: &KeyQuery) -> Option<Value>
1106     where
1107         Key: Borrow<KeyQuery>,
1108         KeyQuery: ?Sized + Eq + Hash,
1109     {
1110         self.remove_entry(key).map(|(_, value)| value)
1111     }
1112 
1113     /// Removes all values associated with the given key from the map and returns an iterator that
1114     /// yields those values.
1115     ///
1116     /// If the key is not already in the map, the iterator will yield no values.
1117     ///
1118     /// Complexity: O(1)
1119     ///
1120     /// # Examples
1121     ///
1122     /// ```
1123     /// use ordered_multimap::ListOrderedMultimap;
1124     ///
1125     /// let mut map = ListOrderedMultimap::new();
1126     ///
1127     /// {
1128     ///     let mut removed_values = map.remove_all(&"key");
1129     ///     assert_eq!(removed_values.next(), None);
1130     /// }
1131     ///
1132     /// map.insert("key", "value1");
1133     /// map.append("key", "value2");
1134     /// assert_eq!(map.get(&"key"), Some(&"value1"));
1135     ///
1136     /// {
1137     ///     let mut removed_values = map.remove_all(&"key");
1138     ///     assert_eq!(removed_values.next(), Some("value1"));
1139     ///     assert_eq!(removed_values.next(), Some("value2"));
1140     ///     assert_eq!(removed_values.next(), None);
1141     /// }
1142     ///
1143     /// assert_eq!(map.get(&"key"), None);
1144     /// ```
remove_all<KeyQuery>(&mut self, key: &KeyQuery) -> EntryValuesDrain<Key, Value> where Key: Borrow<KeyQuery>, KeyQuery: ?Sized + Eq + Hash,1145     pub fn remove_all<KeyQuery>(&mut self, key: &KeyQuery) -> EntryValuesDrain<Key, Value>
1146     where
1147         Key: Borrow<KeyQuery>,
1148         KeyQuery: ?Sized + Eq + Hash,
1149     {
1150         use self::RawEntryMut::*;
1151 
1152         let hash = hash_key(&self.build_hasher, &key);
1153         let entry = raw_entry_mut(&self.keys, &mut self.map, hash, key);
1154 
1155         match entry {
1156             Occupied(entry) => {
1157                 let (key_index, map_entry) = entry.remove_entry();
1158                 self.keys.remove(key_index).unwrap();
1159                 EntryValuesDrain::from_map_entry(&mut self.values, &map_entry)
1160             }
1161             Vacant(_) => EntryValuesDrain::empty(&mut self.values),
1162         }
1163     }
1164 
1165     /// Removes all values associated with the given key from the map and returns the key and first
1166     /// value.
1167     ///
1168     /// If the key is not already in the map, then `None` will be returned.
1169     ///
1170     /// Complexity: O(1)
1171     ///
1172     /// # Examples
1173     ///
1174     /// ```
1175     /// use ordered_multimap::ListOrderedMultimap;
1176     ///
1177     /// let mut map = ListOrderedMultimap::new();
1178     ///
1179     /// let entry = map.remove_entry(&"key");
1180     /// assert_eq!(entry, None);
1181     ///
1182     /// map.insert("key", "value");
1183     /// assert_eq!(map.get(&"key"), Some(&"value"));
1184     ///
1185     /// let entry = map.remove_entry(&"key");
1186     /// assert_eq!(entry, Some(("key", "value")));
1187     /// assert_eq!(map.get(&"key"), None);
1188     /// ```
remove_entry<KeyQuery>(&mut self, key: &KeyQuery) -> Option<(Key, Value)> where Key: Borrow<KeyQuery>, KeyQuery: ?Sized + Eq + Hash,1189     pub fn remove_entry<KeyQuery>(&mut self, key: &KeyQuery) -> Option<(Key, Value)>
1190     where
1191         Key: Borrow<KeyQuery>,
1192         KeyQuery: ?Sized + Eq + Hash,
1193     {
1194         let (key, mut iter) = self.remove_entry_all(key)?;
1195         Some((key, iter.next().unwrap()))
1196     }
1197 
1198     /// Removes all values associated with the given key from the map and returns the key and an
1199     /// iterator that yields those values.
1200     ///
1201     /// If the key is not already in the map, then `None` will be returned.
1202     ///
1203     /// Complexity: O(1)
1204     ///
1205     /// # Examples
1206     ///
1207     /// ```
1208     /// use ordered_multimap::ListOrderedMultimap;
1209     ///
1210     /// let mut map = ListOrderedMultimap::new();
1211     ///
1212     /// {
1213     ///     let entry = map.remove_entry_all(&"key");
1214     ///     assert!(entry.is_none());
1215     /// }
1216     ///
1217     /// map.insert("key", "value1");
1218     /// map.append("key", "value2");
1219     /// assert_eq!(map.get(&"key"), Some(&"value1"));
1220     ///
1221     /// {
1222     ///     let (key, mut iter) = map.remove_entry_all(&"key").unwrap();
1223     ///     assert_eq!(key, "key");
1224     ///     assert_eq!(iter.next(), Some("value1"));
1225     ///     assert_eq!(iter.next(), Some("value2"));
1226     ///     assert_eq!(iter.next(), None);
1227     /// }
1228     ///
1229     /// assert_eq!(map.get(&"key"), None);
1230     /// ```
remove_entry_all<KeyQuery>( &mut self, key: &KeyQuery, ) -> Option<(Key, EntryValuesDrain<Key, Value>)> where Key: Borrow<KeyQuery>, KeyQuery: ?Sized + Eq + Hash,1231     pub fn remove_entry_all<KeyQuery>(
1232         &mut self,
1233         key: &KeyQuery,
1234     ) -> Option<(Key, EntryValuesDrain<Key, Value>)>
1235     where
1236         Key: Borrow<KeyQuery>,
1237         KeyQuery: ?Sized + Eq + Hash,
1238     {
1239         let hash = hash_key(&self.build_hasher, &key);
1240         let entry = raw_entry_mut(&self.keys, &mut self.map, hash, key);
1241 
1242         match entry {
1243             RawEntryMut::Occupied(entry) => {
1244                 let (key_index, map_entry) = entry.remove_entry();
1245                 let key = self.keys.remove(key_index).unwrap();
1246                 let iter = EntryValuesDrain::from_map_entry(&mut self.values, &map_entry);
1247                 Some((key, iter))
1248             }
1249             _ => None,
1250         }
1251     }
1252 
1253     /// Reserves additional capacity such that more keys can be stored in the multimap.
1254     ///
1255     /// If the existing capacity minus the current length is enough to satisfy the additional
1256     /// capacity, the capacity will remain unchanged.
1257     ///
1258     /// If the capacity is increased, the capacity may be increased by more than what was requested.
1259     ///
1260     /// # Examples
1261     ///
1262     /// ```
1263     /// use ordered_multimap::ListOrderedMultimap;
1264     ///
1265     /// let mut map = ListOrderedMultimap::with_capacity(1, 1);
1266     ///
1267     /// map.insert("key", "value");
1268     /// assert_eq!(map.keys_capacity(), 1);
1269     ///
1270     /// map.reserve_keys(10);
1271     /// assert!(map.keys_capacity() >= 11);
1272     /// assert_eq!(map.get(&"key"), Some(&"value"));
1273     /// ```
reserve_keys(&mut self, additional_capacity: usize)1274     pub fn reserve_keys(&mut self, additional_capacity: usize) {
1275         if self.keys.capacity() - self.keys.len() >= additional_capacity {
1276             return;
1277         }
1278 
1279         let capacity = self.map.capacity() + additional_capacity;
1280         let mut map = HashMap::with_capacity_and_hasher(capacity, DummyState);
1281 
1282         for (key_index, map_entry) in self.map.drain() {
1283             let key = self.keys.get(key_index).unwrap();
1284             let hash = hash_key(&self.build_hasher, key);
1285             let entry = match raw_entry_mut(&self.keys, &mut map, hash, key) {
1286                 RawEntryMut::Vacant(entry) => entry,
1287                 _ => panic!("expected vacant entry"),
1288             };
1289             entry.insert_hashed_nocheck(hash, key_index, map_entry);
1290         }
1291 
1292         self.keys.reserve(additional_capacity);
1293         self.map = map;
1294     }
1295 
1296     /// Reserves additional capacity such that more values can be stored in the multimap.
1297     ///
1298     /// If the existing capacity minus the current length is enough to satisfy the additional
1299     /// capacity, the capacity will remain unchanged.
1300     ///
1301     /// If the capacity is increased, the capacity may be increased by more than what was requested.
1302     ///
1303     /// # Examples
1304     ///
1305     /// ```
1306     /// use ordered_multimap::ListOrderedMultimap;
1307     ///
1308     /// let mut map = ListOrderedMultimap::with_capacity(1, 1);
1309     ///
1310     /// map.insert("key", "value");
1311     /// assert_eq!(map.values_capacity(), 1);
1312     ///
1313     /// map.reserve_values(10);
1314     /// assert!(map.values_capacity() >= 11);
1315     /// ```
reserve_values(&mut self, additional_capacity: usize)1316     pub fn reserve_values(&mut self, additional_capacity: usize) {
1317         self.values.reserve(additional_capacity);
1318     }
1319 
1320     /// Keeps all key-value pairs that satisfy the given predicate function.
1321     ///
1322     /// Complexity: O(|V|) where |V| is the number of values
1323     ///
1324     /// # Examples
1325     ///
1326     /// ```
1327     /// use ordered_multimap::ListOrderedMultimap;
1328     ///
1329     /// let mut map = ListOrderedMultimap::new();
1330     ///
1331     /// map.insert("key1", 1);
1332     /// map.insert("key2", 5);
1333     /// map.append("key1", -1);
1334     /// map.insert("key3", -10);
1335     ///
1336     /// map.retain(|_, &mut value| value >= 0);
1337     ///
1338     /// let mut iter = map.iter();
1339     /// assert_eq!(iter.next(), Some((&"key1", &1)));
1340     /// assert_eq!(iter.next(), Some((&"key2", &5)));
1341     /// assert_eq!(iter.next(), None);
1342     /// ```
retain<Function>(&mut self, function: Function) where Function: FnMut(&Key, &mut Value) -> bool,1343     pub fn retain<Function>(&mut self, function: Function)
1344     where
1345         Function: FnMut(&Key, &mut Value) -> bool,
1346     {
1347         ListOrderedMultimap::retain_helper(
1348             &self.build_hasher,
1349             &mut self.keys,
1350             &mut self.map,
1351             &mut self.values,
1352             function,
1353         );
1354     }
1355 
1356     /// Helper function for [`ListOrderedMultimap::retain`] to deal with borrowing issues.
retain_helper<'map, Function>( build_hasher: &'map State, keys: &'map mut VecList<Key>, map: &'map mut HashMap<Index<Key>, MapEntry<Key, Value>, DummyState>, values: &'map mut VecList<ValueEntry<Key, Value>>, mut function: Function, ) where Function: FnMut(&Key, &mut Value) -> bool,1357     fn retain_helper<'map, Function>(
1358         build_hasher: &'map State,
1359         keys: &'map mut VecList<Key>,
1360         map: &'map mut HashMap<Index<Key>, MapEntry<Key, Value>, DummyState>,
1361         values: &'map mut VecList<ValueEntry<Key, Value>>,
1362         mut function: Function,
1363     ) where
1364         Function: FnMut(&Key, &mut Value) -> bool,
1365     {
1366         let values_ptr = values as *mut VecList<ValueEntry<Key, Value>>;
1367         values.retain(|value_entry| {
1368             let key = keys.get(value_entry.key_index).unwrap();
1369 
1370             if !function(key, &mut value_entry.value) {
1371                 let hash = hash_key(build_hasher, key);
1372                 let mut entry = match raw_entry_mut(keys, map, hash, key) {
1373                     RawEntryMut::Occupied(entry) => entry,
1374                     _ => panic!("expected occupied entry in internal map"),
1375                 };
1376 
1377                 if value_entry.previous_index.is_none() && value_entry.next_index.is_none() {
1378                     entry.remove();
1379                     keys.remove(value_entry.key_index);
1380                 } else {
1381                     let map_entry = entry.get_mut();
1382                     map_entry.length -= 1;
1383 
1384                     if let Some(previous_index) = value_entry.previous_index {
1385                         let previous_value_entry =
1386                             unsafe { (*values_ptr).get_mut(previous_index) }.unwrap();
1387                         previous_value_entry.next_index = value_entry.next_index;
1388                     } else {
1389                         map_entry.head_index = value_entry.next_index.unwrap();
1390                     }
1391 
1392                     if let Some(next_index) = value_entry.next_index {
1393                         let next_value_entry =
1394                             unsafe { (*values_ptr).get_mut(next_index) }.unwrap();
1395                         next_value_entry.previous_index = value_entry.previous_index;
1396                     } else {
1397                         map_entry.tail_index = value_entry.previous_index.unwrap();
1398                     }
1399                 }
1400 
1401                 false
1402             } else {
1403                 true
1404             }
1405         });
1406     }
1407 
1408     /// Returns an iterator that yields immutable references to all values in the multimap by
1409     /// insertion order.
1410     ///
1411     /// # Examples
1412     ///
1413     /// ```
1414     /// use ordered_multimap::ListOrderedMultimap;
1415     ///
1416     /// let mut map = ListOrderedMultimap::new();
1417     /// map.insert("key1", "value1");
1418     /// map.insert("key2", "value1");
1419     /// map.append(&"key1", "value2");
1420     /// map.append(&"key2", "value2");
1421     ///
1422     /// let mut iter = map.values();
1423     /// assert_eq!(iter.size_hint(), (4, Some(4)));
1424     /// assert_eq!(iter.next(), Some(&"value1"));
1425     /// assert_eq!(iter.next(), Some(&"value1"));
1426     /// assert_eq!(iter.next(), Some(&"value2"));
1427     /// assert_eq!(iter.next(), Some(&"value2"));
1428     /// assert_eq!(iter.next(), None);
1429     /// ```
values(&self) -> Values<Key, Value>1430     pub fn values(&self) -> Values<Key, Value> {
1431         Values(self.values.iter())
1432     }
1433 
1434     /// Returns an iterator that yields mutable references to all values in the multimap by
1435     /// insertion order.
1436     ///
1437     /// # Examples
1438     ///
1439     /// ```
1440     /// use ordered_multimap::ListOrderedMultimap;
1441     ///
1442     /// let mut map = ListOrderedMultimap::new();
1443     /// map.insert("key1", "value1");
1444     /// map.insert("key2", "value1");
1445     /// map.append(&"key1", "value2");
1446     /// map.append(&"key2", "value2");
1447     ///
1448     /// let mut iter = map.values_mut();
1449     /// assert_eq!(iter.size_hint(), (4, Some(4)));
1450     ///
1451     /// let first = iter.next().unwrap();
1452     /// assert_eq!(first, &mut "value1");
1453     /// *first = "value3";
1454     ///
1455     /// assert_eq!(iter.next(), Some(&mut "value1"));
1456     /// assert_eq!(iter.next(), Some(&mut "value2"));
1457     /// assert_eq!(iter.next(), Some(&mut "value2"));
1458     /// assert_eq!(iter.next(), None);
1459     ///
1460     /// assert_eq!(map.get(&"key1"), Some(&"value3"));
1461     /// ```
values_mut(&mut self) -> ValuesMut<Key, Value>1462     pub fn values_mut(&mut self) -> ValuesMut<Key, Value> {
1463         ValuesMut(self.values.iter_mut())
1464     }
1465 
1466     /// Returns the number of values the multimap can hold without reallocating.
1467     ///
1468     /// This number is a lower bound, and the multimap may be able to hold more.
1469     ///
1470     /// # Examples
1471     ///
1472     /// ```
1473     /// use ordered_multimap::ListOrderedMultimap;
1474     ///
1475     /// let mut map = ListOrderedMultimap::new();
1476     /// assert_eq!(map.values_capacity(), 0);
1477     ///
1478     /// map.insert("key", "value");
1479     /// assert!(map.values_capacity() > 0);
1480     /// ```
values_capacity(&self) -> usize1481     pub fn values_capacity(&self) -> usize {
1482         self.values.capacity()
1483     }
1484 
1485     /// Returns the total number of values in the multimap across all keys.
1486     ///
1487     /// # Examples
1488     ///
1489     /// ```
1490     /// use ordered_multimap::ListOrderedMultimap;
1491     ///
1492     /// let mut map = ListOrderedMultimap::new();
1493     /// assert_eq!(map.values_len(), 0);
1494     ///
1495     /// map.insert("key1", "value1");
1496     /// assert_eq!(map.values_len(), 1);
1497     ///
1498     /// map.append("key1", "value2");
1499     /// assert_eq!(map.values_len(), 2);
1500     /// ```
values_len(&self) -> usize1501     pub fn values_len(&self) -> usize {
1502         self.values.len()
1503     }
1504 
1505     /// Creates a new multimap with the specified capacities and the given hash builder to hash
1506     /// keys.
1507     ///
1508     /// The multimap will be able to hold at least `key_capacity` keys and `value_capacity` values
1509     /// without reallocating. A capacity of 0 will result in no allocation for the respective
1510     /// container.
1511     ///
1512     /// The `state` is normally randomly generated and is designed to allow multimaps to be
1513     /// resistant to attacks that cause many collisions and very poor performance. Setting it
1514     /// manually using this function can expose a DoS attack vector.
1515     ///
1516     /// # Examples
1517     ///
1518     /// ```
1519     /// use ordered_multimap::ListOrderedMultimap;
1520     /// use std::collections::hash_map::RandomState;
1521     ///
1522     /// let state = RandomState::new();
1523     /// let mut map = ListOrderedMultimap::with_capacity_and_hasher(10, 10, state);
1524     /// map.insert("key", "value");
1525     /// assert_eq!(map.keys_capacity(), 10);
1526     /// assert_eq!(map.values_capacity(), 10);
1527     /// ```
with_capacity_and_hasher( key_capacity: usize, value_capacity: usize, state: State, ) -> ListOrderedMultimap<Key, Value, State>1528     pub fn with_capacity_and_hasher(
1529         key_capacity: usize,
1530         value_capacity: usize,
1531         state: State,
1532     ) -> ListOrderedMultimap<Key, Value, State> {
1533         ListOrderedMultimap {
1534             build_hasher: state,
1535             keys: VecList::with_capacity(key_capacity),
1536             map: HashMap::with_capacity_and_hasher(key_capacity, DummyState),
1537             values: VecList::with_capacity(value_capacity),
1538         }
1539     }
1540 
1541     /// Creates a new multimap with no capacity which will use the given hash builder to hash keys.
1542     ///
1543     /// The `state` is normally randomly generated and is designed to allow multimaps to be
1544     /// resistant to attacks that cause many collisions and very poor performance. Setting it
1545     /// manually using this function can expose a DoS attack vector.
1546     ///
1547     /// # Examples
1548     ///
1549     /// ```
1550     /// use ordered_multimap::ListOrderedMultimap;
1551     /// use std::collections::hash_map::RandomState;
1552     ///
1553     /// let state = RandomState::new();
1554     /// let mut map = ListOrderedMultimap::with_hasher(state);
1555     /// map.insert("key", "value");
1556     /// ```
with_hasher(state: State) -> ListOrderedMultimap<Key, Value, State>1557     pub fn with_hasher(state: State) -> ListOrderedMultimap<Key, Value, State> {
1558         ListOrderedMultimap {
1559             build_hasher: state,
1560             keys: VecList::new(),
1561             map: HashMap::with_hasher(DummyState),
1562             values: VecList::new(),
1563         }
1564     }
1565 }
1566 
1567 impl<Key, Value, State> Debug for ListOrderedMultimap<Key, Value, State>
1568 where
1569     Key: Debug + Eq + Hash,
1570     Value: Debug,
1571     State: BuildHasher,
1572 {
fmt(&self, formatter: &mut Formatter) -> fmt::Result1573     fn fmt(&self, formatter: &mut Formatter) -> fmt::Result {
1574         formatter.debug_map().entries(self.iter()).finish()
1575     }
1576 }
1577 
1578 impl<Key, Value> Default for ListOrderedMultimap<Key, Value, RandomState>
1579 where
1580     Key: Eq + Hash,
1581 {
default() -> Self1582     fn default() -> Self {
1583         ListOrderedMultimap {
1584             build_hasher: RandomState::new(),
1585             keys: VecList::new(),
1586             map: HashMap::with_hasher(DummyState),
1587             values: VecList::new(),
1588         }
1589     }
1590 }
1591 
1592 impl<Key, Value, State> Eq for ListOrderedMultimap<Key, Value, State>
1593 where
1594     Key: Eq + Hash,
1595     Value: PartialEq,
1596     State: BuildHasher,
1597 {
1598 }
1599 
1600 impl<Key, Value, State> Extend<(Key, Value)> for ListOrderedMultimap<Key, Value, State>
1601 where
1602     Key: Eq + Hash,
1603     State: BuildHasher,
1604 {
extend<Iter>(&mut self, iter: Iter) where Iter: IntoIterator<Item = (Key, Value)>,1605     fn extend<Iter>(&mut self, iter: Iter)
1606     where
1607         Iter: IntoIterator<Item = (Key, Value)>,
1608     {
1609         let iter = iter.into_iter();
1610         self.reserve_values(iter.size_hint().0);
1611 
1612         for (key, value) in iter {
1613             self.append(key, value);
1614         }
1615     }
1616 }
1617 
1618 impl<'a, Key, Value, State> Extend<(&'a Key, &'a Value)> for ListOrderedMultimap<Key, Value, State>
1619 where
1620     Key: Copy + Eq + Hash,
1621     Value: Copy,
1622     State: BuildHasher,
1623 {
extend<Iter>(&mut self, iter: Iter) where Iter: IntoIterator<Item = (&'a Key, &'a Value)>,1624     fn extend<Iter>(&mut self, iter: Iter)
1625     where
1626         Iter: IntoIterator<Item = (&'a Key, &'a Value)>,
1627     {
1628         self.extend(iter.into_iter().map(|(&key, &value)| (key, value)));
1629     }
1630 }
1631 
1632 impl<Key, Value, State> FromIterator<(Key, Value)> for ListOrderedMultimap<Key, Value, State>
1633 where
1634     Key: Eq + Hash,
1635     State: BuildHasher + Default,
1636 {
from_iter<Iter>(iter: Iter) -> Self where Iter: IntoIterator<Item = (Key, Value)>,1637     fn from_iter<Iter>(iter: Iter) -> Self
1638     where
1639         Iter: IntoIterator<Item = (Key, Value)>,
1640     {
1641         let mut map = ListOrderedMultimap::with_hasher(State::default());
1642         map.extend(iter);
1643         map
1644     }
1645 }
1646 
1647 impl<Key, Value, State> IntoIterator for ListOrderedMultimap<Key, Value, State>
1648 where
1649     Key: Clone + Eq + Hash,
1650     State: BuildHasher,
1651 {
1652     type IntoIter = IntoIter<Key, Value>;
1653     type Item = (Key, Value);
1654 
into_iter(self) -> Self::IntoIter1655     fn into_iter(self) -> Self::IntoIter {
1656         IntoIter {
1657             keys: self.keys,
1658             iter: self.values.into_iter(),
1659         }
1660     }
1661 }
1662 
1663 impl<'map, Key, Value, State> IntoIterator for &'map ListOrderedMultimap<Key, Value, State>
1664 where
1665     Key: Eq + Hash,
1666     State: BuildHasher,
1667 {
1668     type IntoIter = Iter<'map, Key, Value>;
1669     type Item = (&'map Key, &'map Value);
1670 
into_iter(self) -> Self::IntoIter1671     fn into_iter(self) -> Self::IntoIter {
1672         self.iter()
1673     }
1674 }
1675 
1676 impl<'map, Key, Value, State> IntoIterator for &'map mut ListOrderedMultimap<Key, Value, State>
1677 where
1678     Key: Eq + Hash,
1679     State: BuildHasher,
1680 {
1681     type IntoIter = IterMut<'map, Key, Value>;
1682     type Item = (&'map Key, &'map mut Value);
1683 
into_iter(self) -> Self::IntoIter1684     fn into_iter(self) -> Self::IntoIter {
1685         self.iter_mut()
1686     }
1687 }
1688 
1689 impl<Key, Value, State> PartialEq for ListOrderedMultimap<Key, Value, State>
1690 where
1691     Key: Eq + Hash,
1692     Value: PartialEq,
1693     State: BuildHasher,
1694 {
eq(&self, other: &ListOrderedMultimap<Key, Value, State>) -> bool1695     fn eq(&self, other: &ListOrderedMultimap<Key, Value, State>) -> bool {
1696         if self.keys_len() != other.keys_len() || self.values_len() != other.values_len() {
1697             return false;
1698         }
1699 
1700         self.iter().eq(other.iter())
1701     }
1702 }
1703 
1704 /// A wrapper around a key that is either borrowed or owned.
1705 ///
1706 /// This type is similar to [`std::borrow::Cow`] but does not require a [`Clone`] trait bound on the
1707 /// key.
1708 #[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
1709 pub enum KeyWrapper<'map, Key> {
1710     /// An immutable reference to a key. This implies that the key is still associated to at least
1711     /// one value in the multimap.
1712     Borrowed(&'map Key),
1713 
1714     /// An owned key. This will occur when a key is no longer associated with any values in the
1715     /// multimap.
1716     Owned(Key),
1717 }
1718 
1719 impl<'map, Key> KeyWrapper<'map, Key> {
1720     /// If the key wrapped is owned, it is returned. Otherwise, the borrowed key is cloned and
1721     /// returned.
1722     ///
1723     /// # Examples
1724     ///
1725     /// ```
1726     /// use ordered_multimap::list_ordered_multimap::KeyWrapper;
1727     ///
1728     /// let borrowed = KeyWrapper::Borrowed(&0);
1729     /// assert_eq!(borrowed.into_owned(), 0);
1730     ///
1731     /// let owned = KeyWrapper::Owned(0);
1732     /// assert_eq!(borrowed.into_owned(), 0);
1733     /// ```
into_owned(self) -> Key where Key: Clone,1734     pub fn into_owned(self) -> Key
1735     where
1736         Key: Clone,
1737     {
1738         use self::KeyWrapper::*;
1739 
1740         match self {
1741             Borrowed(key) => key.clone(),
1742             Owned(key) => key,
1743         }
1744     }
1745 
1746     /// Returns whether the wrapped key is borrowed.
1747     ///
1748     /// # Examples
1749     ///
1750     /// ```
1751     /// use ordered_multimap::list_ordered_multimap::KeyWrapper;
1752     ///
1753     /// let borrowed = KeyWrapper::Borrowed(&0);
1754     /// assert!(borrowed.is_borrowed());
1755     ///
1756     /// let owned = KeyWrapper::Owned(0);
1757     /// assert!(!owned.is_borrowed());
1758     /// ```
is_borrowed(&self) -> bool1759     pub fn is_borrowed(&self) -> bool {
1760         match self {
1761             KeyWrapper::Borrowed(_) => true,
1762             _ => false,
1763         }
1764     }
1765 
1766     /// Returns whether the wrapped key is owned.
1767     ///
1768     /// # Examples
1769     ///
1770     /// ```
1771     /// use ordered_multimap::list_ordered_multimap::KeyWrapper;
1772     ///
1773     /// let borrowed = KeyWrapper::Borrowed(&0);
1774     /// assert!(!borrowed.is_owned());
1775     ///
1776     /// let owned = KeyWrapper::Owned(0);
1777     /// assert!(owned.is_owned());
1778     /// ```
is_owned(&self) -> bool1779     pub fn is_owned(&self) -> bool {
1780         match self {
1781             KeyWrapper::Owned(_) => true,
1782             _ => false,
1783         }
1784     }
1785 }
1786 
1787 /// The value type of the internal hash map.
1788 #[derive(Clone)]
1789 struct MapEntry<Key, Value> {
1790     /// The index of the first value for this entry.
1791     head_index: Index<ValueEntry<Key, Value>>,
1792 
1793     /// The number of values for this entry.
1794     length: usize,
1795 
1796     /// The index of the last value for this entry.
1797     tail_index: Index<ValueEntry<Key, Value>>,
1798 }
1799 
1800 impl<Key, Value> MapEntry<Key, Value> {
1801     /// Convenience function for adding a new value to the entry.
append(&mut self, index: Index<ValueEntry<Key, Value>>)1802     pub fn append(&mut self, index: Index<ValueEntry<Key, Value>>) {
1803         self.length += 1;
1804         self.tail_index = index;
1805     }
1806 
1807     /// Convenience function for creating a new multimap entry.
new(index: Index<ValueEntry<Key, Value>>) -> Self1808     pub fn new(index: Index<ValueEntry<Key, Value>>) -> Self {
1809         MapEntry {
1810             head_index: index,
1811             length: 1,
1812             tail_index: index,
1813         }
1814     }
1815 
1816     /// Convenience function for resetting the entry to contain only one value.
reset(&mut self, index: Index<ValueEntry<Key, Value>>)1817     pub fn reset(&mut self, index: Index<ValueEntry<Key, Value>>) {
1818         self.head_index = index;
1819         self.length = 1;
1820         self.tail_index = index;
1821     }
1822 }
1823 
1824 /// The value entry that is contained within the internal values list.
1825 #[derive(Clone)]
1826 struct ValueEntry<Key, Value> {
1827     /// The index of the key in the key list for this entry.
1828     key_index: Index<Key>,
1829 
1830     /// The index of the next value with the same key.
1831     next_index: Option<Index<ValueEntry<Key, Value>>>,
1832 
1833     /// The index of the previous value with the same key.
1834     previous_index: Option<Index<ValueEntry<Key, Value>>>,
1835 
1836     /// The actual value stored in this entry.
1837     value: Value,
1838 }
1839 
1840 impl<Key, Value> ValueEntry<Key, Value> {
1841     /// Convenience function for creating a new value entry.
new(key_index: Index<Key>, value: Value) -> Self1842     pub fn new(key_index: Index<Key>, value: Value) -> Self {
1843         ValueEntry {
1844             key_index,
1845             next_index: None,
1846             previous_index: None,
1847             value,
1848         }
1849     }
1850 }
1851 
1852 /// A view into a single entry in the multimap, which may either be vacant or occupied.
1853 pub enum Entry<'map, Key, Value, State = RandomState> {
1854     /// An occupied entry associated with one or more values.
1855     Occupied(OccupiedEntry<'map, Key, Value>),
1856 
1857     /// A vacant entry with no associated values.
1858     Vacant(VacantEntry<'map, Key, Value, State>),
1859 }
1860 
1861 impl<'map, Key, Value, State> Entry<'map, Key, Value, State>
1862 where
1863     Key: Eq + Hash,
1864     State: BuildHasher,
1865 {
1866     /// Calls the given function with a mutable reference to the first value of this entry, by
1867     /// insertion order, if it is vacant, otherwise this function is a no-op.
1868     ///
1869     /// # Examples
1870     ///
1871     /// ```
1872     /// use ordered_multimap::ListOrderedMultimap;
1873     ///
1874     /// let mut map = ListOrderedMultimap::new();
1875     ///
1876     /// map.entry("key")
1877     ///     .and_modify(|value| *value += 1)
1878     ///     .or_insert(42);
1879     /// assert_eq!(map.get(&"key"), Some(&42));
1880     ///
1881     /// map.entry("key")
1882     ///     .and_modify(|value| *value += 1)
1883     ///     .or_insert(42);
1884     /// assert_eq!(map.get(&"key"), Some(&43));
1885     /// ```
and_modify<Function>(self, function: Function) -> Self where Function: FnOnce(&mut Value),1886     pub fn and_modify<Function>(self, function: Function) -> Self
1887     where
1888         Function: FnOnce(&mut Value),
1889     {
1890         use self::Entry::*;
1891 
1892         match self {
1893             Occupied(mut entry) => {
1894                 function(entry.get_mut());
1895                 Occupied(entry)
1896             }
1897             Vacant(entry) => Vacant(entry),
1898         }
1899     }
1900 
1901     /// If the entry is vacant, the given value will be inserted into it and a mutable reference to
1902     /// that value will be returned. Otherwise, a mutable reference to the first value, by insertion
1903     /// order, will be returned.
1904     ///
1905     /// # Examples
1906     ///
1907     /// ```
1908     /// use ordered_multimap::ListOrderedMultimap;
1909     ///
1910     /// let mut map = ListOrderedMultimap::new();
1911     /// map.insert("key", "value1");
1912     ///
1913     /// let value = map.entry("key").or_insert("value2");
1914     /// assert_eq!(value, &"value1");
1915     ///
1916     /// let value = map.entry("key2").or_insert("value2");
1917     /// assert_eq!(value, &"value2");
1918     /// ```
or_insert(self, value: Value) -> &'map mut Value1919     pub fn or_insert(self, value: Value) -> &'map mut Value {
1920         use self::Entry::*;
1921 
1922         match self {
1923             Occupied(entry) => entry.into_mut(),
1924             Vacant(entry) => entry.insert(value),
1925         }
1926     }
1927 
1928     /// If the entry is vacant, the given value will be inserted into it and the new occupied entry
1929     /// will be returned. Otherwise, the existing occupied entry will be returned.
1930     ///
1931     /// # Examples
1932     ///
1933     /// ```
1934     /// use ordered_multimap::ListOrderedMultimap;
1935     ///
1936     /// let mut map = ListOrderedMultimap::new();
1937     /// map.insert("key", "value1");
1938     ///
1939     /// let entry = map.entry("key").or_insert_entry("value2");
1940     /// assert_eq!(entry.into_mut(), &"value1");
1941     ///
1942     /// let entry = map.entry("key2").or_insert_entry("value2");
1943     /// assert_eq!(entry.into_mut(), &"value2");
1944     /// ```
or_insert_entry(self, value: Value) -> OccupiedEntry<'map, Key, Value>1945     pub fn or_insert_entry(self, value: Value) -> OccupiedEntry<'map, Key, Value> {
1946         use self::Entry::*;
1947 
1948         match self {
1949             Occupied(entry) => entry,
1950             Vacant(entry) => entry.insert_entry(value),
1951         }
1952     }
1953 
1954     /// If the entry is vacant, the value returned from the given function will be inserted into it
1955     /// and a mutable reference to that value will be returned. Otherwise, a mutable reference to
1956     /// the first value, by insertion order, will be returned.
1957     ///
1958     /// # Examples
1959     ///
1960     /// ```
1961     /// use ordered_multimap::ListOrderedMultimap;
1962     ///
1963     /// let mut map = ListOrderedMultimap::new();
1964     /// map.insert("key", "value1");
1965     ///
1966     /// let value = map.entry("key").or_insert_with(|| "value2");
1967     /// assert_eq!(value, &"value1");
1968     ///
1969     /// let value = map.entry("key2").or_insert_with(|| "value2");
1970     /// assert_eq!(value, &"value2");
1971     /// ```
or_insert_with<Function>(self, function: Function) -> &'map mut Value where Function: FnOnce() -> Value,1972     pub fn or_insert_with<Function>(self, function: Function) -> &'map mut Value
1973     where
1974         Function: FnOnce() -> Value,
1975     {
1976         use self::Entry::*;
1977 
1978         match self {
1979             Occupied(entry) => entry.into_mut(),
1980             Vacant(entry) => entry.insert(function()),
1981         }
1982     }
1983 
1984     /// If the entry is vacant, the value returned from the given function will be inserted into it
1985     /// and the new occupied entry will be returned. Otherwise, the existing occupied entry will be
1986     /// returned.
1987     ///
1988     /// # Examples
1989     ///
1990     /// ```
1991     /// use ordered_multimap::ListOrderedMultimap;
1992     ///
1993     /// let mut map = ListOrderedMultimap::new();
1994     /// map.insert("key", "value1");
1995     ///
1996     /// let entry = map.entry("key").or_insert_with_entry(|| "value2");
1997     /// assert_eq!(entry.into_mut(), &"value1");
1998     ///
1999     /// let entry = map.entry("key2").or_insert_with_entry(|| "value2");
2000     /// assert_eq!(entry.into_mut(), &"value2");
2001     /// ```
or_insert_with_entry<Function>( self, function: Function, ) -> OccupiedEntry<'map, Key, Value> where Function: FnOnce() -> Value,2002     pub fn or_insert_with_entry<Function>(
2003         self,
2004         function: Function,
2005     ) -> OccupiedEntry<'map, Key, Value>
2006     where
2007         Function: FnOnce() -> Value,
2008     {
2009         use self::Entry::*;
2010 
2011         match self {
2012             Occupied(entry) => entry,
2013             Vacant(entry) => entry.insert_entry(function()),
2014         }
2015     }
2016 }
2017 
2018 impl<'map, Key, Value, State> Debug for Entry<'map, Key, Value, State>
2019 where
2020     Key: Debug,
2021     State: BuildHasher,
2022     Value: Debug,
2023 {
fmt(&self, formatter: &mut Formatter) -> fmt::Result2024     fn fmt(&self, formatter: &mut Formatter) -> fmt::Result {
2025         use self::Entry::*;
2026 
2027         match self {
2028             Occupied(entry) => entry.fmt(formatter),
2029             Vacant(entry) => entry.fmt(formatter),
2030         }
2031     }
2032 }
2033 
2034 /// A view into an occupied entry in the multimap.
2035 pub struct OccupiedEntry<'map, Key, Value> {
2036     entry: RawOccupiedEntryMut<'map, Index<Key>, MapEntry<Key, Value>, DummyState>,
2037 
2038     keys: &'map mut VecList<Key>,
2039 
2040     values: &'map mut VecList<ValueEntry<Key, Value>>,
2041 }
2042 
2043 #[allow(clippy::len_without_is_empty)]
2044 impl<'map, Key, Value> OccupiedEntry<'map, Key, Value> {
2045     /// # Examples
2046     ///
2047     /// ```
2048     /// use ordered_multimap::ListOrderedMultimap;
2049     /// use ordered_multimap::list_ordered_multimap::Entry;
2050     ///
2051     /// let mut map = ListOrderedMultimap::new();
2052     /// map.insert("key", "value1");
2053     ///
2054     /// let mut entry = match map.entry("key") {
2055     ///     Entry::Occupied(entry) => entry,
2056     ///     _ => panic!("expected occupied entry")
2057     /// };
2058     ///
2059     /// entry.append("value2");
2060     ///
2061     /// let mut iter = map.get_all(&"key");
2062     /// assert_eq!(iter.next(), Some(&"value1"));
2063     /// assert_eq!(iter.next(), Some(&"value2"));
2064     /// assert_eq!(iter.next(), None);
2065     /// ```
append(&mut self, value: Value)2066     pub fn append(&mut self, value: Value) {
2067         let key_index = *self.entry.key();
2068         let map_entry = self.entry.get_mut();
2069         let mut value_entry = ValueEntry::new(key_index, value);
2070         value_entry.previous_index = Some(map_entry.tail_index);
2071         let index = self.values.push_back(value_entry);
2072         self.values
2073             .get_mut(map_entry.tail_index)
2074             .unwrap()
2075             .next_index = Some(index);
2076         map_entry.length += 1;
2077         map_entry.tail_index = index;
2078     }
2079 
2080     /// # Examples
2081     ///
2082     /// ```
2083     /// use ordered_multimap::ListOrderedMultimap;
2084     /// use ordered_multimap::list_ordered_multimap::Entry;
2085     ///
2086     /// let mut map = ListOrderedMultimap::new();
2087     /// map.insert("key", "value");
2088     ///
2089     /// let mut entry = match map.entry("key") {
2090     ///     Entry::Occupied(entry) => entry,
2091     ///     _ => panic!("expected occupied entry")
2092     /// };
2093     ///
2094     /// assert_eq!(entry.get(), &"value");
2095     /// ```
get(&self) -> &Value2096     pub fn get(&self) -> &Value {
2097         let index = self.entry.get().head_index;
2098         &self.values.get(index).unwrap().value
2099     }
2100 
2101     /// # Examples
2102     ///
2103     /// ```
2104     /// use ordered_multimap::ListOrderedMultimap;
2105     /// use ordered_multimap::list_ordered_multimap::Entry;
2106     ///
2107     /// let mut map = ListOrderedMultimap::new();
2108     /// map.insert("key", "value");
2109     ///
2110     /// let mut entry = match map.entry("key") {
2111     ///     Entry::Occupied(entry) => entry,
2112     ///     _ => panic!("expected occupied entry")
2113     /// };
2114     ///
2115     /// assert_eq!(entry.get(), &mut "value");
2116     /// ```
get_mut(&mut self) -> &mut Value2117     pub fn get_mut(&mut self) -> &mut Value {
2118         let index = self.entry.get().head_index;
2119         &mut self.values.get_mut(index).unwrap().value
2120     }
2121 
2122     /// # Examples
2123     ///
2124     /// ```
2125     /// use ordered_multimap::ListOrderedMultimap;
2126     /// use ordered_multimap::list_ordered_multimap::Entry;
2127     ///
2128     /// let mut map = ListOrderedMultimap::new();
2129     /// map.insert("key", "value1");
2130     ///
2131     /// let mut entry = match map.entry("key") {
2132     ///     Entry::Occupied(entry) => entry,
2133     ///     _ => panic!("expected occupied entry")
2134     /// };
2135     ///
2136     /// entry.insert("value2");
2137     ///
2138     /// assert_eq!(map.get(&"key"), Some(&"value2"));
2139     /// ```
insert(&mut self, value: Value) -> Value2140     pub fn insert(&mut self, value: Value) -> Value {
2141         let key_index = *self.entry.key();
2142         let map_entry = self.entry.get_mut();
2143         let first_index = map_entry.head_index;
2144         let mut entry = self.values.remove(first_index).unwrap();
2145         let first_value = entry.value;
2146 
2147         while let Some(next_index) = entry.next_index {
2148             entry = self.values.remove(next_index).unwrap();
2149         }
2150 
2151         let value_entry = ValueEntry::new(key_index, value);
2152         let index = self.values.push_back(value_entry);
2153         map_entry.head_index = index;
2154         map_entry.length = 1;
2155         map_entry.tail_index = index;
2156         first_value
2157     }
2158 
2159     /// # Examples
2160     ///
2161     /// ```
2162     /// use ordered_multimap::ListOrderedMultimap;
2163     /// use ordered_multimap::list_ordered_multimap::Entry;
2164     ///
2165     /// let mut map = ListOrderedMultimap::new();
2166     /// map.insert("key", "value1");
2167     ///
2168     /// let mut entry = match map.entry("key") {
2169     ///     Entry::Occupied(entry) => entry,
2170     ///     _ => panic!("expected occupied entry")
2171     /// };
2172     ///
2173     /// entry.append("value2");
2174     ///
2175     /// let mut iter = entry.insert_all("value3");
2176     /// assert_eq!(iter.next(), Some("value1"));
2177     /// assert_eq!(iter.next(), Some("value2"));
2178     /// assert_eq!(iter.next(), None);
2179     /// ```
insert_all(&mut self, value: Value) -> EntryValuesDrain<Key, Value>2180     pub fn insert_all(&mut self, value: Value) -> EntryValuesDrain<Key, Value> {
2181         let key_index = *self.entry.key();
2182         let map_entry = self.entry.get_mut();
2183         let value_entry = ValueEntry::new(key_index, value);
2184         let index = self.values.push_back(value_entry);
2185         let iter = EntryValuesDrain::from_map_entry(&mut self.values, &map_entry);
2186         map_entry.reset(index);
2187         iter
2188     }
2189 
2190     /// # Examples
2191     ///
2192     /// ```
2193     /// use ordered_multimap::ListOrderedMultimap;
2194     /// use ordered_multimap::list_ordered_multimap::Entry;
2195     ///
2196     /// let mut map = ListOrderedMultimap::new();
2197     /// map.insert("key", "value");
2198     ///
2199     /// let mut entry = match map.entry("key") {
2200     ///     Entry::Occupied(entry) => entry,
2201     ///     _ => panic!("expected occupied entry")
2202     /// };
2203     ///
2204     /// assert_eq!(entry.into_mut(), &mut "value");
2205     /// ```
into_mut(mut self) -> &'map mut Value2206     pub fn into_mut(mut self) -> &'map mut Value {
2207         let index = self.entry.get_mut().head_index;
2208         &mut self.values.get_mut(index).unwrap().value
2209     }
2210 
2211     /// # Examples
2212     ///
2213     /// ```
2214     /// use ordered_multimap::ListOrderedMultimap;
2215     /// use ordered_multimap::list_ordered_multimap::Entry;
2216     ///
2217     /// let mut map = ListOrderedMultimap::new();
2218     /// map.insert("key", "value1");
2219     ///
2220     /// let mut entry = match map.entry("key") {
2221     ///     Entry::Occupied(entry) => entry,
2222     ///     _ => panic!("expected occupied entry")
2223     /// };
2224     ///
2225     /// entry.append("value2");
2226     ///
2227     /// let mut iter = entry.iter();
2228     /// assert_eq!(iter.next(), Some(&"value1"));
2229     /// assert_eq!(iter.next(), Some(&"value2"));
2230     /// assert_eq!(iter.next(), None);
2231     /// ```
iter(&self) -> EntryValues<Key, Value>2232     pub fn iter(&self) -> EntryValues<Key, Value> {
2233         let map_entry = self.entry.get();
2234         EntryValues::from_map_entry(&self.values, &map_entry)
2235     }
2236 
2237     /// # Examples
2238     ///
2239     /// ```
2240     /// use ordered_multimap::ListOrderedMultimap;
2241     /// use ordered_multimap::list_ordered_multimap::Entry;
2242     ///
2243     /// let mut map = ListOrderedMultimap::new();
2244     /// map.insert("key", "value1");
2245     ///
2246     /// let mut entry = match map.entry("key") {
2247     ///     Entry::Occupied(entry) => entry,
2248     ///     _ => panic!("expected occupied entry")
2249     /// };
2250     ///
2251     /// entry.append("value2");
2252     ///
2253     /// let mut iter = entry.iter_mut();
2254     /// assert_eq!(iter.next(), Some(&mut "value1"));
2255     /// assert_eq!(iter.next(), Some(&mut "value2"));
2256     /// assert_eq!(iter.next(), None);
2257     /// ```
iter_mut(&mut self) -> EntryValuesMut<Key, Value>2258     pub fn iter_mut(&mut self) -> EntryValuesMut<Key, Value> {
2259         let map_entry = self.entry.get_mut();
2260         EntryValuesMut::from_map_entry(&mut self.values, &map_entry)
2261     }
2262 
2263     /// # Examples
2264     ///
2265     /// ```
2266     /// use ordered_multimap::ListOrderedMultimap;
2267     /// use ordered_multimap::list_ordered_multimap::Entry;
2268     ///
2269     /// let mut map = ListOrderedMultimap::new();
2270     /// map.insert("key", "value1");
2271     ///
2272     /// let mut entry = match map.entry("key") {
2273     ///     Entry::Occupied(entry) => entry,
2274     ///     _ => panic!("expected occupied entry")
2275     /// };
2276     ///
2277     /// assert_eq!(entry.key(), &"key");
2278     /// ```
key(&self) -> &Key2279     pub fn key(&self) -> &Key {
2280         let key_index = self.entry.key();
2281         self.keys.get(*key_index).unwrap()
2282     }
2283 
2284     /// # Examples
2285     ///
2286     /// ```
2287     /// use ordered_multimap::ListOrderedMultimap;
2288     /// use ordered_multimap::list_ordered_multimap::Entry;
2289     ///
2290     /// let mut map = ListOrderedMultimap::new();
2291     /// map.insert("key", "value1");
2292     ///
2293     /// let mut entry = match map.entry("key") {
2294     ///     Entry::Occupied(entry) => entry,
2295     ///     _ => panic!("expected occupied entry")
2296     /// };
2297     ///
2298     /// assert_eq!(entry.len(), 1);
2299     ///
2300     /// entry.append("value2");
2301     /// assert_eq!(entry.len(), 2);
2302     /// ```
len(&self) -> usize2303     pub fn len(&self) -> usize {
2304         self.entry.get().length
2305     }
2306 
2307     /// # Examples
2308     ///
2309     /// ```
2310     /// use ordered_multimap::ListOrderedMultimap;
2311     /// use ordered_multimap::list_ordered_multimap::Entry;
2312     ///
2313     /// let mut map = ListOrderedMultimap::new();
2314     /// map.insert("key", "value");
2315     ///
2316     /// let mut entry = match map.entry("key") {
2317     ///     Entry::Occupied(entry) => entry,
2318     ///     _ => panic!("expected occupied entry")
2319     /// };
2320     ///
2321     /// assert_eq!(entry.remove(), "value");
2322     /// ```
remove(self) -> Value2323     pub fn remove(self) -> Value {
2324         self.remove_entry().1
2325     }
2326 
2327     /// # Examples
2328     ///
2329     /// ```
2330     /// use ordered_multimap::ListOrderedMultimap;
2331     /// use ordered_multimap::list_ordered_multimap::Entry;
2332     ///
2333     /// let mut map = ListOrderedMultimap::new();
2334     /// map.insert("key", "value1");
2335     ///
2336     /// let mut entry = match map.entry("key") {
2337     ///     Entry::Occupied(entry) => entry,
2338     ///     _ => panic!("expected occupied entry")
2339     /// };
2340     ///
2341     /// entry.append("value2");
2342     ///
2343     /// let mut iter = entry.remove_all();
2344     /// assert_eq!(iter.next(), Some("value1"));
2345     /// assert_eq!(iter.next(), Some("value2"));
2346     /// assert_eq!(iter.next(), None);
2347     /// ```
remove_all(self) -> EntryValuesDrain<'map, Key, Value>2348     pub fn remove_all(self) -> EntryValuesDrain<'map, Key, Value> {
2349         self.remove_entry_all().1
2350     }
2351 
2352     /// # Examples
2353     ///
2354     /// ```
2355     /// use ordered_multimap::ListOrderedMultimap;
2356     /// use ordered_multimap::list_ordered_multimap::Entry;
2357     ///
2358     /// let mut map = ListOrderedMultimap::new();
2359     /// map.insert("key", "value");
2360     ///
2361     /// let mut entry = match map.entry("key") {
2362     ///     Entry::Occupied(entry) => entry,
2363     ///     _ => panic!("expected occupied entry")
2364     /// };
2365     ///
2366     /// assert_eq!(entry.remove_entry(), ("key", "value"));
2367     /// ```
remove_entry(self) -> (Key, Value)2368     pub fn remove_entry(self) -> (Key, Value) {
2369         let (key_index, map_entry) = self.entry.remove_entry();
2370         let key = self.keys.remove(key_index).unwrap();
2371         let first_index = map_entry.head_index;
2372         let mut entry = self.values.remove(first_index).unwrap();
2373         let first_value = entry.value;
2374 
2375         while let Some(next_index) = entry.next_index {
2376             entry = self.values.remove(next_index).unwrap();
2377         }
2378 
2379         (key, first_value)
2380     }
2381 
2382     /// # Examples
2383     ///
2384     /// ```
2385     /// use ordered_multimap::ListOrderedMultimap;
2386     /// use ordered_multimap::list_ordered_multimap::Entry;
2387     ///
2388     /// let mut map = ListOrderedMultimap::new();
2389     /// map.insert("key", "value1");
2390     ///
2391     /// let mut entry = match map.entry("key") {
2392     ///     Entry::Occupied(entry) => entry,
2393     ///     _ => panic!("expected occupied entry")
2394     /// };
2395     ///
2396     /// entry.append("value2");
2397     ///
2398     /// let (key, mut iter) = entry.remove_entry_all();
2399     /// assert_eq!(key, "key");
2400     /// assert_eq!(iter.next(), Some("value1"));
2401     /// assert_eq!(iter.next(), Some("value2"));
2402     /// assert_eq!(iter.next(), None);
2403     /// ```
remove_entry_all(self) -> (Key, EntryValuesDrain<'map, Key, Value>)2404     pub fn remove_entry_all(self) -> (Key, EntryValuesDrain<'map, Key, Value>) {
2405         let (key_index, map_entry) = self.entry.remove_entry();
2406         let key = self.keys.remove(key_index).unwrap();
2407         let iter = EntryValuesDrain {
2408             head_index: Some(map_entry.head_index),
2409             remaining: map_entry.length,
2410             tail_index: Some(map_entry.tail_index),
2411             values: self.values,
2412         };
2413         (key, iter)
2414     }
2415 }
2416 
2417 impl<Key, Value> Debug for OccupiedEntry<'_, Key, Value>
2418 where
2419     Key: Debug,
2420     Value: Debug,
2421 {
fmt(&self, formatter: &mut Formatter) -> fmt::Result2422     fn fmt(&self, formatter: &mut Formatter) -> fmt::Result {
2423         formatter
2424             .debug_struct("OccupiedEntry")
2425             .field("key", self.key())
2426             .field("values", &self.iter())
2427             .finish()
2428     }
2429 }
2430 
2431 /// A view into a vacant entry in the multimap.
2432 pub struct VacantEntry<'map, Key, Value, State = RandomState> {
2433     /// The builder hasher for the map, kept separately for mutability concerns.
2434     build_hasher: &'map State,
2435 
2436     /// The hash of the key for the entry.
2437     hash: u64,
2438 
2439     /// The key for this entry for when it is to be inserted into the map.
2440     key: Key,
2441 
2442     keys: &'map mut VecList<Key>,
2443 
2444     /// Reference to the multimap.
2445     map: &'map mut HashMap<Index<Key>, MapEntry<Key, Value>, DummyState>,
2446 
2447     values: &'map mut VecList<ValueEntry<Key, Value>>,
2448 }
2449 
2450 impl<'map, Key, Value, State> VacantEntry<'map, Key, Value, State>
2451 where
2452     Key: Eq + Hash,
2453     State: BuildHasher,
2454 {
2455     /// # Examples
2456     ///
2457     /// ```
2458     /// use ordered_multimap::ListOrderedMultimap;
2459     /// use ordered_multimap::list_ordered_multimap::Entry;
2460     ///
2461     /// let mut map = ListOrderedMultimap::new();
2462     ///
2463     /// let mut entry = match map.entry("key") {
2464     ///     Entry::Vacant(entry) => entry,
2465     ///     _ => panic!("expected vacant entry")
2466     /// };
2467     ///
2468     /// assert_eq!(entry.insert("value"), &"value");
2469     /// ```
insert(self, value: Value) -> &'map mut Value2470     pub fn insert(self, value: Value) -> &'map mut Value {
2471         let build_hasher = self.build_hasher;
2472         let entry = match raw_entry_mut(self.keys, self.map, self.hash, &self.key) {
2473             RawEntryMut::Vacant(entry) => entry,
2474             _ => panic!("expected vacant entry"),
2475         };
2476         let key_index = self.keys.push_back(self.key);
2477         let value_entry = ValueEntry::new(key_index, value);
2478         let index = self.values.push_back(value_entry);
2479         let map_entry = MapEntry::new(index);
2480         let keys = &self.keys;
2481         entry.insert_with_hasher(self.hash, key_index, map_entry, |&key_index| {
2482             let key = keys.get(key_index).unwrap();
2483             hash_key(build_hasher, key)
2484         });
2485 
2486         &mut self.values.get_mut(index).unwrap().value
2487     }
2488 
2489     /// # Examples
2490     ///
2491     /// ```
2492     /// use ordered_multimap::ListOrderedMultimap;
2493     /// use ordered_multimap::list_ordered_multimap::Entry;
2494     ///
2495     /// let mut map = ListOrderedMultimap::new();
2496     ///
2497     /// let mut entry = match map.entry("key") {
2498     ///     Entry::Vacant(entry) => entry,
2499     ///     _ => panic!("expected vacant entry")
2500     /// };
2501     ///
2502     /// let mut entry = entry.insert_entry("value");
2503     /// assert_eq!(entry.get(), &"value");
2504     /// ```
insert_entry(self, value: Value) -> OccupiedEntry<'map, Key, Value>2505     pub fn insert_entry(self, value: Value) -> OccupiedEntry<'map, Key, Value> {
2506         let build_hasher = self.build_hasher;
2507         let entry = match raw_entry_mut(self.keys, self.map, self.hash, &self.key) {
2508             RawEntryMut::Vacant(entry) => entry,
2509             _ => panic!("expected vacant entry"),
2510         };
2511         let key_index = self.keys.push_back(self.key);
2512         let value_entry = ValueEntry::new(key_index, value);
2513         let index = self.values.push_back(value_entry);
2514         let map_entry = MapEntry::new(index);
2515         let keys = &self.keys;
2516         entry.insert_with_hasher(self.hash, key_index, map_entry, |&key_index| {
2517             let key = keys.get(key_index).unwrap();
2518             hash_key(build_hasher, key)
2519         });
2520 
2521         let key = self.keys.get(key_index).unwrap();
2522         let entry = match raw_entry_mut(self.keys, self.map, self.hash, key) {
2523             RawEntryMut::Occupied(entry) => entry,
2524             _ => panic!("expected occupied entry"),
2525         };
2526 
2527         OccupiedEntry {
2528             entry,
2529             keys: self.keys,
2530             values: self.values,
2531         }
2532     }
2533 
2534     /// # Examples
2535     ///
2536     /// ```
2537     /// use ordered_multimap::ListOrderedMultimap;
2538     /// use ordered_multimap::list_ordered_multimap::Entry;
2539     ///
2540     /// let mut map: ListOrderedMultimap<&str, &str> = ListOrderedMultimap::new();
2541     ///
2542     /// let mut entry = match map.entry("key") {
2543     ///     Entry::Vacant(entry) => entry,
2544     ///     _ => panic!("expected vacant entry")
2545     /// };
2546     ///
2547     /// assert_eq!(entry.into_key(), "key");
2548     /// ```
into_key(self) -> Key2549     pub fn into_key(self) -> Key {
2550         self.key
2551     }
2552 
2553     /// # Examples
2554     ///
2555     /// ```
2556     /// use ordered_multimap::ListOrderedMultimap;
2557     /// use ordered_multimap::list_ordered_multimap::Entry;
2558     ///
2559     /// let mut map: ListOrderedMultimap<&str, &str> = ListOrderedMultimap::new();
2560     ///
2561     /// let mut entry = match map.entry("key") {
2562     ///     Entry::Vacant(entry) => entry,
2563     ///     _ => panic!("expected vacant entry")
2564     /// };
2565     ///
2566     /// assert_eq!(entry.key(), &"key");
2567     /// ```
key(&self) -> &Key2568     pub fn key(&self) -> &Key {
2569         &self.key
2570     }
2571 }
2572 
2573 impl<Key, Value, State> Debug for VacantEntry<'_, Key, Value, State>
2574 where
2575     Key: Debug,
2576 {
fmt(&self, formatter: &mut Formatter) -> fmt::Result2577     fn fmt(&self, formatter: &mut Formatter) -> fmt::Result {
2578         formatter
2579             .debug_tuple("VacantEntry")
2580             .field(&self.key)
2581             .finish()
2582     }
2583 }
2584 
2585 /// An iterator that yields immutable references to all values of a given key. The order of the
2586 /// values is always in the order that they were inserted.
2587 pub struct EntryValues<'map, Key, Value> {
2588     /// The first index of the values not yet yielded.
2589     head_index: Option<Index<ValueEntry<Key, Value>>>,
2590 
2591     /// The remaining number of values to be yielded.
2592     remaining: usize,
2593 
2594     /// The last index of the values not yet yielded.
2595     tail_index: Option<Index<ValueEntry<Key, Value>>>,
2596 
2597     /// The list of the values in the map. This is ordered by time of insertion.
2598     values: &'map VecList<ValueEntry<Key, Value>>,
2599 }
2600 
2601 impl<'map, Key, Value> EntryValues<'map, Key, Value> {
2602     /// Convenience function for creating an empty iterator.
empty(values: &'map VecList<ValueEntry<Key, Value>>) -> Self2603     fn empty(values: &'map VecList<ValueEntry<Key, Value>>) -> Self {
2604         EntryValues {
2605             head_index: None,
2606             remaining: 0,
2607             tail_index: None,
2608             values,
2609         }
2610     }
2611 
2612     /// Convenience function for creating a new iterator from a map entry.
from_map_entry( values: &'map VecList<ValueEntry<Key, Value>>, map_entry: &MapEntry<Key, Value>, ) -> Self2613     fn from_map_entry(
2614         values: &'map VecList<ValueEntry<Key, Value>>,
2615         map_entry: &MapEntry<Key, Value>,
2616     ) -> Self {
2617         EntryValues {
2618             head_index: Some(map_entry.head_index),
2619             remaining: map_entry.length,
2620             tail_index: Some(map_entry.tail_index),
2621             values,
2622         }
2623     }
2624 }
2625 
2626 impl<'map, Key, Value> Clone for EntryValues<'map, Key, Value> {
clone(&self) -> EntryValues<'map, Key, Value>2627     fn clone(&self) -> EntryValues<'map, Key, Value> {
2628         EntryValues {
2629             head_index: self.head_index,
2630             remaining: self.remaining,
2631             tail_index: self.tail_index,
2632             values: self.values,
2633         }
2634     }
2635 }
2636 
2637 impl<Key, Value> Debug for EntryValues<'_, Key, Value>
2638 where
2639     Value: Debug,
2640 {
fmt(&self, formatter: &mut Formatter) -> fmt::Result2641     fn fmt(&self, formatter: &mut Formatter) -> fmt::Result {
2642         formatter.write_str("EntryValues(")?;
2643         formatter.debug_list().entries(self.clone()).finish()?;
2644         formatter.write_str(")")
2645     }
2646 }
2647 
2648 impl<Key, Value> DoubleEndedIterator for EntryValues<'_, Key, Value> {
next_back(&mut self) -> Option<Self::Item>2649     fn next_back(&mut self) -> Option<Self::Item> {
2650         if self.remaining == 0 {
2651             None
2652         } else {
2653             self.tail_index.map(|index| {
2654                 let entry = self.values.get(index).unwrap();
2655                 self.tail_index = entry.previous_index;
2656                 self.remaining -= 1;
2657                 &entry.value
2658             })
2659         }
2660     }
2661 }
2662 
2663 impl<Key, Value> ExactSizeIterator for EntryValues<'_, Key, Value> {}
2664 
2665 impl<Key, Value> FusedIterator for EntryValues<'_, Key, Value> {}
2666 
2667 impl<'map, Key, Value> Iterator for EntryValues<'map, Key, Value> {
2668     type Item = &'map Value;
2669 
next(&mut self) -> Option<Self::Item>2670     fn next(&mut self) -> Option<Self::Item> {
2671         if self.remaining == 0 {
2672             None
2673         } else {
2674             self.head_index.map(|index| {
2675                 let entry = self.values.get(index).unwrap();
2676                 self.head_index = entry.next_index;
2677                 self.remaining -= 1;
2678                 &entry.value
2679             })
2680         }
2681     }
2682 
size_hint(&self) -> (usize, Option<usize>)2683     fn size_hint(&self) -> (usize, Option<usize>) {
2684         (self.remaining, Some(self.remaining))
2685     }
2686 }
2687 
2688 /// An iterator that moves all values of a given key out of a multimap but preserves the underlying
2689 /// capacity. The order of the values is always in the order that they were inserted.
2690 pub struct EntryValuesDrain<'map, Key, Value> {
2691     /// The first index of the values not yet yielded.
2692     head_index: Option<Index<ValueEntry<Key, Value>>>,
2693 
2694     /// The remaining number of values to be yielded.
2695     remaining: usize,
2696 
2697     /// The last index of the values not yet yielded.
2698     tail_index: Option<Index<ValueEntry<Key, Value>>>,
2699 
2700     /// The list of the values in the map. This is ordered by time of insertion.
2701     values: &'map mut VecList<ValueEntry<Key, Value>>,
2702 }
2703 
2704 impl<'map, Key, Value> EntryValuesDrain<'map, Key, Value> {
2705     /// Convenience function for creating an empty iterator.
empty(values: &'map mut VecList<ValueEntry<Key, Value>>) -> Self2706     fn empty(values: &'map mut VecList<ValueEntry<Key, Value>>) -> Self {
2707         EntryValuesDrain {
2708             head_index: None,
2709             remaining: 0,
2710             tail_index: None,
2711             values,
2712         }
2713     }
2714 
2715     /// Convenience function for creating a new iterator from a map entry.
from_map_entry( values: &'map mut VecList<ValueEntry<Key, Value>>, map_entry: &MapEntry<Key, Value>, ) -> Self2716     fn from_map_entry(
2717         values: &'map mut VecList<ValueEntry<Key, Value>>,
2718         map_entry: &MapEntry<Key, Value>,
2719     ) -> Self {
2720         EntryValuesDrain {
2721             head_index: Some(map_entry.head_index),
2722             remaining: map_entry.length,
2723             tail_index: Some(map_entry.tail_index),
2724             values,
2725         }
2726     }
2727 
2728     /// Creates an iterator that yields immutable references to all values of a given key.
iter(&self) -> EntryValues<Key, Value>2729     pub fn iter(&self) -> EntryValues<Key, Value> {
2730         EntryValues {
2731             head_index: self.head_index,
2732             remaining: self.remaining,
2733             tail_index: self.tail_index,
2734             values: self.values,
2735         }
2736     }
2737 }
2738 
2739 impl<Key, Value> Debug for EntryValuesDrain<'_, Key, Value>
2740 where
2741     Key: Debug,
2742     Value: Debug,
2743 {
fmt(&self, formatter: &mut Formatter) -> fmt::Result2744     fn fmt(&self, formatter: &mut Formatter) -> fmt::Result {
2745         formatter.write_str("EntryValuesDrain(")?;
2746         formatter.debug_list().entries(self.iter()).finish()?;
2747         formatter.write_str(")")
2748     }
2749 }
2750 
2751 impl<Key, Value> DoubleEndedIterator for EntryValuesDrain<'_, Key, Value> {
next_back(&mut self) -> Option<Self::Item>2752     fn next_back(&mut self) -> Option<Self::Item> {
2753         if self.remaining == 0 {
2754             None
2755         } else {
2756             self.tail_index.map(|index| {
2757                 let entry = self.values.remove(index).unwrap();
2758                 self.tail_index = entry.previous_index;
2759                 self.remaining -= 1;
2760                 entry.value
2761             })
2762         }
2763     }
2764 }
2765 
2766 impl<Key, Value> Drop for EntryValuesDrain<'_, Key, Value> {
drop(&mut self)2767     fn drop(&mut self) {
2768         for _ in self {}
2769     }
2770 }
2771 
2772 impl<Key, Value> ExactSizeIterator for EntryValuesDrain<'_, Key, Value> {}
2773 
2774 impl<Key, Value> FusedIterator for EntryValuesDrain<'_, Key, Value> {}
2775 
2776 impl<Key, Value> Iterator for EntryValuesDrain<'_, Key, Value> {
2777     type Item = Value;
2778 
next(&mut self) -> Option<Self::Item>2779     fn next(&mut self) -> Option<Self::Item> {
2780         if self.remaining == 0 {
2781             None
2782         } else {
2783             self.head_index.map(|index| {
2784                 let entry = self.values.remove(index).unwrap();
2785                 self.head_index = entry.next_index;
2786                 self.remaining -= 1;
2787                 entry.value
2788             })
2789         }
2790     }
2791 
size_hint(&self) -> (usize, Option<usize>)2792     fn size_hint(&self) -> (usize, Option<usize>) {
2793         (self.remaining, Some(self.remaining))
2794     }
2795 }
2796 
2797 /// An iterator that yields mutable references to all values of a given key. The order of the values
2798 /// is always in the order that they were inserted.
2799 pub struct EntryValuesMut<'map, Key, Value> {
2800     /// The first index of the values not yet yielded.
2801     head_index: Option<Index<ValueEntry<Key, Value>>>,
2802 
2803     /// Because [`EntryValuesMut::values`] is a pointer, we need to have a phantom data here for the
2804     /// lifetime parameter.
2805     phantom: PhantomData<&'map mut VecList<ValueEntry<Key, Value>>>,
2806 
2807     /// The remaining number of values to be yielded.
2808     remaining: usize,
2809 
2810     /// The last index of the values not yet yielded.
2811     tail_index: Option<Index<ValueEntry<Key, Value>>>,
2812 
2813     /// The list of the values in the map. This is ordered by time of insertion.
2814     values: *mut VecList<ValueEntry<Key, Value>>,
2815 }
2816 
2817 impl<'map, Key, Value> EntryValuesMut<'map, Key, Value> {
2818     /// Convenience function for creating an empty iterator.
empty(values: &'map mut VecList<ValueEntry<Key, Value>>) -> Self2819     fn empty(values: &'map mut VecList<ValueEntry<Key, Value>>) -> Self {
2820         EntryValuesMut {
2821             head_index: None,
2822             phantom: PhantomData,
2823             remaining: 0,
2824             tail_index: None,
2825             values: values as *mut _,
2826         }
2827     }
2828 
2829     /// Convenience function for creating a new iterator from a map entry.
from_map_entry( values: &'map mut VecList<ValueEntry<Key, Value>>, map_entry: &MapEntry<Key, Value>, ) -> Self2830     fn from_map_entry(
2831         values: &'map mut VecList<ValueEntry<Key, Value>>,
2832         map_entry: &MapEntry<Key, Value>,
2833     ) -> Self {
2834         EntryValuesMut {
2835             head_index: Some(map_entry.head_index),
2836             phantom: PhantomData,
2837             remaining: map_entry.length,
2838             tail_index: Some(map_entry.tail_index),
2839             values: values as *mut _,
2840         }
2841     }
2842 
2843     /// Creates an iterator that yields immutable references to all values of a given key.
iter(&self) -> EntryValues<Key, Value>2844     pub fn iter(&self) -> EntryValues<Key, Value> {
2845         EntryValues {
2846             head_index: self.head_index,
2847             remaining: self.remaining,
2848             tail_index: self.tail_index,
2849             values: unsafe { &*self.values },
2850         }
2851     }
2852 }
2853 
2854 impl<Key, Value> Debug for EntryValuesMut<'_, Key, Value>
2855 where
2856     Value: Debug,
2857 {
fmt(&self, formatter: &mut Formatter) -> fmt::Result2858     fn fmt(&self, formatter: &mut Formatter) -> fmt::Result {
2859         formatter.write_str("EntryValuesMut(")?;
2860         formatter.debug_list().entries(self.iter()).finish()?;
2861         formatter.write_str(")")
2862     }
2863 }
2864 
2865 impl<Key, Value> DoubleEndedIterator for EntryValuesMut<'_, Key, Value> {
next_back(&mut self) -> Option<Self::Item>2866     fn next_back(&mut self) -> Option<Self::Item> {
2867         if self.remaining == 0 {
2868             None
2869         } else {
2870             self.tail_index.map(|index| {
2871                 let entry = unsafe { (*self.values).get_mut(index) }.unwrap();
2872                 self.tail_index = entry.previous_index;
2873                 self.remaining -= 1;
2874                 &mut entry.value
2875             })
2876         }
2877     }
2878 }
2879 
2880 impl<Key, Value> ExactSizeIterator for EntryValuesMut<'_, Key, Value> {}
2881 
2882 impl<Key, Value> FusedIterator for EntryValuesMut<'_, Key, Value> {}
2883 
2884 impl<'map, Key, Value> Iterator for EntryValuesMut<'map, Key, Value> {
2885     type Item = &'map mut Value;
2886 
next(&mut self) -> Option<Self::Item>2887     fn next(&mut self) -> Option<Self::Item> {
2888         if self.remaining == 0 {
2889             None
2890         } else {
2891             self.head_index.map(|index| {
2892                 let entry = unsafe { (*self.values).get_mut(index) }.unwrap();
2893                 self.head_index = entry.next_index;
2894                 self.remaining -= 1;
2895                 &mut entry.value
2896             })
2897         }
2898     }
2899 
size_hint(&self) -> (usize, Option<usize>)2900     fn size_hint(&self) -> (usize, Option<usize>) {
2901         (self.remaining, Some(self.remaining))
2902     }
2903 }
2904 
2905 unsafe impl<Key, Value> Send for EntryValuesMut<'_, Key, Value>
2906 where
2907     Key: Send,
2908     Value: Send,
2909 {
2910 }
2911 
2912 unsafe impl<Key, Value> Sync for EntryValuesMut<'_, Key, Value>
2913 where
2914     Key: Sync,
2915     Value: Sync,
2916 {
2917 }
2918 
2919 /// An iterator that owns and yields all key-value pairs in a multimap by cloning the keys for their
2920 /// possibly multiple values. This is unnecessarily expensive whenever [`Iter`] or [`IterMut`] would
2921 /// suit as well. The order of the yielded items is always in the order that they were inserted.
2922 pub struct IntoIter<Key, Value> {
2923     // The list of the keys in the map. This is ordered by time of insertion.
2924     keys: VecList<Key>,
2925 
2926     /// The iterator over the list of all values. This is ordered by time of insertion.
2927     iter: VecListIntoIter<ValueEntry<Key, Value>>,
2928 }
2929 
2930 impl<Key, Value> IntoIter<Key, Value> {
2931     /// Creates an iterator that yields immutable references to all key-value pairs in a multimap.
iter(&self) -> Iter<Key, Value>2932     pub fn iter(&self) -> Iter<Key, Value> {
2933         Iter {
2934             keys: &self.keys,
2935             iter: self.iter.iter(),
2936         }
2937     }
2938 }
2939 
2940 impl<Key, Value> Debug for IntoIter<Key, Value>
2941 where
2942     Key: Debug,
2943     Value: Debug,
2944 {
fmt(&self, formatter: &mut Formatter) -> fmt::Result2945     fn fmt(&self, formatter: &mut Formatter) -> fmt::Result {
2946         formatter.write_str("IntoIter(")?;
2947         formatter.debug_list().entries(self.iter()).finish()?;
2948         formatter.write_str(")")
2949     }
2950 }
2951 
2952 impl<Key, Value> DoubleEndedIterator for IntoIter<Key, Value>
2953 where
2954     Key: Clone,
2955 {
next_back(&mut self) -> Option<Self::Item>2956     fn next_back(&mut self) -> Option<Self::Item> {
2957         let value_entry = self.iter.next_back()?;
2958         let key = self.keys.get(value_entry.key_index).cloned().unwrap();
2959         Some((key, value_entry.value))
2960     }
2961 }
2962 
2963 impl<Key, Value> ExactSizeIterator for IntoIter<Key, Value> where Key: Clone {}
2964 
2965 impl<Key, Value> FusedIterator for IntoIter<Key, Value> where Key: Clone {}
2966 
2967 impl<Key, Value> Iterator for IntoIter<Key, Value>
2968 where
2969     Key: Clone,
2970 {
2971     type Item = (Key, Value);
2972 
next(&mut self) -> Option<Self::Item>2973     fn next(&mut self) -> Option<Self::Item> {
2974         let value_entry = self.iter.next()?;
2975         let key = self.keys.get(value_entry.key_index).cloned().unwrap();
2976         Some((key, value_entry.value))
2977     }
2978 
size_hint(&self) -> (usize, Option<usize>)2979     fn size_hint(&self) -> (usize, Option<usize>) {
2980         self.iter.size_hint()
2981     }
2982 }
2983 
2984 /// An iterator that yields immutable references to all key-value pairs in a multimap. The order of
2985 /// the yielded items is always in the order that they were inserted.
2986 pub struct Iter<'map, Key, Value> {
2987     // The list of the keys in the map. This is ordered by time of insertion.
2988     keys: &'map VecList<Key>,
2989 
2990     /// The iterator over the list of all values. This is ordered by time of insertion.
2991     iter: VecListIter<'map, ValueEntry<Key, Value>>,
2992 }
2993 
2994 impl<'map, Key, Value> Clone for Iter<'map, Key, Value> {
clone(&self) -> Iter<'map, Key, Value>2995     fn clone(&self) -> Iter<'map, Key, Value> {
2996         Iter {
2997             keys: self.keys,
2998             iter: self.iter.clone(),
2999         }
3000     }
3001 }
3002 
3003 impl<Key, Value> Debug for Iter<'_, Key, Value>
3004 where
3005     Key: Debug,
3006     Value: Debug,
3007 {
fmt(&self, formatter: &mut Formatter) -> fmt::Result3008     fn fmt(&self, formatter: &mut Formatter) -> fmt::Result {
3009         formatter.write_str("Iter(")?;
3010         formatter.debug_list().entries(self.clone()).finish()?;
3011         formatter.write_str(")")
3012     }
3013 }
3014 
3015 impl<Key, Value> DoubleEndedIterator for Iter<'_, Key, Value> {
next_back(&mut self) -> Option<Self::Item>3016     fn next_back(&mut self) -> Option<Self::Item> {
3017         let value_entry = self.iter.next_back()?;
3018         let key = self.keys.get(value_entry.key_index).unwrap();
3019         Some((key, &value_entry.value))
3020     }
3021 }
3022 
3023 impl<Key, Value> ExactSizeIterator for Iter<'_, Key, Value> {}
3024 
3025 impl<Key, Value> FusedIterator for Iter<'_, Key, Value> {}
3026 
3027 impl<'map, Key, Value> Iterator for Iter<'map, Key, Value> {
3028     type Item = (&'map Key, &'map Value);
3029 
next(&mut self) -> Option<Self::Item>3030     fn next(&mut self) -> Option<Self::Item> {
3031         let value_entry = self.iter.next()?;
3032         let key = self.keys.get(value_entry.key_index).unwrap();
3033         Some((key, &value_entry.value))
3034     }
3035 
size_hint(&self) -> (usize, Option<usize>)3036     fn size_hint(&self) -> (usize, Option<usize>) {
3037         self.iter.size_hint()
3038     }
3039 }
3040 
3041 /// An iterator that yields mutable references to all key-value pairs in a multimap. The order of
3042 /// the yielded items is always in the order that they were inserted.
3043 pub struct IterMut<'map, Key, Value> {
3044     // The list of the keys in the map. This is ordered by time of insertion.
3045     keys: &'map VecList<Key>,
3046 
3047     /// The iterator over the list of all values. This is ordered by time of insertion.
3048     iter: VecListIterMut<'map, ValueEntry<Key, Value>>,
3049 }
3050 
3051 impl<Key, Value> IterMut<'_, Key, Value> {
3052     /// Creates an iterator that yields immutable references to all key-value pairs in a multimap.
iter(&self) -> Iter<Key, Value>3053     pub fn iter(&self) -> Iter<Key, Value> {
3054         Iter {
3055             keys: self.keys,
3056             iter: self.iter.iter(),
3057         }
3058     }
3059 }
3060 
3061 impl<Key, Value> Debug for IterMut<'_, Key, Value>
3062 where
3063     Key: Debug,
3064     Value: Debug,
3065 {
fmt(&self, formatter: &mut Formatter) -> fmt::Result3066     fn fmt(&self, formatter: &mut Formatter) -> fmt::Result {
3067         formatter.write_str("IterMut(")?;
3068         formatter.debug_list().entries(self.iter()).finish()?;
3069         formatter.write_str(")")
3070     }
3071 }
3072 
3073 impl<Key, Value> DoubleEndedIterator for IterMut<'_, Key, Value> {
next_back(&mut self) -> Option<Self::Item>3074     fn next_back(&mut self) -> Option<Self::Item> {
3075         let value_entry = self.iter.next_back()?;
3076         let key = self.keys.get(value_entry.key_index).unwrap();
3077         Some((key, &mut value_entry.value))
3078     }
3079 }
3080 
3081 impl<Key, Value> ExactSizeIterator for IterMut<'_, Key, Value> {}
3082 
3083 impl<Key, Value> FusedIterator for IterMut<'_, Key, Value> {}
3084 
3085 impl<'map, Key, Value> Iterator for IterMut<'map, Key, Value> {
3086     type Item = (&'map Key, &'map mut Value);
3087 
next(&mut self) -> Option<Self::Item>3088     fn next(&mut self) -> Option<Self::Item> {
3089         let value_entry = self.iter.next()?;
3090         let key = self.keys.get(value_entry.key_index).unwrap();
3091         Some((key, &mut value_entry.value))
3092     }
3093 
size_hint(&self) -> (usize, Option<usize>)3094     fn size_hint(&self) -> (usize, Option<usize>) {
3095         self.iter.size_hint()
3096     }
3097 }
3098 
3099 /// An iterator that yields immutable references to all keys and their value iterators. The order of
3100 /// the yielded items is always in the order the keys were first inserted.
3101 pub struct KeyValues<'map, Key, Value, State = RandomState> {
3102     /// The builder hasher for the map, kept separately for mutability concerns.
3103     build_hasher: &'map State,
3104 
3105     // The list of the keys in the map. This is ordered by time of insertion.
3106     keys: &'map VecList<Key>,
3107 
3108     /// The iterator over the list of all values. This is ordered by time of insertion.
3109     iter: VecListIter<'map, Key>,
3110 
3111     /// The internal mapping from key hashes to associated value indices.
3112     map: &'map HashMap<Index<Key>, MapEntry<Key, Value>, DummyState>,
3113 
3114     /// The list of the values in the map. This is ordered by time of insertion.
3115     values: &'map VecList<ValueEntry<Key, Value>>,
3116 }
3117 
3118 impl<'map, Key, Value, State> Clone for KeyValues<'map, Key, Value, State> {
clone(&self) -> KeyValues<'map, Key, Value, State>3119     fn clone(&self) -> KeyValues<'map, Key, Value, State> {
3120         KeyValues {
3121             build_hasher: self.build_hasher,
3122             keys: self.keys,
3123             iter: self.iter.clone(),
3124             map: self.map,
3125             values: self.values,
3126         }
3127     }
3128 }
3129 
3130 impl<Key, Value, State> Debug for KeyValues<'_, Key, Value, State>
3131 where
3132     Key: Debug + Eq + Hash,
3133     State: BuildHasher,
3134     Value: Debug,
3135 {
fmt(&self, formatter: &mut Formatter) -> fmt::Result3136     fn fmt(&self, formatter: &mut Formatter) -> fmt::Result {
3137         formatter.write_str("KeyValues(")?;
3138         formatter.debug_list().entries(self.clone()).finish()?;
3139         formatter.write_str(")")
3140     }
3141 }
3142 
3143 impl<Key, Value, State> DoubleEndedIterator for KeyValues<'_, Key, Value, State>
3144 where
3145     Key: Eq + Hash,
3146     State: BuildHasher,
3147 {
next_back(&mut self) -> Option<Self::Item>3148     fn next_back(&mut self) -> Option<Self::Item> {
3149         let key = self.iter.next_back()?;
3150         let hash = hash_key(self.build_hasher, key);
3151         let (_, map_entry) = raw_entry(&self.keys, self.map, hash, key).unwrap();
3152         let iter = EntryValues::from_map_entry(&self.values, &map_entry);
3153         Some((key, iter))
3154     }
3155 }
3156 
3157 impl<Key, Value, State> ExactSizeIterator for KeyValues<'_, Key, Value, State>
3158 where
3159     Key: Eq + Hash,
3160     State: BuildHasher,
3161 {
3162 }
3163 
3164 impl<Key, Value, State> FusedIterator for KeyValues<'_, Key, Value, State>
3165 where
3166     Key: Eq + Hash,
3167     State: BuildHasher,
3168 {
3169 }
3170 
3171 impl<'map, Key, Value, State> Iterator for KeyValues<'map, Key, Value, State>
3172 where
3173     Key: Eq + Hash,
3174     State: BuildHasher,
3175 {
3176     type Item = (&'map Key, EntryValues<'map, Key, Value>);
3177 
next(&mut self) -> Option<Self::Item>3178     fn next(&mut self) -> Option<Self::Item> {
3179         let key = self.iter.next()?;
3180         let hash = hash_key(self.build_hasher, key);
3181         let (_, map_entry) = raw_entry(&self.keys, self.map, hash, key).unwrap();
3182         let iter = EntryValues::from_map_entry(&self.values, &map_entry);
3183         Some((key, iter))
3184     }
3185 
size_hint(&self) -> (usize, Option<usize>)3186     fn size_hint(&self) -> (usize, Option<usize>) {
3187         self.iter.size_hint()
3188     }
3189 }
3190 
3191 /// An iterator that drains the multimap of all keys and their value drain iterators. The order of
3192 /// the yielded items is always in the order the keys were first inserted.
3193 pub struct KeyValuesDrain<'map, Key, Value, State = RandomState>
3194 where
3195     Key: Eq + Hash,
3196     State: BuildHasher,
3197 {
3198     /// The builder hasher for the map, kept separately for mutability concerns.
3199     build_hasher: &'map State,
3200 
3201     /// The number of keys whose value drain iterators have yet to have been fully consumed. This is
3202     /// needed to make this type thread-safe.
3203     dropped: Arc<AtomicUsize>,
3204 
3205     /// The drain iterator over the list of all values. This is ordered by time of insertion.
3206     iter: VecListDrain<'map, Key>,
3207 
3208     // The list of the keys in the map. This is ordered by time of insertion.
3209     keys: *const VecList<Key>,
3210 
3211     /// The internal mapping from key hashes to associated value indices.
3212     map: &'map mut HashMap<Index<Key>, MapEntry<Key, Value>, DummyState>,
3213 
3214     /// The list of the values in the map. This is ordered by time of insertion.
3215     values: *mut VecList<ValueEntry<Key, Value>>,
3216 }
3217 
3218 impl<Key, Value, State> KeyValuesDrain<'_, Key, Value, State>
3219 where
3220     Key: Eq + Hash,
3221     State: BuildHasher,
3222 {
3223     /// Creates an iterator that yields immutable references to all keys and their value iterators.
iter(&self) -> KeyValues<Key, Value, State>3224     pub fn iter(&self) -> KeyValues<Key, Value, State> {
3225         KeyValues {
3226             build_hasher: self.build_hasher,
3227             keys: unsafe { &*self.keys },
3228             iter: self.iter.iter(),
3229             map: self.map,
3230             values: unsafe { &*self.values },
3231         }
3232     }
3233 }
3234 
3235 impl<Key, Value, State> Debug for KeyValuesDrain<'_, Key, Value, State>
3236 where
3237     Key: Debug + Eq + Hash,
3238     State: BuildHasher,
3239     Value: Debug,
3240 {
fmt(&self, formatter: &mut Formatter) -> fmt::Result3241     fn fmt(&self, formatter: &mut Formatter) -> fmt::Result {
3242         formatter.write_str("KeyValuesDrain(")?;
3243         formatter.debug_list().entries(self.iter()).finish()?;
3244         formatter.write_str(")")
3245     }
3246 }
3247 
3248 impl<Key, Value, State> DoubleEndedIterator for KeyValuesDrain<'_, Key, Value, State>
3249 where
3250     Key: Eq + Hash,
3251     State: BuildHasher,
3252 {
next_back(&mut self) -> Option<Self::Item>3253     fn next_back(&mut self) -> Option<Self::Item> {
3254         let key = self.iter.next_back()?;
3255         let hash = hash_key(self.build_hasher, &key);
3256         let entry = match raw_entry_mut_empty(unsafe { &*self.keys }, self.map, hash) {
3257             RawEntryMut::Occupied(entry) => entry,
3258             _ => panic!("expected occupied entry in internal map"),
3259         };
3260         let map_entry = entry.remove();
3261         let iter = KeyValuesEntryDrain::from_map_entry(
3262             unsafe { &mut *self.values },
3263             &map_entry,
3264             self.dropped.clone(),
3265         );
3266         Some((key, iter))
3267     }
3268 }
3269 
3270 impl<Key, Value, State> Drop for KeyValuesDrain<'_, Key, Value, State>
3271 where
3272     Key: Eq + Hash,
3273     State: BuildHasher,
3274 {
drop(&mut self)3275     fn drop(&mut self) {
3276         for _ in self {}
3277     }
3278 }
3279 
3280 impl<Key, Value, State> ExactSizeIterator for KeyValuesDrain<'_, Key, Value, State>
3281 where
3282     Key: Eq + Hash,
3283     State: BuildHasher,
3284 {
3285 }
3286 
3287 impl<Key, Value, State> FusedIterator for KeyValuesDrain<'_, Key, Value, State>
3288 where
3289     Key: Eq + Hash,
3290     State: BuildHasher,
3291 {
3292 }
3293 
3294 impl<'map, Key, Value, State> Iterator for KeyValuesDrain<'map, Key, Value, State>
3295 where
3296     Key: Eq + Hash,
3297     State: BuildHasher,
3298 {
3299     type Item = (Key, KeyValuesEntryDrain<'map, Key, Value>);
3300 
next(&mut self) -> Option<Self::Item>3301     fn next(&mut self) -> Option<Self::Item> {
3302         let key = self.iter.next()?;
3303         let hash = hash_key(self.build_hasher, &key);
3304         let entry = match raw_entry_mut_empty(unsafe { &*self.keys }, self.map, hash) {
3305             RawEntryMut::Occupied(entry) => entry,
3306             _ => panic!("expected occupied entry in internal map"),
3307         };
3308         let map_entry = entry.remove();
3309         let iter = KeyValuesEntryDrain::from_map_entry(
3310             unsafe { &mut *self.values },
3311             &map_entry,
3312             self.dropped.clone(),
3313         );
3314         Some((key, iter))
3315     }
3316 
size_hint(&self) -> (usize, Option<usize>)3317     fn size_hint(&self) -> (usize, Option<usize>) {
3318         self.iter.size_hint()
3319     }
3320 }
3321 
3322 unsafe impl<Key, Value, State> Send for KeyValuesDrain<'_, Key, Value, State>
3323 where
3324     Key: Eq + Hash + Send,
3325     State: BuildHasher,
3326     Value: Send,
3327 {
3328 }
3329 
3330 unsafe impl<Key, Value, State> Sync for KeyValuesDrain<'_, Key, Value, State>
3331 where
3332     Key: Eq + Hash + Sync,
3333     State: BuildHasher,
3334     Value: Sync,
3335 {
3336 }
3337 
3338 /// An iterator that drains all values for a given key. The order of the yielded items is always in
3339 /// the order the values were first inserted.
3340 ///
3341 /// This is only used with [`KeyValuesDrain`] to account for thread saftey.
3342 pub struct KeyValuesEntryDrain<'map, Key, Value> {
3343     /// The number of keys whose value drain iterators have yet to have been fully consumed. This is
3344     /// needed to make this type thread-safe. This originates from [`KeyValuesDrain`].
3345     dropped: Arc<AtomicUsize>,
3346 
3347     /// The first index of the values not yet yielded.
3348     head_index: Option<Index<ValueEntry<Key, Value>>>,
3349 
3350     /// The remaining number of values to be yielded.
3351     remaining: usize,
3352 
3353     /// The last index of the values not yet yielded.
3354     tail_index: Option<Index<ValueEntry<Key, Value>>>,
3355 
3356     /// The list of the values in the map. This is ordered by time of insertion.
3357     values: &'map mut VecList<ValueEntry<Key, Value>>,
3358 }
3359 
3360 impl<'map, Key, Value> KeyValuesEntryDrain<'map, Key, Value> {
3361     /// Convenience function for creating a new iterator from a map entry.
from_map_entry( values: &'map mut VecList<ValueEntry<Key, Value>>, map_entry: &MapEntry<Key, Value>, dropped: Arc<AtomicUsize>, ) -> Self3362     fn from_map_entry(
3363         values: &'map mut VecList<ValueEntry<Key, Value>>,
3364         map_entry: &MapEntry<Key, Value>,
3365         dropped: Arc<AtomicUsize>,
3366     ) -> Self {
3367         KeyValuesEntryDrain {
3368             dropped,
3369             head_index: Some(map_entry.head_index),
3370             remaining: map_entry.length,
3371             tail_index: Some(map_entry.tail_index),
3372             values,
3373         }
3374     }
3375 
3376     /// Creates an iterator that yields immutable references to all values of a key.
iter(&self) -> EntryValues<Key, Value>3377     pub fn iter(&self) -> EntryValues<Key, Value> {
3378         EntryValues {
3379             head_index: self.head_index,
3380             remaining: self.remaining,
3381             tail_index: self.tail_index,
3382             values: self.values,
3383         }
3384     }
3385 }
3386 
3387 impl<Key, Value> Debug for KeyValuesEntryDrain<'_, Key, Value>
3388 where
3389     Key: Debug,
3390     Value: Debug,
3391 {
fmt(&self, formatter: &mut Formatter) -> fmt::Result3392     fn fmt(&self, formatter: &mut Formatter) -> fmt::Result {
3393         formatter.write_str("KeyValuesEntryDrain(")?;
3394         formatter.debug_list().entries(self.iter()).finish()?;
3395         formatter.write_str(")")
3396     }
3397 }
3398 
3399 impl<Key, Value> DoubleEndedIterator for KeyValuesEntryDrain<'_, Key, Value> {
next_back(&mut self) -> Option<Self::Item>3400     fn next_back(&mut self) -> Option<Self::Item> {
3401         if self.remaining == 0 {
3402             None
3403         } else {
3404             self.tail_index.map(|index| {
3405                 let entry = unsafe { self.values.remove_sync(index) };
3406                 self.tail_index = entry.previous_index;
3407                 self.remaining -= 1;
3408                 entry.value
3409             })
3410         }
3411     }
3412 }
3413 
3414 impl<Key, Value> Drop for KeyValuesEntryDrain<'_, Key, Value> {
drop(&mut self)3415     fn drop(&mut self) {
3416         while let Some(_) = self.next() {}
3417 
3418         let previous = self.dropped.fetch_sub(1, Ordering::SeqCst);
3419 
3420         if previous == 1 {
3421             self.values.clear()
3422         }
3423     }
3424 }
3425 
3426 impl<Key, Value> ExactSizeIterator for KeyValuesEntryDrain<'_, Key, Value> {}
3427 
3428 impl<Key, Value> FusedIterator for KeyValuesEntryDrain<'_, Key, Value> {}
3429 
3430 impl<Key, Value> Iterator for KeyValuesEntryDrain<'_, Key, Value> {
3431     type Item = Value;
3432 
next(&mut self) -> Option<Self::Item>3433     fn next(&mut self) -> Option<Self::Item> {
3434         if self.remaining == 0 {
3435             None
3436         } else {
3437             self.head_index.map(|index| {
3438                 let entry = unsafe { self.values.remove_sync(index) };
3439                 self.head_index = entry.next_index;
3440                 self.remaining -= 1;
3441                 entry.value
3442             })
3443         }
3444     }
3445 
size_hint(&self) -> (usize, Option<usize>)3446     fn size_hint(&self) -> (usize, Option<usize>) {
3447         (self.remaining, Some(self.remaining))
3448     }
3449 }
3450 
3451 pub struct KeyValuesMut<'map, Key, Value, State = RandomState> {
3452     /// The builder hasher for the map, kept separately for mutability concerns.
3453     build_hasher: &'map State,
3454 
3455     // The list of the keys in the map. This is ordered by time of insertion.
3456     keys: &'map VecList<Key>,
3457 
3458     /// The iterator over the list of all values. This is ordered by time of insertion.
3459     iter: VecListIter<'map, Key>,
3460 
3461     /// The internal mapping from key hashes to associated value indices.
3462     map: &'map HashMap<Index<Key>, MapEntry<Key, Value>, DummyState>,
3463 
3464     /// The list of the values in the map. This is ordered by time of insertion.
3465     values: *mut VecList<ValueEntry<Key, Value>>,
3466 }
3467 
3468 impl<Key, Value, State> KeyValuesMut<'_, Key, Value, State> {
3469     /// Creates an iterator that yields mutable references to all key-value pairs of a multimap.
iter(&self) -> KeyValues<Key, Value, State>3470     pub fn iter(&self) -> KeyValues<Key, Value, State> {
3471         KeyValues {
3472             build_hasher: self.build_hasher,
3473             keys: self.keys,
3474             iter: self.iter.clone(),
3475             map: self.map,
3476             values: unsafe { &*self.values },
3477         }
3478     }
3479 }
3480 
3481 impl<Key, Value, State> Debug for KeyValuesMut<'_, Key, Value, State>
3482 where
3483     Key: Debug + Eq + Hash,
3484     State: BuildHasher,
3485     Value: Debug,
3486 {
fmt(&self, formatter: &mut Formatter) -> fmt::Result3487     fn fmt(&self, formatter: &mut Formatter) -> fmt::Result {
3488         formatter.write_str("KeyValuesMut(")?;
3489         formatter.debug_list().entries(self.iter()).finish()?;
3490         formatter.write_str(")")
3491     }
3492 }
3493 
3494 impl<Key, Value, State> DoubleEndedIterator for KeyValuesMut<'_, Key, Value, State>
3495 where
3496     Key: Eq + Hash,
3497     State: BuildHasher,
3498 {
next_back(&mut self) -> Option<Self::Item>3499     fn next_back(&mut self) -> Option<Self::Item> {
3500         let key = self.iter.next_back()?;
3501         let hash = hash_key(self.build_hasher, key);
3502         let (_, map_entry) = raw_entry(&self.keys, self.map, hash, key).unwrap();
3503         let iter = EntryValuesMut::from_map_entry(unsafe { &mut *self.values }, &map_entry);
3504         Some((key, iter))
3505     }
3506 }
3507 
3508 impl<Key, Value, State> ExactSizeIterator for KeyValuesMut<'_, Key, Value, State>
3509 where
3510     Key: Eq + Hash,
3511     State: BuildHasher,
3512 {
3513 }
3514 
3515 impl<Key, Value, State> FusedIterator for KeyValuesMut<'_, Key, Value, State>
3516 where
3517     Key: Eq + Hash,
3518     State: BuildHasher,
3519 {
3520 }
3521 
3522 impl<'map, Key, Value, State> Iterator for KeyValuesMut<'map, Key, Value, State>
3523 where
3524     Key: Eq + Hash,
3525     State: BuildHasher,
3526 {
3527     type Item = (&'map Key, EntryValuesMut<'map, Key, Value>);
3528 
next(&mut self) -> Option<Self::Item>3529     fn next(&mut self) -> Option<Self::Item> {
3530         let key = self.iter.next()?;
3531         let hash = hash_key(self.build_hasher, key);
3532         let (_, map_entry) = raw_entry(&self.keys, self.map, hash, key).unwrap();
3533         let iter = EntryValuesMut::from_map_entry(unsafe { &mut *self.values }, &map_entry);
3534         Some((key, iter))
3535     }
3536 
size_hint(&self) -> (usize, Option<usize>)3537     fn size_hint(&self) -> (usize, Option<usize>) {
3538         self.iter.size_hint()
3539     }
3540 }
3541 
3542 unsafe impl<Key, Value> Send for KeyValuesMut<'_, Key, Value>
3543 where
3544     Key: Send,
3545     Value: Send,
3546 {
3547 }
3548 
3549 unsafe impl<Key, Value> Sync for KeyValuesMut<'_, Key, Value>
3550 where
3551     Key: Sync,
3552     Value: Sync,
3553 {
3554 }
3555 
3556 /// An iterator that yields immutable references to all keys in the multimap. The order of the keys
3557 /// is always in the order that they were first inserted.
3558 pub struct Keys<'map, Key>(VecListIter<'map, Key>);
3559 
3560 impl<'map, Key> Clone for Keys<'map, Key> {
clone(&self) -> Keys<'map, Key>3561     fn clone(&self) -> Keys<'map, Key> {
3562         Keys(self.0.clone())
3563     }
3564 }
3565 
3566 impl<Key> Debug for Keys<'_, Key>
3567 where
3568     Key: Debug,
3569 {
fmt(&self, formatter: &mut Formatter) -> fmt::Result3570     fn fmt(&self, formatter: &mut Formatter) -> fmt::Result {
3571         formatter.write_str("Keys(")?;
3572         formatter.debug_list().entries(self.clone()).finish()?;
3573         formatter.write_str(")")
3574     }
3575 }
3576 
3577 impl<Key> DoubleEndedIterator for Keys<'_, Key> {
next_back(&mut self) -> Option<Self::Item>3578     fn next_back(&mut self) -> Option<Self::Item> {
3579         self.0.next_back()
3580     }
3581 }
3582 
3583 impl<Key> ExactSizeIterator for Keys<'_, Key> {}
3584 
3585 impl<Key> FusedIterator for Keys<'_, Key> {}
3586 
3587 impl<'map, Key> Iterator for Keys<'map, Key> {
3588     type Item = &'map Key;
3589 
next(&mut self) -> Option<Self::Item>3590     fn next(&mut self) -> Option<Self::Item> {
3591         self.0.next()
3592     }
3593 
size_hint(&self) -> (usize, Option<usize>)3594     fn size_hint(&self) -> (usize, Option<usize>) {
3595         self.0.size_hint()
3596     }
3597 }
3598 
3599 /// An iterator that yields immutable references to all values of a multimap. The order of the
3600 /// values is always in the order that they were inserted.
3601 pub struct Values<'map, Key, Value>(VecListIter<'map, ValueEntry<Key, Value>>);
3602 
3603 impl<'map, Key, Value> Clone for Values<'map, Key, Value> {
clone(&self) -> Values<'map, Key, Value>3604     fn clone(&self) -> Values<'map, Key, Value> {
3605         Values(self.0.clone())
3606     }
3607 }
3608 
3609 impl<Key, Value> Debug for Values<'_, Key, Value>
3610 where
3611     Key: Debug,
3612     Value: Debug,
3613 {
fmt(&self, formatter: &mut Formatter) -> fmt::Result3614     fn fmt(&self, formatter: &mut Formatter) -> fmt::Result {
3615         formatter.write_str("Values(")?;
3616         formatter.debug_list().entries(self.clone()).finish()?;
3617         formatter.write_str(")")
3618     }
3619 }
3620 
3621 impl<Key, Value> DoubleEndedIterator for Values<'_, Key, Value> {
next_back(&mut self) -> Option<Self::Item>3622     fn next_back(&mut self) -> Option<Self::Item> {
3623         self.0.next_back().map(|entry| &entry.value)
3624     }
3625 }
3626 
3627 impl<Key, Value> ExactSizeIterator for Values<'_, Key, Value> {}
3628 
3629 impl<Key, Value> FusedIterator for Values<'_, Key, Value> {}
3630 
3631 impl<'map, Key, Value> Iterator for Values<'map, Key, Value> {
3632     type Item = &'map Value;
3633 
next(&mut self) -> Option<Self::Item>3634     fn next(&mut self) -> Option<Self::Item> {
3635         self.0.next().map(|entry| &entry.value)
3636     }
3637 
size_hint(&self) -> (usize, Option<usize>)3638     fn size_hint(&self) -> (usize, Option<usize>) {
3639         self.0.size_hint()
3640     }
3641 }
3642 
3643 /// An iterator that yields mutable references to all values of a multimap. The order of the values
3644 /// is always in the order that they were inserted.
3645 pub struct ValuesMut<'map, Key, Value>(VecListIterMut<'map, ValueEntry<Key, Value>>);
3646 
3647 impl<Key, Value> ValuesMut<'_, Key, Value> {
3648     /// Creates an iterator that yields immutable references to all values of a multimap.
iter(&self) -> Values<Key, Value>3649     pub fn iter(&self) -> Values<Key, Value> {
3650         Values(self.0.iter())
3651     }
3652 }
3653 
3654 impl<Key, Value> Debug for ValuesMut<'_, Key, Value>
3655 where
3656     Key: Debug,
3657     Value: Debug,
3658 {
fmt(&self, formatter: &mut Formatter) -> fmt::Result3659     fn fmt(&self, formatter: &mut Formatter) -> fmt::Result {
3660         formatter.write_str("ValuesMut(")?;
3661         formatter.debug_list().entries(self.iter()).finish()?;
3662         formatter.write_str(")")
3663     }
3664 }
3665 
3666 impl<Key, Value> DoubleEndedIterator for ValuesMut<'_, Key, Value> {
next_back(&mut self) -> Option<Self::Item>3667     fn next_back(&mut self) -> Option<Self::Item> {
3668         self.0.next_back().map(|entry| &mut entry.value)
3669     }
3670 }
3671 
3672 impl<Key, Value> ExactSizeIterator for ValuesMut<'_, Key, Value> {}
3673 
3674 impl<Key, Value> FusedIterator for ValuesMut<'_, Key, Value> {}
3675 
3676 impl<'map, Key, Value> Iterator for ValuesMut<'map, Key, Value> {
3677     type Item = &'map mut Value;
3678 
next(&mut self) -> Option<Self::Item>3679     fn next(&mut self) -> Option<Self::Item> {
3680         self.0.next().map(|entry| &mut entry.value)
3681     }
3682 
size_hint(&self) -> (usize, Option<usize>)3683     fn size_hint(&self) -> (usize, Option<usize>) {
3684         self.0.size_hint()
3685     }
3686 }
3687 
3688 /// Dummy builder hasher that is not meant to be used. It is simply a placeholder.
3689 #[derive(Clone, Debug)]
3690 struct DummyState;
3691 
3692 impl BuildHasher for DummyState {
3693     type Hasher = DummyHasher;
3694 
build_hasher(&self) -> Self::Hasher3695     fn build_hasher(&self) -> Self::Hasher {
3696         DummyHasher
3697     }
3698 }
3699 
3700 /// Dummy hasher that is not meant to be used. It is simply a placeholder.
3701 #[derive(Clone, Debug)]
3702 struct DummyHasher;
3703 
3704 impl Hasher for DummyHasher {
finish(&self) -> u643705     fn finish(&self) -> u64 {
3706         unimplemented!();
3707     }
3708 
write(&mut self, _: &[u8])3709     fn write(&mut self, _: &[u8]) {
3710         unimplemented!();
3711     }
3712 }
3713 
3714 /// Computes the hash value of the given key.
hash_key<KeyQuery, State>(state: &State, key: &KeyQuery) -> u64 where KeyQuery: ?Sized + Eq + Hash, State: BuildHasher,3715 fn hash_key<KeyQuery, State>(state: &State, key: &KeyQuery) -> u64
3716 where
3717     KeyQuery: ?Sized + Eq + Hash,
3718     State: BuildHasher,
3719 {
3720     let mut hasher = state.build_hasher();
3721     key.hash(&mut hasher);
3722     hasher.finish()
3723 }
3724 
raw_entry<'map, Key, KeyQuery, Value, State>( keys: &VecList<Key>, map: &'map HashMap<Index<Key>, MapEntry<Key, Value>, State>, hash: u64, key: &KeyQuery, ) -> Option<(&'map Index<Key>, &'map MapEntry<Key, Value>)> where Key: Borrow<KeyQuery> + Eq + Hash, KeyQuery: ?Sized + Eq + Hash, State: BuildHasher,3725 fn raw_entry<'map, Key, KeyQuery, Value, State>(
3726     keys: &VecList<Key>,
3727     map: &'map HashMap<Index<Key>, MapEntry<Key, Value>, State>,
3728     hash: u64,
3729     key: &KeyQuery,
3730 ) -> Option<(&'map Index<Key>, &'map MapEntry<Key, Value>)>
3731 where
3732     Key: Borrow<KeyQuery> + Eq + Hash,
3733     KeyQuery: ?Sized + Eq + Hash,
3734     State: BuildHasher,
3735 {
3736     // TODO(https://github.com/rust-lang/rust/issues/56158): Avoids segmentation fault.
3737     if map.capacity() == 0 {
3738         return None;
3739     }
3740 
3741     map.raw_entry().from_hash(hash, |&key_index| {
3742         let existing_key = keys.get(key_index).unwrap();
3743         key == existing_key.borrow()
3744     })
3745 }
3746 
raw_entry_mut<'map, Key, KeyQuery, Value, State>( keys: &VecList<Key>, map: &'map mut HashMap<Index<Key>, MapEntry<Key, Value>, State>, hash: u64, key: &KeyQuery, ) -> RawEntryMut<'map, Index<Key>, MapEntry<Key, Value>, State> where Key: Borrow<KeyQuery> + Eq + Hash, KeyQuery: ?Sized + Eq + Hash, State: BuildHasher,3747 fn raw_entry_mut<'map, Key, KeyQuery, Value, State>(
3748     keys: &VecList<Key>,
3749     map: &'map mut HashMap<Index<Key>, MapEntry<Key, Value>, State>,
3750     hash: u64,
3751     key: &KeyQuery,
3752 ) -> RawEntryMut<'map, Index<Key>, MapEntry<Key, Value>, State>
3753 where
3754     Key: Borrow<KeyQuery> + Eq + Hash,
3755     KeyQuery: ?Sized + Eq + Hash,
3756     State: BuildHasher,
3757 {
3758     map.raw_entry_mut().from_hash(hash, |&key_index| {
3759         let existing_key = keys.get(key_index).unwrap();
3760         key == existing_key.borrow()
3761     })
3762 }
3763 
raw_entry_mut_empty<'map, Key, KeyQuery, Value, State>( keys: &VecList<Key>, map: &'map mut HashMap<Index<Key>, MapEntry<Key, Value>, State>, hash: u64, ) -> RawEntryMut<'map, Index<Key>, MapEntry<Key, Value>, State> where Key: Borrow<KeyQuery> + Eq + Hash, KeyQuery: ?Sized + Eq + Hash, State: BuildHasher,3764 fn raw_entry_mut_empty<'map, Key, KeyQuery, Value, State>(
3765     keys: &VecList<Key>,
3766     map: &'map mut HashMap<Index<Key>, MapEntry<Key, Value>, State>,
3767     hash: u64,
3768 ) -> RawEntryMut<'map, Index<Key>, MapEntry<Key, Value>, State>
3769 where
3770     Key: Borrow<KeyQuery> + Eq + Hash,
3771     KeyQuery: ?Sized + Eq + Hash,
3772     State: BuildHasher,
3773 {
3774     map.raw_entry_mut()
3775         .from_hash(hash, |&key_index| keys.get(key_index).is_none())
3776 }
3777 
3778 #[cfg(test)]
3779 mod test {
3780     use super::*;
3781 
3782     #[test]
test_bounds()3783     fn test_bounds() {
3784         fn check_bounds<Type: Send + Sync>() {}
3785 
3786         check_bounds::<EntryValues<'static, (), ()>>();
3787         check_bounds::<EntryValuesDrain<'static, (), ()>>();
3788         check_bounds::<EntryValuesMut<'static, (), ()>>();
3789         check_bounds::<IntoIter<(), ()>>();
3790         check_bounds::<Iter<'static, (), ()>>();
3791         check_bounds::<IterMut<'static, (), ()>>();
3792         check_bounds::<KeyValues<'static, (), ()>>();
3793         check_bounds::<KeyValuesDrain<'static, (), ()>>();
3794         check_bounds::<KeyValuesEntryDrain<'static, (), ()>>();
3795         check_bounds::<KeyValuesMut<'static, (), ()>>();
3796         check_bounds::<ListOrderedMultimap<(), ()>>();
3797         check_bounds::<Values<'static, (), ()>>();
3798         check_bounds::<ValuesMut<'static, (), ()>>();
3799     }
3800 
3801     #[test]
test_collision()3802     fn test_collision() {
3803         struct TestBuildHasher;
3804 
3805         impl BuildHasher for TestBuildHasher {
3806             type Hasher = TestHasher;
3807 
3808             fn build_hasher(&self) -> Self::Hasher {
3809                 TestHasher
3810             }
3811         }
3812 
3813         struct TestHasher;
3814 
3815         impl Hasher for TestHasher {
3816             fn finish(&self) -> u64 {
3817                 0
3818             }
3819 
3820             fn write(&mut self, _: &[u8]) {}
3821         }
3822 
3823         let mut map = ListOrderedMultimap::with_hasher(TestBuildHasher);
3824 
3825         map.insert("key1", "value1");
3826         assert_eq!(map.get(&"key1"), Some(&"value1"));
3827 
3828         map.insert("key2", "value2");
3829         assert_eq!(map.get(&"key2"), Some(&"value2"));
3830     }
3831 
3832     #[test]
test_entry_and_modify()3833     fn test_entry_and_modify() {
3834         let mut map = ListOrderedMultimap::new();
3835         map.entry("key")
3836             .and_modify(|_| panic!("entry should be vacant"));
3837 
3838         map.insert("key", "value1");
3839         map.entry("key").and_modify(|value| *value = "value2");
3840         assert_eq!(map.get(&"key"), Some(&"value2"));
3841     }
3842 
3843     #[test]
test_entry_or_insert()3844     fn test_entry_or_insert() {
3845         let mut map = ListOrderedMultimap::new();
3846         let value = map.entry("key").or_insert("value1");
3847         assert_eq!(value, &"value1");
3848 
3849         let value = map.entry("key").or_insert("value2");
3850         assert_eq!(value, &"value1");
3851     }
3852 
3853     #[test]
test_entry_or_insert_entry()3854     fn test_entry_or_insert_entry() {
3855         let mut map = ListOrderedMultimap::new();
3856         let entry = map.entry("key").or_insert_entry("value1");
3857         assert_eq!(entry.get(), &"value1");
3858 
3859         let entry = map.entry("key").or_insert_entry("value2");
3860         assert_eq!(entry.get(), &"value1");
3861     }
3862 
3863     #[test]
test_entry_or_insert_with()3864     fn test_entry_or_insert_with() {
3865         let mut map = ListOrderedMultimap::new();
3866         let value = map.entry("key").or_insert_with(|| "value1");
3867         assert_eq!(value, &"value1");
3868 
3869         let value = map.entry("key").or_insert_with(|| "value2");
3870         assert_eq!(value, &"value1");
3871     }
3872 
3873     #[test]
test_entry_or_insert_with_entry()3874     fn test_entry_or_insert_with_entry() {
3875         let mut map = ListOrderedMultimap::new();
3876         let entry = map.entry("key").or_insert_with_entry(|| "value1");
3877         assert_eq!(entry.get(), &"value1");
3878 
3879         let entry = map.entry("key").or_insert_with_entry(|| "value2");
3880         assert_eq!(entry.get(), &"value1");
3881     }
3882 
3883     #[test]
test_entry_values_debug()3884     fn test_entry_values_debug() {
3885         let mut map = ListOrderedMultimap::new();
3886 
3887         map.insert("key", "value1");
3888         map.append("key", "value2");
3889         map.append("key", "value3");
3890         map.append("key", "value4");
3891 
3892         let iter = map.get_all(&"key");
3893         assert_eq!(
3894             format!("{:?}", iter),
3895             r#"EntryValues(["value1", "value2", "value3", "value4"])"#
3896         );
3897     }
3898 
3899     #[test]
test_entry_values_double_ended()3900     fn test_entry_values_double_ended() {
3901         let mut map = ListOrderedMultimap::new();
3902 
3903         map.insert("key", "value1");
3904         map.append("key", "value2");
3905         map.append("key", "value3");
3906         map.append("key", "value4");
3907 
3908         let mut iter = map.remove_all(&"key");
3909         assert_eq!(iter.next(), Some("value1"));
3910         assert_eq!(iter.next_back(), Some("value4"));
3911         assert_eq!(iter.next(), Some("value2"));
3912         assert_eq!(iter.next_back(), Some("value3"));
3913         assert_eq!(iter.next(), None);
3914     }
3915 
3916     #[test]
test_entry_values_drain_debug()3917     fn test_entry_values_drain_debug() {
3918         let mut map = ListOrderedMultimap::new();
3919 
3920         map.insert("key", "value1");
3921         map.append("key", "value2");
3922         map.append("key", "value3");
3923         map.append("key", "value4");
3924 
3925         let iter = map.remove_all(&"key");
3926         assert_eq!(
3927             format!("{:?}", iter),
3928             r#"EntryValuesDrain(["value1", "value2", "value3", "value4"])"#
3929         );
3930     }
3931 
3932     #[test]
test_entry_values_drain_double_ended()3933     fn test_entry_values_drain_double_ended() {
3934         let mut map = ListOrderedMultimap::new();
3935 
3936         map.insert("key", "value1");
3937         map.append("key", "value2");
3938         map.append("key", "value3");
3939         map.append("key", "value4");
3940 
3941         let mut iter = map.remove_all(&"key");
3942         assert_eq!(iter.next(), Some("value1"));
3943         assert_eq!(iter.next_back(), Some("value4"));
3944         assert_eq!(iter.next(), Some("value2"));
3945         assert_eq!(iter.next_back(), Some("value3"));
3946         assert_eq!(iter.next(), None);
3947     }
3948 
3949     #[test]
test_entry_values_drain_empty()3950     fn test_entry_values_drain_empty() {
3951         let mut map: ListOrderedMultimap<&str, &str> = ListOrderedMultimap::new();
3952         let mut iter = map.remove_all(&"key");
3953         assert_eq!(iter.next_back(), None);
3954         assert_eq!(iter.next(), None);
3955     }
3956 
3957     #[test]
test_entry_values_drain_fused()3958     fn test_entry_values_drain_fused() {
3959         let mut map = ListOrderedMultimap::new();
3960 
3961         map.insert("key", "value");
3962 
3963         let mut iter = map.remove_all(&"key");
3964         assert_eq!(iter.next(), Some("value"));
3965         assert_eq!(iter.next(), None);
3966         assert_eq!(iter.next_back(), None);
3967         assert_eq!(iter.next(), None);
3968         assert_eq!(iter.next_back(), None);
3969         assert_eq!(iter.next(), None);
3970     }
3971 
3972     #[test]
test_entry_values_drain_size_hint()3973     fn test_entry_values_drain_size_hint() {
3974         let mut map = ListOrderedMultimap::new();
3975 
3976         map.insert("key", "value1");
3977         map.append("key", "value2");
3978         map.append("key", "value3");
3979         map.append("key", "value4");
3980 
3981         let mut iter = map.remove_all(&"key");
3982         assert_eq!(iter.size_hint(), (4, Some(4)));
3983         iter.next();
3984         assert_eq!(iter.size_hint(), (3, Some(3)));
3985         iter.next();
3986         assert_eq!(iter.size_hint(), (2, Some(2)));
3987         iter.next();
3988         assert_eq!(iter.size_hint(), (1, Some(1)));
3989         iter.next();
3990         assert_eq!(iter.size_hint(), (0, Some(0)));
3991     }
3992 
3993     #[test]
test_entry_values_empty()3994     fn test_entry_values_empty() {
3995         let map: ListOrderedMultimap<&str, &str> = ListOrderedMultimap::new();
3996         let mut iter = map.get_all(&"key");
3997         assert_eq!(iter.next_back(), None);
3998         assert_eq!(iter.next(), None);
3999     }
4000 
4001     #[test]
test_entry_values_fused()4002     fn test_entry_values_fused() {
4003         let mut map = ListOrderedMultimap::new();
4004 
4005         map.insert("key", "value");
4006 
4007         let mut iter = map.get_all(&"key");
4008         assert_eq!(iter.next(), Some(&"value"));
4009         assert_eq!(iter.next(), None);
4010         assert_eq!(iter.next_back(), None);
4011         assert_eq!(iter.next(), None);
4012         assert_eq!(iter.next_back(), None);
4013         assert_eq!(iter.next(), None);
4014     }
4015 
4016     #[test]
test_entry_values_mut_debug()4017     fn test_entry_values_mut_debug() {
4018         let mut map = ListOrderedMultimap::new();
4019 
4020         map.insert("key", "value1");
4021         map.append("key", "value2");
4022         map.append("key", "value3");
4023         map.append("key", "value4");
4024 
4025         let iter = map.get_all_mut(&"key");
4026         assert_eq!(
4027             format!("{:?}", iter),
4028             r#"EntryValuesMut(["value1", "value2", "value3", "value4"])"#
4029         );
4030     }
4031 
4032     #[test]
test_entry_values_mut_double_ended()4033     fn test_entry_values_mut_double_ended() {
4034         let mut map = ListOrderedMultimap::new();
4035 
4036         map.insert("key", "value1");
4037         map.append("key", "value2");
4038         map.append("key", "value3");
4039         map.append("key", "value4");
4040 
4041         let mut iter = map.get_all_mut(&"key");
4042         assert_eq!(iter.next(), Some(&mut "value1"));
4043         assert_eq!(iter.next_back(), Some(&mut "value4"));
4044         assert_eq!(iter.next(), Some(&mut "value2"));
4045         assert_eq!(iter.next_back(), Some(&mut "value3"));
4046         assert_eq!(iter.next(), None);
4047     }
4048 
4049     #[test]
test_entry_values_mut_empty()4050     fn test_entry_values_mut_empty() {
4051         let mut map: ListOrderedMultimap<&str, &str> = ListOrderedMultimap::new();
4052         let mut iter = map.get_all_mut(&"key");
4053         assert_eq!(iter.next_back(), None);
4054         assert_eq!(iter.next(), None);
4055     }
4056 
4057     #[test]
test_entry_values_mut_fused()4058     fn test_entry_values_mut_fused() {
4059         let mut map = ListOrderedMultimap::new();
4060 
4061         map.insert("key", "value");
4062 
4063         let mut iter = map.get_all_mut(&"key");
4064         assert_eq!(iter.next(), Some(&mut "value"));
4065         assert_eq!(iter.next(), None);
4066         assert_eq!(iter.next_back(), None);
4067         assert_eq!(iter.next(), None);
4068         assert_eq!(iter.next_back(), None);
4069         assert_eq!(iter.next(), None);
4070     }
4071 
4072     #[test]
test_entry_values_mut_size_hint()4073     fn test_entry_values_mut_size_hint() {
4074         let mut map = ListOrderedMultimap::new();
4075 
4076         map.insert("key", "value1");
4077         map.append("key", "value2");
4078         map.append("key", "value3");
4079         map.append("key", "value4");
4080 
4081         let mut iter = map.get_all_mut(&"key");
4082         assert_eq!(iter.size_hint(), (4, Some(4)));
4083         iter.next();
4084         assert_eq!(iter.size_hint(), (3, Some(3)));
4085         iter.next();
4086         assert_eq!(iter.size_hint(), (2, Some(2)));
4087         iter.next();
4088         assert_eq!(iter.size_hint(), (1, Some(1)));
4089         iter.next();
4090         assert_eq!(iter.size_hint(), (0, Some(0)));
4091     }
4092 
4093     #[test]
test_entry_values_size_hint()4094     fn test_entry_values_size_hint() {
4095         let mut map = ListOrderedMultimap::new();
4096 
4097         map.insert("key", "value1");
4098         map.append("key", "value2");
4099         map.append("key", "value3");
4100         map.append("key", "value4");
4101 
4102         let mut iter = map.get_all(&"key");
4103         assert_eq!(iter.size_hint(), (4, Some(4)));
4104         iter.next();
4105         assert_eq!(iter.size_hint(), (3, Some(3)));
4106         iter.next();
4107         assert_eq!(iter.size_hint(), (2, Some(2)));
4108         iter.next();
4109         assert_eq!(iter.size_hint(), (1, Some(1)));
4110         iter.next();
4111         assert_eq!(iter.size_hint(), (0, Some(0)));
4112     }
4113 
4114     #[test]
test_iter_debug()4115     fn test_iter_debug() {
4116         let mut map = ListOrderedMultimap::new();
4117 
4118         map.insert("key1", "value1");
4119         map.append("key2", "value2");
4120         map.append("key2", "value3");
4121         map.append("key1", "value4");
4122 
4123         let iter = map.iter();
4124         assert_eq!(
4125             format!("{:?}", iter),
4126             r#"Iter([("key1", "value1"), ("key2", "value2"), ("key2", "value3"), ("key1", "value4")])"#
4127         );
4128     }
4129 
4130     #[test]
test_iter_double_ended()4131     fn test_iter_double_ended() {
4132         let mut map = ListOrderedMultimap::new();
4133 
4134         map.insert("key1", "value1");
4135         map.append("key2", "value2");
4136         map.append("key2", "value3");
4137         map.append("key1", "value4");
4138 
4139         let mut iter = map.iter();
4140         assert_eq!(iter.next(), Some((&"key1", &"value1")));
4141         assert_eq!(iter.next_back(), Some((&"key1", &"value4")));
4142         assert_eq!(iter.next(), Some((&"key2", &"value2")));
4143         assert_eq!(iter.next_back(), Some((&"key2", &"value3")));
4144         assert_eq!(iter.next(), None);
4145     }
4146 
4147     #[test]
test_iter_empty()4148     fn test_iter_empty() {
4149         let map: ListOrderedMultimap<&str, &str> = ListOrderedMultimap::new();
4150         let mut iter = map.iter();
4151         assert_eq!(iter.next_back(), None);
4152         assert_eq!(iter.next(), None);
4153     }
4154 
4155     #[test]
test_iter_fused()4156     fn test_iter_fused() {
4157         let mut map = ListOrderedMultimap::new();
4158 
4159         map.insert("key", "value");
4160 
4161         let mut iter = map.iter();
4162         assert_eq!(iter.next(), Some((&"key", &"value")));
4163         assert_eq!(iter.next(), None);
4164         assert_eq!(iter.next_back(), None);
4165         assert_eq!(iter.next(), None);
4166         assert_eq!(iter.next_back(), None);
4167         assert_eq!(iter.next(), None);
4168     }
4169 
4170     #[test]
test_iter_mut_debug()4171     fn test_iter_mut_debug() {
4172         let mut map = ListOrderedMultimap::new();
4173 
4174         map.insert("key1", "value1");
4175         map.append("key2", "value2");
4176         map.append("key2", "value3");
4177         map.append("key1", "value4");
4178 
4179         let iter = map.iter_mut();
4180         assert_eq!(
4181             format!("{:?}", iter),
4182             r#"IterMut([("key1", "value1"), ("key2", "value2"), ("key2", "value3"), ("key1", "value4")])"#
4183         );
4184     }
4185 
4186     #[test]
test_iter_mut_double_ended()4187     fn test_iter_mut_double_ended() {
4188         let mut map = ListOrderedMultimap::new();
4189 
4190         map.insert("key1", "value1");
4191         map.append("key2", "value2");
4192         map.append("key2", "value3");
4193         map.append("key1", "value4");
4194 
4195         let mut iter = map.iter_mut();
4196         assert_eq!(iter.next(), Some((&"key1", &mut "value1")));
4197         assert_eq!(iter.next_back(), Some((&"key1", &mut "value4")));
4198         assert_eq!(iter.next(), Some((&"key2", &mut "value2")));
4199         assert_eq!(iter.next_back(), Some((&"key2", &mut "value3")));
4200         assert_eq!(iter.next(), None);
4201     }
4202 
4203     #[test]
test_iter_mut_empty()4204     fn test_iter_mut_empty() {
4205         let mut map: ListOrderedMultimap<&str, &str> = ListOrderedMultimap::new();
4206         let mut iter = map.iter_mut();
4207         assert_eq!(iter.next_back(), None);
4208         assert_eq!(iter.next(), None);
4209     }
4210 
4211     #[test]
test_iter_mut_fused()4212     fn test_iter_mut_fused() {
4213         let mut map = ListOrderedMultimap::new();
4214 
4215         map.insert("key", "value");
4216 
4217         let mut iter = map.iter_mut();
4218         assert_eq!(iter.next(), Some((&"key", &mut "value")));
4219         assert_eq!(iter.next(), None);
4220         assert_eq!(iter.next_back(), None);
4221         assert_eq!(iter.next(), None);
4222         assert_eq!(iter.next_back(), None);
4223         assert_eq!(iter.next(), None);
4224     }
4225 
4226     #[test]
test_iter_mut_size_hint()4227     fn test_iter_mut_size_hint() {
4228         let mut map = ListOrderedMultimap::new();
4229 
4230         map.insert("key1", "value1");
4231         map.append("key2", "value2");
4232         map.append("key2", "value3");
4233         map.append("key1", "value4");
4234 
4235         let mut iter = map.iter_mut();
4236         assert_eq!(iter.size_hint(), (4, Some(4)));
4237         iter.next();
4238         assert_eq!(iter.size_hint(), (3, Some(3)));
4239         iter.next();
4240         assert_eq!(iter.size_hint(), (2, Some(2)));
4241         iter.next();
4242         assert_eq!(iter.size_hint(), (1, Some(1)));
4243         iter.next();
4244         assert_eq!(iter.size_hint(), (0, Some(0)));
4245     }
4246 
4247     #[test]
test_iter_size_hint()4248     fn test_iter_size_hint() {
4249         let mut map = ListOrderedMultimap::new();
4250 
4251         map.insert("key1", "value1");
4252         map.append("key2", "value2");
4253         map.append("key2", "value3");
4254         map.append("key1", "value4");
4255 
4256         let mut iter = map.iter();
4257         assert_eq!(iter.size_hint(), (4, Some(4)));
4258         iter.next();
4259         assert_eq!(iter.size_hint(), (3, Some(3)));
4260         iter.next();
4261         assert_eq!(iter.size_hint(), (2, Some(2)));
4262         iter.next();
4263         assert_eq!(iter.size_hint(), (1, Some(1)));
4264         iter.next();
4265         assert_eq!(iter.size_hint(), (0, Some(0)));
4266     }
4267 
4268     #[test]
test_into_iter_debug()4269     fn test_into_iter_debug() {
4270         let mut map = ListOrderedMultimap::new();
4271 
4272         map.insert("key1", "value1");
4273         map.append("key2", "value2");
4274         map.append("key2", "value3");
4275         map.append("key1", "value4");
4276 
4277         let iter = map.into_iter();
4278         assert_eq!(
4279             format!("{:?}", iter),
4280             r#"IntoIter([("key1", "value1"), ("key2", "value2"), ("key2", "value3"), ("key1", "value4")])"#
4281         );
4282     }
4283 
4284     #[test]
test_into_iter_double_ended()4285     fn test_into_iter_double_ended() {
4286         let mut map = ListOrderedMultimap::new();
4287 
4288         map.insert("key1", "value1");
4289         map.append("key2", "value2");
4290         map.append("key2", "value3");
4291         map.append("key1", "value4");
4292 
4293         let mut iter = map.into_iter();
4294         assert_eq!(iter.next(), Some(("key1", "value1")));
4295         assert_eq!(iter.next_back(), Some(("key1", "value4")));
4296         assert_eq!(iter.next(), Some(("key2", "value2")));
4297         assert_eq!(iter.next_back(), Some(("key2", "value3")));
4298         assert_eq!(iter.next(), None);
4299     }
4300 
4301     #[test]
test_into_iter_empty()4302     fn test_into_iter_empty() {
4303         let map: ListOrderedMultimap<&str, &str> = ListOrderedMultimap::new();
4304         let mut iter = map.into_iter();
4305         assert_eq!(iter.next_back(), None);
4306         assert_eq!(iter.next(), None);
4307     }
4308 
4309     #[test]
test_into_iter_fused()4310     fn test_into_iter_fused() {
4311         let mut map = ListOrderedMultimap::new();
4312 
4313         map.insert("key", "value");
4314 
4315         let mut iter = map.into_iter();
4316         assert_eq!(iter.next(), Some(("key", "value")));
4317         assert_eq!(iter.next(), None);
4318         assert_eq!(iter.next_back(), None);
4319         assert_eq!(iter.next(), None);
4320         assert_eq!(iter.next_back(), None);
4321         assert_eq!(iter.next(), None);
4322     }
4323 
4324     #[test]
test_into_iter_size_hint()4325     fn test_into_iter_size_hint() {
4326         let mut map = ListOrderedMultimap::new();
4327 
4328         map.insert("key1", "value1");
4329         map.append("key2", "value2");
4330         map.append("key2", "value3");
4331         map.append("key1", "value4");
4332 
4333         let mut iter = map.into_iter();
4334         assert_eq!(iter.size_hint(), (4, Some(4)));
4335         iter.next();
4336         assert_eq!(iter.size_hint(), (3, Some(3)));
4337         iter.next();
4338         assert_eq!(iter.size_hint(), (2, Some(2)));
4339         iter.next();
4340         assert_eq!(iter.size_hint(), (1, Some(1)));
4341         iter.next();
4342         assert_eq!(iter.size_hint(), (0, Some(0)));
4343     }
4344 
4345     #[test]
test_key_values_debug()4346     fn test_key_values_debug() {
4347         let mut map = ListOrderedMultimap::new();
4348 
4349         map.insert("key1", "value1");
4350         map.append("key2", "value2");
4351         map.append("key2", "value3");
4352         map.append("key1", "value4");
4353 
4354         let iter = map.pairs();
4355         assert_eq!(
4356             format!("{:?}", iter),
4357             r#"KeyValues([("key1", EntryValues(["value1", "value4"])), ("key2", EntryValues(["value2", "value3"]))])"#
4358         );
4359     }
4360 
4361     #[test]
test_key_values_double_ended()4362     fn test_key_values_double_ended() {
4363         let mut map = ListOrderedMultimap::new();
4364 
4365         map.insert("key1", "value1");
4366         map.append("key2", "value2");
4367         map.append("key2", "value3");
4368         map.append("key1", "value4");
4369 
4370         let mut iter = map.pairs();
4371 
4372         let (key, mut values) = iter.next().unwrap();
4373         assert_eq!(key, &"key1");
4374         assert_eq!(values.next(), Some(&"value1"));
4375         assert_eq!(values.next(), Some(&"value4"));
4376         assert_eq!(values.next(), None);
4377 
4378         let (key, mut values) = iter.next().unwrap();
4379         assert_eq!(key, &"key2");
4380         assert_eq!(values.next(), Some(&"value2"));
4381         assert_eq!(values.next(), Some(&"value3"));
4382         assert_eq!(values.next(), None);
4383 
4384         assert!(iter.next().is_none());
4385     }
4386 
4387     #[test]
test_key_values_drain_debug()4388     fn test_key_values_drain_debug() {
4389         let mut map = ListOrderedMultimap::new();
4390 
4391         map.insert("key1", "value1");
4392         map.append("key2", "value2");
4393         map.append("key2", "value3");
4394         map.append("key1", "value4");
4395 
4396         let iter = map.drain_pairs();
4397         assert_eq!(
4398             format!("{:?}", iter),
4399             r#"KeyValuesDrain([("key1", EntryValues(["value1", "value4"])), ("key2", EntryValues(["value2", "value3"]))])"#
4400         );
4401     }
4402 
4403     #[test]
test_key_values_drain_double_ended()4404     fn test_key_values_drain_double_ended() {
4405         let mut map = ListOrderedMultimap::new();
4406 
4407         map.insert("key1", "value1");
4408         map.append("key2", "value2");
4409         map.append("key2", "value3");
4410         map.append("key1", "value4");
4411 
4412         let mut iter = map.drain_pairs();
4413 
4414         let (key, mut values) = iter.next().unwrap();
4415         assert_eq!(key, "key1");
4416         assert_eq!(values.next(), Some("value1"));
4417         assert_eq!(values.next(), Some("value4"));
4418         assert_eq!(values.next(), None);
4419 
4420         let (key, mut values) = iter.next().unwrap();
4421         assert_eq!(key, "key2");
4422         assert_eq!(values.next(), Some("value2"));
4423         assert_eq!(values.next(), Some("value3"));
4424         assert_eq!(values.next(), None);
4425 
4426         assert!(iter.next().is_none());
4427     }
4428 
4429     #[test]
test_key_values_drain_empty()4430     fn test_key_values_drain_empty() {
4431         let mut map: ListOrderedMultimap<&str, &str> = ListOrderedMultimap::new();
4432         let mut iter = map.drain_pairs();
4433         assert!(iter.next_back().is_none());
4434         assert!(iter.next().is_none());
4435     }
4436 
4437     #[test]
test_key_values_drain_fused()4438     fn test_key_values_drain_fused() {
4439         let mut map = ListOrderedMultimap::new();
4440 
4441         map.insert("key", "value");
4442 
4443         let mut iter = map.drain_pairs();
4444 
4445         let (key, mut values) = iter.next().unwrap();
4446         assert_eq!(key, "key");
4447         assert_eq!(values.next(), Some("value"));
4448         assert_eq!(values.next(), None);
4449 
4450         assert!(iter.next().is_none());
4451         assert!(iter.next_back().is_none());
4452         assert!(iter.next().is_none());
4453         assert!(iter.next_back().is_none());
4454         assert!(iter.next().is_none());
4455     }
4456 
4457     #[test]
test_key_values_drain_size_hint()4458     fn test_key_values_drain_size_hint() {
4459         let mut map = ListOrderedMultimap::new();
4460 
4461         map.insert("key1", "value1");
4462         map.append("key2", "value2");
4463         map.append("key2", "value3");
4464         map.append("key1", "value4");
4465 
4466         let mut iter = map.drain_pairs();
4467         assert_eq!(iter.size_hint(), (2, Some(2)));
4468         iter.next();
4469         assert_eq!(iter.size_hint(), (1, Some(1)));
4470         iter.next();
4471         assert_eq!(iter.size_hint(), (0, Some(0)));
4472     }
4473 
4474     #[test]
test_key_values_empty()4475     fn test_key_values_empty() {
4476         let map: ListOrderedMultimap<&str, &str> = ListOrderedMultimap::new();
4477         let mut iter = map.pairs();
4478         assert!(iter.next_back().is_none());
4479         assert!(iter.next().is_none());
4480     }
4481 
4482     #[test]
test_key_values_entry_drain_debug()4483     fn test_key_values_entry_drain_debug() {
4484         let mut map = ListOrderedMultimap::new();
4485 
4486         map.insert("key", "value1");
4487         map.append("key", "value2");
4488         map.append("key", "value3");
4489         map.append("key", "value4");
4490 
4491         let mut iter = map.drain_pairs();
4492         let (_, values) = iter.next().unwrap();
4493 
4494         assert_eq!(
4495             format!("{:?}", values),
4496             r#"KeyValuesEntryDrain(["value1", "value2", "value3", "value4"])"#
4497         );
4498     }
4499 
4500     #[test]
test_key_values_entry_drain_double_ended()4501     fn test_key_values_entry_drain_double_ended() {
4502         let mut map = ListOrderedMultimap::new();
4503 
4504         map.insert("key", "value1");
4505         map.append("key", "value2");
4506         map.append("key", "value3");
4507         map.append("key", "value4");
4508 
4509         let mut iter = map.drain_pairs();
4510         let (_, mut values) = iter.next().unwrap();
4511         assert_eq!(values.next(), Some("value1"));
4512         assert_eq!(values.next_back(), Some("value4"));
4513         assert_eq!(values.next(), Some("value2"));
4514         assert_eq!(values.next_back(), Some("value3"));
4515         assert_eq!(values.next(), None);
4516 
4517         assert!(iter.next().is_none());
4518     }
4519 
4520     #[test]
test_key_values_entry_drain_fused()4521     fn test_key_values_entry_drain_fused() {
4522         let mut map = ListOrderedMultimap::new();
4523 
4524         map.insert("key", "value");
4525 
4526         let mut iter = map.drain_pairs();
4527         let (_, mut values) = iter.next().unwrap();
4528         assert_eq!(values.next(), Some("value"));
4529         assert_eq!(values.next(), None);
4530         assert_eq!(values.next_back(), None);
4531         assert_eq!(values.next(), None);
4532         assert_eq!(values.next_back(), None);
4533     }
4534 
4535     #[test]
test_key_values_entry_drain_size_hint()4536     fn test_key_values_entry_drain_size_hint() {
4537         let mut map = ListOrderedMultimap::new();
4538 
4539         map.insert("key1", "value1");
4540         map.append("key2", "value2");
4541         map.append("key2", "value3");
4542         map.append("key1", "value4");
4543 
4544         let mut iter = map.drain_pairs();
4545         let (_, mut values) = iter.next().unwrap();
4546         assert_eq!(values.size_hint(), (2, Some(2)));
4547         values.next();
4548         assert_eq!(values.size_hint(), (1, Some(1)));
4549         values.next();
4550         assert_eq!(values.size_hint(), (0, Some(0)));
4551     }
4552 
4553     #[test]
test_key_values_fused()4554     fn test_key_values_fused() {
4555         let mut map = ListOrderedMultimap::new();
4556 
4557         map.insert("key", "value");
4558 
4559         let mut iter = map.pairs();
4560 
4561         let (key, mut values) = iter.next().unwrap();
4562         assert_eq!(key, &"key");
4563         assert_eq!(values.next(), Some(&"value"));
4564         assert_eq!(values.next(), None);
4565 
4566         assert!(iter.next().is_none());
4567         assert!(iter.next_back().is_none());
4568         assert!(iter.next().is_none());
4569         assert!(iter.next_back().is_none());
4570         assert!(iter.next().is_none());
4571     }
4572 
4573     #[test]
test_key_values_mut_debug()4574     fn test_key_values_mut_debug() {
4575         let mut map = ListOrderedMultimap::new();
4576 
4577         map.insert("key1", "value1");
4578         map.append("key2", "value2");
4579         map.append("key2", "value3");
4580         map.append("key1", "value4");
4581 
4582         let iter = map.pairs_mut();
4583         assert_eq!(
4584             format!("{:?}", iter),
4585             r#"KeyValuesMut([("key1", EntryValues(["value1", "value4"])), ("key2", EntryValues(["value2", "value3"]))])"#
4586         );
4587     }
4588 
4589     #[test]
test_key_values_mut_double_ended()4590     fn test_key_values_mut_double_ended() {
4591         let mut map = ListOrderedMultimap::new();
4592 
4593         map.insert("key1", "value1");
4594         map.append("key2", "value2");
4595         map.append("key2", "value3");
4596         map.append("key1", "value4");
4597 
4598         let mut iter = map.pairs_mut();
4599 
4600         let (key, mut values) = iter.next().unwrap();
4601         assert_eq!(key, &"key1");
4602         assert_eq!(values.next(), Some(&mut "value1"));
4603         assert_eq!(values.next(), Some(&mut "value4"));
4604         assert_eq!(values.next(), None);
4605 
4606         let (key, mut values) = iter.next().unwrap();
4607         assert_eq!(key, &"key2");
4608         assert_eq!(values.next(), Some(&mut "value2"));
4609         assert_eq!(values.next(), Some(&mut "value3"));
4610         assert_eq!(values.next(), None);
4611 
4612         assert!(iter.next().is_none());
4613     }
4614 
4615     #[test]
test_key_values_mut_empty()4616     fn test_key_values_mut_empty() {
4617         let mut map: ListOrderedMultimap<&str, &str> = ListOrderedMultimap::new();
4618         let mut iter = map.pairs_mut();
4619         assert!(iter.next_back().is_none());
4620         assert!(iter.next().is_none());
4621     }
4622 
4623     #[test]
test_key_values_mut_fused()4624     fn test_key_values_mut_fused() {
4625         let mut map = ListOrderedMultimap::new();
4626 
4627         map.insert("key", "value");
4628 
4629         let mut iter = map.pairs_mut();
4630 
4631         let (key, mut values) = iter.next().unwrap();
4632         assert_eq!(key, &"key");
4633         assert_eq!(values.next(), Some(&mut "value"));
4634         assert_eq!(values.next(), None);
4635 
4636         assert!(iter.next().is_none());
4637         assert!(iter.next_back().is_none());
4638         assert!(iter.next().is_none());
4639         assert!(iter.next_back().is_none());
4640         assert!(iter.next().is_none());
4641     }
4642 
4643     #[test]
test_key_values_mut_size_hint()4644     fn test_key_values_mut_size_hint() {
4645         let mut map = ListOrderedMultimap::new();
4646 
4647         map.insert("key1", "value1");
4648         map.append("key2", "value2");
4649         map.append("key2", "value3");
4650         map.append("key1", "value4");
4651 
4652         let mut iter = map.pairs_mut();
4653         assert_eq!(iter.size_hint(), (2, Some(2)));
4654         iter.next();
4655         assert_eq!(iter.size_hint(), (1, Some(1)));
4656         iter.next();
4657         assert_eq!(iter.size_hint(), (0, Some(0)));
4658     }
4659 
4660     #[test]
test_key_values_size_hint()4661     fn test_key_values_size_hint() {
4662         let mut map = ListOrderedMultimap::new();
4663 
4664         map.insert("key1", "value1");
4665         map.append("key2", "value2");
4666         map.append("key2", "value3");
4667         map.append("key1", "value4");
4668 
4669         let mut iter = map.pairs();
4670         assert_eq!(iter.size_hint(), (2, Some(2)));
4671         iter.next();
4672         assert_eq!(iter.size_hint(), (1, Some(1)));
4673         iter.next();
4674         assert_eq!(iter.size_hint(), (0, Some(0)));
4675     }
4676 
4677     #[test]
test_keys_debug()4678     fn test_keys_debug() {
4679         let mut map = ListOrderedMultimap::new();
4680 
4681         map.insert("key1", "value1");
4682         map.append("key2", "value2");
4683         map.append("key2", "value3");
4684         map.append("key1", "value4");
4685 
4686         let iter = map.keys();
4687         assert_eq!(format!("{:?}", iter), r#"Keys(["key1", "key2"])"#);
4688     }
4689 
4690     #[test]
test_keys_double_ended()4691     fn test_keys_double_ended() {
4692         let mut map = ListOrderedMultimap::new();
4693 
4694         map.insert("key1", "value1");
4695         map.append("key2", "value2");
4696         map.append("key2", "value3");
4697         map.append("key1", "value4");
4698 
4699         let mut iter = map.keys();
4700         assert_eq!(iter.next(), Some(&"key1"));
4701         assert_eq!(iter.next_back(), Some(&"key2"));
4702         assert_eq!(iter.next(), None);
4703     }
4704 
4705     #[test]
test_keys_empty()4706     fn test_keys_empty() {
4707         let map: ListOrderedMultimap<&str, &str> = ListOrderedMultimap::new();
4708         let mut iter = map.keys();
4709         assert_eq!(iter.next_back(), None);
4710         assert_eq!(iter.next(), None);
4711     }
4712 
4713     #[test]
test_keys_fused()4714     fn test_keys_fused() {
4715         let mut map = ListOrderedMultimap::new();
4716 
4717         map.insert("key", "value");
4718 
4719         let mut iter = map.keys();
4720         assert_eq!(iter.next(), Some(&"key"));
4721         assert_eq!(iter.next(), None);
4722         assert_eq!(iter.next_back(), None);
4723         assert_eq!(iter.next(), None);
4724         assert_eq!(iter.next_back(), None);
4725         assert_eq!(iter.next(), None);
4726     }
4727 
4728     #[test]
test_keys_size_hint()4729     fn test_keys_size_hint() {
4730         let mut map = ListOrderedMultimap::new();
4731 
4732         map.insert("key1", "value1");
4733         map.append("key2", "value2");
4734         map.append("key2", "value3");
4735         map.append("key1", "value4");
4736 
4737         let mut iter = map.keys();
4738         assert_eq!(iter.size_hint(), (2, Some(2)));
4739         iter.next();
4740         assert_eq!(iter.size_hint(), (1, Some(1)));
4741         iter.next();
4742         assert_eq!(iter.size_hint(), (0, Some(0)));
4743     }
4744 
4745     #[test]
test_list_ordered_multimap_append()4746     fn test_list_ordered_multimap_append() {
4747         let mut map = ListOrderedMultimap::new();
4748         assert_eq!(map.entry_len(&"key"), 0);
4749 
4750         let already_exists = map.append("key", "value1");
4751         assert!(!already_exists);
4752         assert_eq!(map.entry_len(&"key"), 1);
4753 
4754         let already_exists = map.append("key", "value2");
4755         assert!(already_exists);
4756         assert_eq!(map.entry_len(&"key"), 2);
4757 
4758         let mut iter = map.get_all(&"key");
4759         assert_eq!(iter.next(), Some(&"value1"));
4760         assert_eq!(iter.next(), Some(&"value2"));
4761         assert_eq!(iter.next(), None);
4762     }
4763 
4764     #[test]
test_list_ordered_multimap_back()4765     fn test_list_ordered_multimap_back() {
4766         let mut map = ListOrderedMultimap::new();
4767         assert_eq!(map.back(), None);
4768 
4769         map.insert("key1", "value1");
4770         assert_eq!(map.back(), Some((&"key1", &"value1")));
4771 
4772         map.append("key2", "value2");
4773         assert_eq!(map.back(), Some((&"key2", &"value2")));
4774 
4775         map.remove(&"key2");
4776         assert_eq!(map.back(), Some((&"key1", &"value1")));
4777 
4778         map.remove(&"key1");
4779         assert_eq!(map.back(), None);
4780     }
4781 
4782     #[test]
test_list_ordered_multimap_back_mut()4783     fn test_list_ordered_multimap_back_mut() {
4784         let mut map = ListOrderedMultimap::new();
4785         assert_eq!(map.back(), None);
4786 
4787         map.insert("key1", "value1");
4788         assert_eq!(map.back(), Some((&"key1", &"value1")));
4789 
4790         map.append("key2", "value2");
4791         assert_eq!(map.back(), Some((&"key2", &"value2")));
4792 
4793         map.remove(&"key2");
4794         assert_eq!(map.back(), Some((&"key1", &"value1")));
4795 
4796         map.remove(&"key1");
4797         assert_eq!(map.back(), None);
4798     }
4799 
4800     #[test]
test_list_ordered_multimap_clear()4801     fn test_list_ordered_multimap_clear() {
4802         let mut map = ListOrderedMultimap::new();
4803         map.insert("key", "value");
4804         map.insert("key2", "value");
4805 
4806         map.clear();
4807 
4808         assert!(map.is_empty());
4809         assert_eq!(map.get(&"key"), None);
4810         assert_eq!(map.get(&"key2"), None);
4811     }
4812 
4813     #[test]
test_list_ordered_multimap_contains_key()4814     fn test_list_ordered_multimap_contains_key() {
4815         let mut map = ListOrderedMultimap::new();
4816         assert!(!map.contains_key(&"key"));
4817 
4818         map.insert("key", "value");
4819         assert!(map.contains_key(&"key"));
4820     }
4821 
4822     #[test]
test_list_ordered_multimap_debug()4823     fn test_list_ordered_multimap_debug() {
4824         let mut map = ListOrderedMultimap::new();
4825 
4826         map.insert("key1", "value1");
4827         map.insert("key2", "value2");
4828         map.append("key2", "value3");
4829         map.append("key1", "value4");
4830 
4831         assert_eq!(
4832             format!("{:?}", map),
4833             r#"{"key1": "value1", "key2": "value2", "key2": "value3", "key1": "value4"}"#
4834         );
4835     }
4836 
4837     #[test]
test_list_ordered_multimap_drain_pairs()4838     fn test_list_ordered_multimap_drain_pairs() {
4839         let mut map = ListOrderedMultimap::new();
4840 
4841         map.insert("key1", "value1");
4842         map.insert("key2", "value2");
4843         map.append("key2", "value3");
4844         map.append("key1", "value4");
4845 
4846         let prior_keys_capacity = map.keys_capacity();
4847         let prior_values_capacity = map.values_capacity();
4848 
4849         {
4850             let mut iter = map.drain_pairs();
4851 
4852             let (key, mut values) = iter.next().unwrap();
4853             assert_eq!(key, "key1");
4854             assert_eq!(values.next(), Some("value1"));
4855             assert_eq!(values.next(), Some("value4"));
4856             assert_eq!(values.next(), None);
4857 
4858             let (key, mut values) = iter.next().unwrap();
4859             assert_eq!(key, "key2");
4860             assert_eq!(values.next(), Some("value2"));
4861             assert_eq!(values.next(), Some("value3"));
4862             assert_eq!(values.next(), None);
4863 
4864             assert!(iter.next().is_none());
4865         }
4866 
4867         assert!(map.is_empty());
4868         assert_eq!(map.keys_capacity(), prior_keys_capacity);
4869         assert_eq!(map.values_capacity(), prior_values_capacity);
4870     }
4871 
4872     #[test]
test_list_ordered_multimap_entry()4873     fn test_list_ordered_multimap_entry() {
4874         let mut map = ListOrderedMultimap::new();
4875         assert_eq!(map.get(&"key1"), None);
4876 
4877         let value = map.entry("key").or_insert("value1");
4878         assert_eq!(value, &"value1");
4879         assert_eq!(map.get(&"key"), Some(&"value1"));
4880 
4881         let value = map.entry("key").or_insert("value2");
4882         assert_eq!(value, &"value1");
4883         assert_eq!(map.get(&"key"), Some(&"value1"));
4884     }
4885 
4886     #[test]
test_list_ordered_multimap_entry_len()4887     fn test_list_ordered_multimap_entry_len() {
4888         let mut map = ListOrderedMultimap::new();
4889         assert_eq!(map.entry_len(&"key1"), 0);
4890 
4891         map.insert("key", "value");
4892         assert_eq!(map.entry_len(&"key"), 1);
4893 
4894         map.insert("key", "value");
4895         assert_eq!(map.entry_len(&"key"), 1);
4896 
4897         map.append("key", "value");
4898         assert_eq!(map.entry_len(&"key"), 2);
4899 
4900         map.insert("key", "value");
4901         assert_eq!(map.entry_len(&"key"), 1);
4902 
4903         map.remove(&"key");
4904         assert_eq!(map.entry_len(&"key"), 0);
4905     }
4906 
4907     #[test]
test_list_ordered_multimap_equality()4908     fn test_list_ordered_multimap_equality() {
4909         let mut map_1 = ListOrderedMultimap::new();
4910 
4911         map_1.insert("key1", "value1");
4912         map_1.insert("key2", "value2");
4913         map_1.append("key2", "value3");
4914         map_1.append("key1", "value4");
4915 
4916         let mut map_2 = map_1.clone();
4917         map_2.pop_back();
4918 
4919         assert_ne!(map_1, map_2);
4920 
4921         map_2.append("key1", "value4");
4922         assert_eq!(map_1, map_2);
4923     }
4924 
4925     #[test]
test_list_ordered_multimap_extend()4926     fn test_list_ordered_multimap_extend() {
4927         let mut map = ListOrderedMultimap::new();
4928         map.extend(vec![("key1", "value1"), ("key2", "value2"), ("key2", "value3")].into_iter());
4929 
4930         let mut iter = map.get_all(&"key1");
4931         assert_eq!(iter.next(), Some(&"value1"));
4932         assert_eq!(iter.next(), None);
4933 
4934         let mut iter = map.get_all(&"key2");
4935         assert_eq!(iter.next(), Some(&"value2"));
4936         assert_eq!(iter.next(), Some(&"value3"));
4937         assert_eq!(iter.next(), None);
4938 
4939         let mut map = ListOrderedMultimap::new();
4940         map.extend(vec![(&1, &1), (&2, &1), (&2, &2)].into_iter());
4941 
4942         let mut iter = map.get_all(&1);
4943         assert_eq!(iter.next(), Some(&1));
4944         assert_eq!(iter.next(), None);
4945 
4946         let mut iter = map.get_all(&2);
4947         assert_eq!(iter.next(), Some(&1));
4948         assert_eq!(iter.next(), Some(&2));
4949         assert_eq!(iter.next(), None);
4950     }
4951 
4952     #[test]
test_list_ordered_multimap_from_iterator()4953     fn test_list_ordered_multimap_from_iterator() {
4954         let map: ListOrderedMultimap<_, _, RandomState> = ListOrderedMultimap::from_iter(
4955             vec![("key1", "value1"), ("key2", "value2"), ("key2", "value3")].into_iter(),
4956         );
4957 
4958         let mut iter = map.get_all(&"key1");
4959         assert_eq!(iter.next(), Some(&"value1"));
4960         assert_eq!(iter.next(), None);
4961 
4962         let mut iter = map.get_all(&"key2");
4963         assert_eq!(iter.next(), Some(&"value2"));
4964         assert_eq!(iter.next(), Some(&"value3"));
4965         assert_eq!(iter.next(), None);
4966     }
4967 
4968     #[test]
test_list_ordered_multimap_get()4969     fn test_list_ordered_multimap_get() {
4970         let mut map = ListOrderedMultimap::new();
4971         assert_eq!(map.get(&"key"), None);
4972 
4973         map.insert("key", "value");
4974         assert_eq!(map.get(&"key"), Some(&"value"));
4975     }
4976 
4977     #[test]
test_list_ordered_multimap_get_all()4978     fn test_list_ordered_multimap_get_all() {
4979         let mut map = ListOrderedMultimap::new();
4980 
4981         let mut iter = map.get_all(&"key");
4982         assert_eq!(iter.next(), None);
4983 
4984         map.insert("key", "value1");
4985         map.append("key", "value2");
4986         map.append("key", "value3");
4987 
4988         let mut iter = map.get_all(&"key");
4989         assert_eq!(iter.next(), Some(&"value1"));
4990         assert_eq!(iter.next(), Some(&"value2"));
4991         assert_eq!(iter.next(), Some(&"value3"));
4992         assert_eq!(iter.next(), None);
4993     }
4994 
4995     #[test]
test_list_ordered_multimap_get_all_mut()4996     fn test_list_ordered_multimap_get_all_mut() {
4997         let mut map = ListOrderedMultimap::new();
4998 
4999         let mut iter = map.get_all(&"key");
5000         assert_eq!(iter.next(), None);
5001 
5002         map.insert("key", "value1");
5003         map.append("key", "value2");
5004         map.append("key", "value3");
5005 
5006         let mut iter = map.get_all_mut(&"key");
5007         assert_eq!(iter.next(), Some(&mut "value1"));
5008         assert_eq!(iter.next(), Some(&mut "value2"));
5009         assert_eq!(iter.next(), Some(&mut "value3"));
5010         assert_eq!(iter.next(), None);
5011     }
5012 
5013     #[test]
test_list_ordered_multimap_get_mut()5014     fn test_list_ordered_multimap_get_mut() {
5015         let mut map = ListOrderedMultimap::new();
5016         assert_eq!(map.get_mut(&"key"), None);
5017 
5018         map.insert("key", "value");
5019         assert_eq!(map.get_mut(&"key"), Some(&mut "value"));
5020     }
5021 
5022     #[test]
test_list_ordered_multimap_insert()5023     fn test_list_ordered_multimap_insert() {
5024         let mut map = ListOrderedMultimap::new();
5025         assert!(!map.contains_key(&"key"));
5026         assert_eq!(map.get(&"key"), None);
5027 
5028         let value = map.insert("key", "value1");
5029         assert_eq!(value, None);
5030         assert!(map.contains_key(&"key"));
5031         assert_eq!(map.get(&"key"), Some(&"value1"));
5032 
5033         let value = map.insert("key", "value2");
5034         assert_eq!(value, Some("value1"));
5035         assert!(map.contains_key(&"key"));
5036         assert_eq!(map.get(&"key"), Some(&"value2"));
5037     }
5038 
5039     #[test]
test_list_ordered_multimap_insert_all()5040     fn test_list_ordered_multimap_insert_all() {
5041         let mut map = ListOrderedMultimap::new();
5042         assert!(!map.contains_key(&"key"));
5043         assert_eq!(map.get(&"key"), None);
5044 
5045         {
5046             let mut iter = map.insert_all("key", "value1");
5047             assert_eq!(iter.next(), None);
5048         }
5049 
5050         assert!(map.contains_key(&"key"));
5051         assert_eq!(map.get(&"key"), Some(&"value1"));
5052 
5053         {
5054             let mut iter = map.insert_all("key", "value2");
5055             assert_eq!(iter.next(), Some("value1"));
5056             assert_eq!(iter.next(), None);
5057         }
5058 
5059         assert!(map.contains_key(&"key"));
5060         assert_eq!(map.get(&"key"), Some(&"value2"));
5061     }
5062 
5063     #[test]
test_list_ordered_multimap_is_empty()5064     fn test_list_ordered_multimap_is_empty() {
5065         let mut map = ListOrderedMultimap::new();
5066         assert!(map.is_empty());
5067 
5068         map.insert("key", "value");
5069         assert!(!map.is_empty());
5070 
5071         map.remove(&"key");
5072         assert!(map.is_empty());
5073     }
5074 
5075     #[test]
test_list_ordered_multimap_iter()5076     fn test_list_ordered_multimap_iter() {
5077         let mut map = ListOrderedMultimap::new();
5078 
5079         let mut iter = map.iter();
5080         assert_eq!(iter.next(), None);
5081 
5082         map.insert("key1", "value1");
5083         map.insert("key2", "value2");
5084         map.append("key2", "value3");
5085         map.append("key1", "value4");
5086 
5087         let mut iter = map.iter();
5088         assert_eq!(iter.next(), Some((&"key1", &"value1")));
5089         assert_eq!(iter.next(), Some((&"key2", &"value2")));
5090         assert_eq!(iter.next(), Some((&"key2", &"value3")));
5091         assert_eq!(iter.next(), Some((&"key1", &"value4")));
5092         assert_eq!(iter.next(), None);
5093     }
5094 
5095     #[test]
test_list_ordered_multimap_iter_mut()5096     fn test_list_ordered_multimap_iter_mut() {
5097         let mut map = ListOrderedMultimap::new();
5098 
5099         let mut iter = map.iter_mut();
5100         assert_eq!(iter.next(), None);
5101 
5102         map.insert("key1", "value1");
5103         map.insert("key2", "value2");
5104         map.append("key2", "value3");
5105         map.append("key1", "value4");
5106 
5107         let mut iter = map.iter_mut();
5108         assert_eq!(iter.next(), Some((&"key1", &mut "value1")));
5109         assert_eq!(iter.next(), Some((&"key2", &mut "value2")));
5110         assert_eq!(iter.next(), Some((&"key2", &mut "value3")));
5111         assert_eq!(iter.next(), Some((&"key1", &mut "value4")));
5112         assert_eq!(iter.next(), None);
5113     }
5114 
5115     #[test]
test_list_ordered_multimap_keys()5116     fn test_list_ordered_multimap_keys() {
5117         let mut map = ListOrderedMultimap::new();
5118 
5119         let mut iter = map.keys();
5120         assert_eq!(iter.next(), None);
5121 
5122         map.insert("key1", "value1");
5123         map.insert("key2", "value2");
5124         map.insert("key1", "value3");
5125         map.insert("key3", "value4");
5126 
5127         let mut iter = map.keys();
5128         assert_eq!(iter.next(), Some(&"key1"));
5129         assert_eq!(iter.next(), Some(&"key2"));
5130         assert_eq!(iter.next(), Some(&"key3"));
5131         assert_eq!(iter.next(), None);
5132     }
5133 
5134     #[test]
test_list_ordered_multimap_keys_capacity()5135     fn test_list_ordered_multimap_keys_capacity() {
5136         let mut map = ListOrderedMultimap::new();
5137         assert_eq!(map.keys_capacity(), 0);
5138         map.insert("key", "value");
5139         assert!(map.keys_capacity() > 0);
5140     }
5141 
5142     #[test]
test_list_ordered_multimap_keys_len()5143     fn test_list_ordered_multimap_keys_len() {
5144         let mut map = ListOrderedMultimap::new();
5145         assert_eq!(map.keys_len(), 0);
5146 
5147         map.insert("key1", "value1");
5148         assert_eq!(map.keys_len(), 1);
5149 
5150         map.insert("key2", "value2");
5151         assert_eq!(map.keys_len(), 2);
5152 
5153         map.append("key1", "value3");
5154         assert_eq!(map.keys_len(), 2);
5155 
5156         map.remove(&"key1");
5157         assert_eq!(map.keys_len(), 1);
5158 
5159         map.remove(&"key2");
5160         assert_eq!(map.keys_len(), 0);
5161     }
5162 
5163     #[test]
test_list_ordered_multimap_new()5164     fn test_list_ordered_multimap_new() {
5165         let map: ListOrderedMultimap<&str, &str> = ListOrderedMultimap::new();
5166         assert_eq!(map.keys_capacity(), 0);
5167         assert_eq!(map.keys_len(), 0);
5168         assert_eq!(map.values_capacity(), 0);
5169         assert_eq!(map.values_len(), 0);
5170     }
5171 
5172     #[test]
test_list_ordered_multimap_pack_to()5173     fn test_list_ordered_multimap_pack_to() {
5174         let mut map: ListOrderedMultimap<&str, &str> = ListOrderedMultimap::with_capacity(5, 5);
5175         map.pack_to_fit();
5176         assert_eq!(map.keys_capacity(), 0);
5177         assert_eq!(map.values_capacity(), 0);
5178 
5179         let mut map = ListOrderedMultimap::with_capacity(10, 10);
5180 
5181         map.insert("key1", "value1");
5182         map.insert("key2", "value2");
5183         map.append("key2", "value3");
5184         map.append("key1", "value4");
5185 
5186         map.pack_to(5, 5);
5187 
5188         assert_eq!(map.get(&"key1"), Some(&"value1"));
5189         assert_eq!(map.get(&"key2"), Some(&"value2"));
5190 
5191         assert_eq!(map.keys_capacity(), 5);
5192         assert_eq!(map.keys_len(), 2);
5193         assert_eq!(map.values_capacity(), 5);
5194         assert_eq!(map.values_len(), 4);
5195 
5196         let mut iter = map.iter();
5197         assert_eq!(iter.next(), Some((&"key1", &"value1")));
5198         assert_eq!(iter.next(), Some((&"key2", &"value2")));
5199         assert_eq!(iter.next(), Some((&"key2", &"value3")));
5200         assert_eq!(iter.next(), Some((&"key1", &"value4")));
5201         assert_eq!(iter.next(), None);
5202     }
5203 
5204     #[should_panic]
5205     #[test]
test_list_ordered_multimap_pack_to_panic_key_capacity()5206     fn test_list_ordered_multimap_pack_to_panic_key_capacity() {
5207         let mut map = ListOrderedMultimap::new();
5208         map.insert("key1", "value1");
5209         map.insert("key2", "value2");
5210         map.append("key2", "value3");
5211         map.append("key1", "value4");
5212         map.pack_to(1, 5);
5213     }
5214 
5215     #[should_panic]
5216     #[test]
test_list_ordered_multimap_pack_to_panic_value_capacity()5217     fn test_list_ordered_multimap_pack_to_panic_value_capacity() {
5218         let mut map = ListOrderedMultimap::new();
5219         map.insert("key1", "value1");
5220         map.insert("key2", "value2");
5221         map.append("key2", "value3");
5222         map.append("key1", "value4");
5223         map.pack_to(5, 1);
5224     }
5225 
5226     #[test]
test_list_ordered_multimap_pack_to_fit()5227     fn test_list_ordered_multimap_pack_to_fit() {
5228         let mut map: ListOrderedMultimap<&str, &str> = ListOrderedMultimap::with_capacity(5, 5);
5229         map.pack_to_fit();
5230         assert_eq!(map.keys_capacity(), 0);
5231         assert_eq!(map.values_capacity(), 0);
5232 
5233         let mut map = ListOrderedMultimap::with_capacity(5, 5);
5234 
5235         map.insert("key1", "value1");
5236         map.insert("key2", "value2");
5237         map.append("key2", "value3");
5238         map.append("key1", "value4");
5239 
5240         map.pack_to_fit();
5241         assert_eq!(map.keys_capacity(), 2);
5242         assert_eq!(map.keys_len(), 2);
5243         assert_eq!(map.values_capacity(), 4);
5244         assert_eq!(map.values_len(), 4);
5245 
5246         let mut iter = map.iter();
5247         assert_eq!(iter.next(), Some((&"key1", &"value1")));
5248         assert_eq!(iter.next(), Some((&"key2", &"value2")));
5249         assert_eq!(iter.next(), Some((&"key2", &"value3")));
5250         assert_eq!(iter.next(), Some((&"key1", &"value4")));
5251         assert_eq!(iter.next(), None);
5252     }
5253 
5254     #[test]
test_list_ordered_multimap_pairs()5255     fn test_list_ordered_multimap_pairs() {
5256         let mut map = ListOrderedMultimap::new();
5257 
5258         map.insert("key1", "value1");
5259         map.insert("key2", "value2");
5260         map.append("key2", "value3");
5261         map.append("key1", "value4");
5262 
5263         let mut iter = map.pairs();
5264 
5265         let (key, mut values) = iter.next().unwrap();
5266         assert_eq!(key, &"key1");
5267         assert_eq!(values.next(), Some(&"value1"));
5268         assert_eq!(values.next(), Some(&"value4"));
5269         assert_eq!(values.next(), None);
5270 
5271         let (key, mut values) = iter.next().unwrap();
5272         assert_eq!(key, &"key2");
5273         assert_eq!(values.next(), Some(&"value2"));
5274         assert_eq!(values.next(), Some(&"value3"));
5275         assert_eq!(values.next(), None);
5276 
5277         assert!(iter.next().is_none());
5278     }
5279 
5280     #[test]
test_list_ordered_multimap_pairs_mut()5281     fn test_list_ordered_multimap_pairs_mut() {
5282         let mut map = ListOrderedMultimap::new();
5283 
5284         map.insert("key1", "value1");
5285         map.insert("key2", "value2");
5286         map.append("key2", "value3");
5287         map.append("key1", "value4");
5288 
5289         let mut iter = map.pairs_mut();
5290 
5291         let (key, mut values) = iter.next().unwrap();
5292         assert_eq!(key, &"key1");
5293         assert_eq!(values.next(), Some(&mut "value1"));
5294         assert_eq!(values.next(), Some(&mut "value4"));
5295         assert_eq!(values.next(), None);
5296 
5297         let (key, mut values) = iter.next().unwrap();
5298         assert_eq!(key, &"key2");
5299         assert_eq!(values.next(), Some(&mut "value2"));
5300         assert_eq!(values.next(), Some(&mut "value3"));
5301         assert_eq!(values.next(), None);
5302 
5303         assert!(iter.next().is_none());
5304     }
5305 
5306     #[test]
test_list_ordered_multimap_pop_back()5307     fn test_list_ordered_multimap_pop_back() {
5308         let mut map = ListOrderedMultimap::new();
5309 
5310         map.insert("key1", "value1");
5311         map.insert("key2", "value2");
5312         map.append("key2", "value3");
5313         map.append("key1", "value4");
5314 
5315         let (key, value) = map.pop_back().unwrap();
5316         assert_eq!(key, KeyWrapper::Borrowed(&"key1"));
5317         assert_eq!(&value, &"value4");
5318         assert_eq!(map.keys_len(), 2);
5319         assert_eq!(map.values_len(), 3);
5320 
5321         let (key, value) = map.pop_back().unwrap();
5322         assert_eq!(key, KeyWrapper::Borrowed(&"key2"));
5323         assert_eq!(&value, &"value3");
5324         assert_eq!(map.keys_len(), 2);
5325         assert_eq!(map.values_len(), 2);
5326 
5327         let (key, value) = map.pop_back().unwrap();
5328         assert_eq!(key, KeyWrapper::Owned("key2"));
5329         assert_eq!(&value, &"value2");
5330         assert_eq!(map.keys_len(), 1);
5331         assert_eq!(map.values_len(), 1);
5332 
5333         let (key, value) = map.pop_back().unwrap();
5334         assert_eq!(key, KeyWrapper::Owned("key1"));
5335         assert_eq!(&value, &"value1");
5336         assert_eq!(map.keys_len(), 0);
5337         assert_eq!(map.values_len(), 0);
5338 
5339         assert!(map.pop_back().is_none());
5340     }
5341 
5342     #[test]
test_list_ordered_multimap_pop_front()5343     fn test_list_ordered_multimap_pop_front() {
5344         let mut map = ListOrderedMultimap::new();
5345 
5346         map.insert("key1", "value1");
5347         map.insert("key2", "value2");
5348         map.append("key2", "value3");
5349         map.append("key1", "value4");
5350 
5351         let (key, value) = map.pop_front().unwrap();
5352         assert_eq!(key, KeyWrapper::Borrowed(&"key1"));
5353         assert_eq!(&value, &"value1");
5354         assert_eq!(map.keys_len(), 2);
5355         assert_eq!(map.values_len(), 3);
5356 
5357         let (key, value) = map.pop_front().unwrap();
5358         assert_eq!(key, KeyWrapper::Borrowed(&"key2"));
5359         assert_eq!(&value, &"value2");
5360         assert_eq!(map.keys_len(), 2);
5361         assert_eq!(map.values_len(), 2);
5362 
5363         let (key, value) = map.pop_front().unwrap();
5364         assert_eq!(key, KeyWrapper::Owned("key2"));
5365         assert_eq!(&value, &"value3");
5366         assert_eq!(map.keys_len(), 1);
5367         assert_eq!(map.values_len(), 1);
5368 
5369         let (key, value) = map.pop_front().unwrap();
5370         assert_eq!(key, KeyWrapper::Owned("key1"));
5371         assert_eq!(&value, &"value4");
5372         assert_eq!(map.keys_len(), 0);
5373         assert_eq!(map.values_len(), 0);
5374 
5375         assert!(map.pop_front().is_none());
5376     }
5377 
5378     #[test]
test_list_ordered_multimap_remove()5379     fn test_list_ordered_multimap_remove() {
5380         let mut map = ListOrderedMultimap::new();
5381         assert_eq!(map.remove(&"key"), None);
5382 
5383         map.insert("key", "value1");
5384         map.append("key", "value2");
5385         assert_eq!(map.remove(&"key"), Some("value1"));
5386         assert_eq!(map.remove(&"key"), None);
5387     }
5388 
5389     #[test]
test_list_ordered_multimap_remove_all()5390     fn test_list_ordered_multimap_remove_all() {
5391         let mut map = ListOrderedMultimap::new();
5392 
5393         {
5394             let mut iter = map.remove_all(&"key");
5395             assert_eq!(iter.next(), None);
5396         }
5397 
5398         map.insert("key", "value1");
5399         map.append("key", "value2");
5400 
5401         {
5402             let mut iter = map.remove_all(&"key");
5403             assert_eq!(iter.next(), Some("value1"));
5404             assert_eq!(iter.next(), Some("value2"));
5405             assert_eq!(iter.next(), None);
5406         }
5407 
5408         let mut iter = map.remove_all(&"key");
5409         assert_eq!(iter.next(), None);
5410     }
5411 
5412     #[test]
test_list_ordered_multimap_remove_entry()5413     fn test_list_ordered_multimap_remove_entry() {
5414         let mut map = ListOrderedMultimap::new();
5415         assert_eq!(map.remove_entry(&"key"), None);
5416 
5417         map.insert("key", "value1");
5418         map.append("key", "value2");
5419         assert_eq!(map.remove_entry(&"key"), Some(("key", "value1")));
5420         assert_eq!(map.remove_entry(&"key"), None);
5421     }
5422 
5423     #[test]
test_list_ordered_multimap_remove_entry_all()5424     fn test_list_ordered_multimap_remove_entry_all() {
5425         let mut map = ListOrderedMultimap::new();
5426 
5427         {
5428             let entry = map.remove_entry_all(&"key");
5429             assert!(entry.is_none());
5430         }
5431 
5432         map.insert("key", "value1");
5433         map.append("key", "value2");
5434 
5435         {
5436             let (key, mut iter) = map.remove_entry_all(&"key").unwrap();
5437             assert_eq!(key, "key");
5438             assert_eq!(iter.next(), Some("value1"));
5439             assert_eq!(iter.next(), Some("value2"));
5440             assert_eq!(iter.next(), None);
5441         }
5442 
5443         let entry = map.remove_entry_all(&"key");
5444         assert!(entry.is_none());
5445     }
5446 
5447     #[test]
test_list_ordered_multimap_reserve_keys()5448     fn test_list_ordered_multimap_reserve_keys() {
5449         let mut map: ListOrderedMultimap<&str, &str> = ListOrderedMultimap::new();
5450         assert_eq!(map.keys_capacity(), 0);
5451 
5452         map.reserve_keys(5);
5453         assert!(map.keys_capacity() >= 5);
5454 
5455         let mut map: ListOrderedMultimap<&str, &str> = ListOrderedMultimap::with_capacity(5, 5);
5456         assert_eq!(map.keys_capacity(), 5);
5457 
5458         map.reserve_keys(2);
5459         assert_eq!(map.keys_capacity(), 5);
5460     }
5461 
5462     #[test]
test_list_ordered_multimap_reserve_values()5463     fn test_list_ordered_multimap_reserve_values() {
5464         let mut map: ListOrderedMultimap<&str, &str> = ListOrderedMultimap::new();
5465         assert_eq!(map.values_capacity(), 0);
5466 
5467         map.reserve_values(5);
5468         assert!(map.values_capacity() >= 5);
5469 
5470         let mut map: ListOrderedMultimap<&str, &str> = ListOrderedMultimap::with_capacity(5, 5);
5471         assert_eq!(map.values_capacity(), 5);
5472 
5473         map.reserve_values(2);
5474         assert_eq!(map.values_capacity(), 5);
5475     }
5476 
5477     #[test]
test_list_ordered_multimap_retain()5478     fn test_list_ordered_multimap_retain() {
5479         let mut map = ListOrderedMultimap::new();
5480 
5481         map.insert("key1", 1);
5482         map.insert("key2", 5);
5483         map.append("key1", -1);
5484         map.insert("key3", -10);
5485         map.insert("key4", 1);
5486         map.append("key4", -1);
5487         map.append("key4", 1);
5488 
5489         map.retain(|_, &mut value| value >= 0);
5490 
5491         let mut iter = map.iter();
5492         assert_eq!(iter.next(), Some((&"key1", &1)));
5493         assert_eq!(iter.next(), Some((&"key2", &5)));
5494         assert_eq!(iter.next(), Some((&"key4", &1)));
5495         assert_eq!(iter.next(), Some((&"key4", &1)));
5496         assert_eq!(iter.next(), None);
5497     }
5498 
5499     #[test]
test_list_ordered_multimap_values()5500     fn test_list_ordered_multimap_values() {
5501         let mut map = ListOrderedMultimap::new();
5502 
5503         let mut iter = map.iter();
5504         assert_eq!(iter.next(), None);
5505 
5506         map.insert("key1", "value1");
5507         map.insert("key2", "value2");
5508         map.append("key2", "value3");
5509         map.append("key1", "value4");
5510 
5511         let mut iter = map.values();
5512         assert_eq!(iter.next(), Some(&"value1"));
5513         assert_eq!(iter.next(), Some(&"value2"));
5514         assert_eq!(iter.next(), Some(&"value3"));
5515         assert_eq!(iter.next(), Some(&"value4"));
5516         assert_eq!(iter.next(), None);
5517     }
5518 
5519     #[test]
test_list_ordered_multimap_values_mut()5520     fn test_list_ordered_multimap_values_mut() {
5521         let mut map = ListOrderedMultimap::new();
5522 
5523         let mut iter = map.iter();
5524         assert_eq!(iter.next(), None);
5525 
5526         map.insert("key1", "value1");
5527         map.insert("key2", "value2");
5528         map.append("key2", "value3");
5529         map.append("key1", "value4");
5530 
5531         let mut iter = map.values_mut();
5532         assert_eq!(iter.next(), Some(&mut "value1"));
5533         assert_eq!(iter.next(), Some(&mut "value2"));
5534         assert_eq!(iter.next(), Some(&mut "value3"));
5535         assert_eq!(iter.next(), Some(&mut "value4"));
5536         assert_eq!(iter.next(), None);
5537     }
5538 
5539     #[test]
test_list_ordered_multimap_values_capacity()5540     fn test_list_ordered_multimap_values_capacity() {
5541         let mut map = ListOrderedMultimap::new();
5542         assert_eq!(map.values_capacity(), 0);
5543         map.insert("key", "value");
5544         assert!(map.values_capacity() > 0);
5545     }
5546 
5547     #[test]
test_list_ordered_multimap_values_len()5548     fn test_list_ordered_multimap_values_len() {
5549         let mut map = ListOrderedMultimap::new();
5550         assert_eq!(map.values_len(), 0);
5551 
5552         map.insert("key1", "value1");
5553         assert_eq!(map.values_len(), 1);
5554 
5555         map.insert("key2", "value2");
5556         assert_eq!(map.values_len(), 2);
5557 
5558         map.append("key1", "value3");
5559         assert_eq!(map.values_len(), 3);
5560 
5561         map.remove(&"key1");
5562         assert_eq!(map.values_len(), 1);
5563 
5564         map.remove(&"key2");
5565         assert_eq!(map.values_len(), 0);
5566     }
5567 
5568     #[test]
test_list_ordered_multimap_with_capacity()5569     fn test_list_ordered_multimap_with_capacity() {
5570         let map: ListOrderedMultimap<&str, &str> = ListOrderedMultimap::with_capacity(1, 2);
5571         assert!(map.keys_capacity() >= 1);
5572         assert_eq!(map.keys_len(), 0);
5573         assert!(map.values_capacity() >= 2);
5574         assert_eq!(map.values_len(), 0);
5575     }
5576 
5577     #[test]
test_list_ordered_multimap_with_capacity_and_hasher()5578     fn test_list_ordered_multimap_with_capacity_and_hasher() {
5579         let state = RandomState::new();
5580         let map: ListOrderedMultimap<&str, &str> =
5581             ListOrderedMultimap::with_capacity_and_hasher(1, 2, state);
5582         assert!(map.keys_capacity() >= 1);
5583         assert_eq!(map.keys_len(), 0);
5584         assert!(map.values_capacity() >= 2);
5585         assert_eq!(map.values_len(), 0);
5586     }
5587 
5588     #[test]
test_occupied_entry_debug()5589     fn test_occupied_entry_debug() {
5590         let mut map = ListOrderedMultimap::new();
5591 
5592         map.insert("key", "value1");
5593         map.append("key", "value2");
5594         map.append("key", "value3");
5595         map.append("key", "value4");
5596 
5597         let entry = match map.entry(&"key") {
5598             Entry::Occupied(entry) => entry,
5599             _ => panic!("expected occupied entry"),
5600         };
5601 
5602         assert_eq!(
5603             format!("{:?}", entry),
5604             "OccupiedEntry { \
5605              key: \"key\", \
5606              values: EntryValues([\"value1\", \"value2\", \"value3\", \"value4\"]) \
5607              }"
5608         );
5609     }
5610 
5611     #[test]
test_vacant_entry_debug()5612     fn test_vacant_entry_debug() {
5613         let mut map: ListOrderedMultimap<&str, &str> = ListOrderedMultimap::new();
5614         let entry = match map.entry(&"key") {
5615             Entry::Vacant(entry) => entry,
5616             _ => panic!("expected vacant entry"),
5617         };
5618 
5619         assert_eq!(format!("{:?}", entry), r#"VacantEntry("key")"#);
5620     }
5621 
5622     #[test]
test_values_debug()5623     fn test_values_debug() {
5624         let mut map = ListOrderedMultimap::new();
5625 
5626         map.insert("key1", "value1");
5627         map.append("key2", "value2");
5628         map.append("key2", "value3");
5629         map.append("key1", "value4");
5630 
5631         let iter = map.values();
5632         assert_eq!(
5633             format!("{:?}", iter),
5634             r#"Values(["value1", "value2", "value3", "value4"])"#
5635         );
5636     }
5637 
5638     #[test]
test_values_double_ended()5639     fn test_values_double_ended() {
5640         let mut map = ListOrderedMultimap::new();
5641 
5642         map.insert("key1", "value1");
5643         map.append("key2", "value2");
5644         map.append("key2", "value3");
5645         map.append("key1", "value4");
5646 
5647         let mut iter = map.values();
5648         assert_eq!(iter.next(), Some(&"value1"));
5649         assert_eq!(iter.next_back(), Some(&"value4"));
5650         assert_eq!(iter.next(), Some(&"value2"));
5651         assert_eq!(iter.next_back(), Some(&"value3"));
5652         assert_eq!(iter.next(), None);
5653     }
5654 
5655     #[test]
test_values_empty()5656     fn test_values_empty() {
5657         let map: ListOrderedMultimap<&str, &str> = ListOrderedMultimap::new();
5658         let mut iter = map.values();
5659         assert_eq!(iter.next_back(), None);
5660         assert_eq!(iter.next(), None);
5661     }
5662 
5663     #[test]
test_values_fused()5664     fn test_values_fused() {
5665         let mut map = ListOrderedMultimap::new();
5666 
5667         map.insert("key", "value");
5668 
5669         let mut iter = map.values();
5670         assert_eq!(iter.next(), Some(&"value"));
5671         assert_eq!(iter.next(), None);
5672         assert_eq!(iter.next_back(), None);
5673         assert_eq!(iter.next(), None);
5674         assert_eq!(iter.next_back(), None);
5675         assert_eq!(iter.next(), None);
5676     }
5677 
5678     #[test]
test_values_mut_debug()5679     fn test_values_mut_debug() {
5680         let mut map = ListOrderedMultimap::new();
5681 
5682         map.insert("key1", "value1");
5683         map.append("key2", "value2");
5684         map.append("key2", "value3");
5685         map.append("key1", "value4");
5686 
5687         let iter = map.values_mut();
5688         assert_eq!(
5689             format!("{:?}", iter),
5690             r#"ValuesMut(["value1", "value2", "value3", "value4"])"#
5691         );
5692     }
5693 
5694     #[test]
test_values_mut_double_ended()5695     fn test_values_mut_double_ended() {
5696         let mut map = ListOrderedMultimap::new();
5697 
5698         map.insert("key1", "value1");
5699         map.append("key2", "value2");
5700         map.append("key2", "value3");
5701         map.append("key1", "value4");
5702 
5703         let mut iter = map.values_mut();
5704         assert_eq!(iter.next(), Some(&mut "value1"));
5705         assert_eq!(iter.next_back(), Some(&mut "value4"));
5706         assert_eq!(iter.next(), Some(&mut "value2"));
5707         assert_eq!(iter.next_back(), Some(&mut "value3"));
5708         assert_eq!(iter.next(), None);
5709     }
5710 
5711     #[test]
test_values_mut_empty()5712     fn test_values_mut_empty() {
5713         let mut map: ListOrderedMultimap<&str, &str> = ListOrderedMultimap::new();
5714         let mut iter = map.values_mut();
5715         assert_eq!(iter.next_back(), None);
5716         assert_eq!(iter.next(), None);
5717     }
5718 
5719     #[test]
test_values_mut_fused()5720     fn test_values_mut_fused() {
5721         let mut map = ListOrderedMultimap::new();
5722 
5723         map.insert("key", "value");
5724 
5725         let mut iter = map.values_mut();
5726         assert_eq!(iter.next(), Some(&mut "value"));
5727         assert_eq!(iter.next(), None);
5728         assert_eq!(iter.next_back(), None);
5729         assert_eq!(iter.next(), None);
5730         assert_eq!(iter.next_back(), None);
5731         assert_eq!(iter.next(), None);
5732     }
5733 
5734     #[test]
test_values_mut_size_hint()5735     fn test_values_mut_size_hint() {
5736         let mut map = ListOrderedMultimap::new();
5737 
5738         map.insert("key1", "value1");
5739         map.append("key2", "value2");
5740         map.append("key2", "value3");
5741         map.append("key1", "value4");
5742 
5743         let mut iter = map.values_mut();
5744         assert_eq!(iter.size_hint(), (4, Some(4)));
5745         iter.next();
5746         assert_eq!(iter.size_hint(), (3, Some(3)));
5747         iter.next();
5748         assert_eq!(iter.size_hint(), (2, Some(2)));
5749         iter.next();
5750         assert_eq!(iter.size_hint(), (1, Some(1)));
5751         iter.next();
5752         assert_eq!(iter.size_hint(), (0, Some(0)));
5753     }
5754 
5755     #[test]
test_values_size_hint()5756     fn test_values_size_hint() {
5757         let mut map = ListOrderedMultimap::new();
5758 
5759         map.insert("key1", "value1");
5760         map.append("key2", "value2");
5761         map.append("key2", "value3");
5762         map.append("key1", "value4");
5763 
5764         let mut iter = map.values();
5765         assert_eq!(iter.size_hint(), (4, Some(4)));
5766         iter.next();
5767         assert_eq!(iter.size_hint(), (3, Some(3)));
5768         iter.next();
5769         assert_eq!(iter.size_hint(), (2, Some(2)));
5770         iter.next();
5771         assert_eq!(iter.size_hint(), (1, Some(1)));
5772         iter.next();
5773         assert_eq!(iter.size_hint(), (0, Some(0)));
5774     }
5775 }
5776