@@ -118,7 +118,7 @@ use std::{
118
118
/// ```
119
119
/// use linked_hash_set::LinkedHashSet;
120
120
///
121
- /// let viking_names: LinkedHashSet<&str> = ["Einar", "Olaf", "Harald"].iter().cloned ().collect();
121
+ /// let viking_names: LinkedHashSet<&str> = ["Einar", "Olaf", "Harald"].into_iter ().collect();
122
122
/// // use the values stored in the set
123
123
/// ```
124
124
///
@@ -325,8 +325,8 @@ where
325
325
///
326
326
/// ```
327
327
/// use linked_hash_set::LinkedHashSet;
328
- /// let a: LinkedHashSet<_> = [1, 2, 3].iter().cloned ().collect();
329
- /// let b: LinkedHashSet<_> = [4, 2, 3, 4].iter().cloned ().collect();
328
+ /// let a: LinkedHashSet<_> = [1, 2, 3].into_iter ().collect();
329
+ /// let b: LinkedHashSet<_> = [4, 2, 3, 4].into_iter ().collect();
330
330
///
331
331
/// // Can be seen as `a - b`.
332
332
/// for x in a.difference(&b) {
@@ -355,8 +355,8 @@ where
355
355
///
356
356
/// ```
357
357
/// use linked_hash_set::LinkedHashSet;
358
- /// let a: LinkedHashSet<_> = [1, 2, 3].iter().cloned ().collect();
359
- /// let b: LinkedHashSet<_> = [4, 2, 3, 4].iter().cloned ().collect();
358
+ /// let a: LinkedHashSet<_> = [1, 2, 3].into_iter ().collect();
359
+ /// let b: LinkedHashSet<_> = [4, 2, 3, 4].into_iter ().collect();
360
360
///
361
361
/// // Print 1, 4 in insertion order.
362
362
/// for x in a.symmetric_difference(&b) {
@@ -385,8 +385,8 @@ where
385
385
///
386
386
/// ```
387
387
/// use linked_hash_set::LinkedHashSet;
388
- /// let a: LinkedHashSet<_> = [1, 2, 3].iter().cloned ().collect();
389
- /// let b: LinkedHashSet<_> = [4, 2, 3, 4].iter().cloned ().collect();
388
+ /// let a: LinkedHashSet<_> = [1, 2, 3].into_iter ().collect();
389
+ /// let b: LinkedHashSet<_> = [4, 2, 3, 4].into_iter ().collect();
390
390
///
391
391
/// // Print 2, 3 in insertion order.
392
392
/// for x in a.intersection(&b) {
@@ -410,8 +410,8 @@ where
410
410
///
411
411
/// ```
412
412
/// use linked_hash_set::LinkedHashSet;
413
- /// let a: LinkedHashSet<_> = [1, 2, 3].iter().cloned ().collect();
414
- /// let b: LinkedHashSet<_> = [4, 2, 3, 4].iter().cloned ().collect();
413
+ /// let a: LinkedHashSet<_> = [1, 2, 3].into_iter ().collect();
414
+ /// let b: LinkedHashSet<_> = [4, 2, 3, 4].into_iter ().collect();
415
415
///
416
416
/// // Print 1, 2, 3, 4 in insertion order.
417
417
/// for x in a.union(&b) {
@@ -459,28 +459,29 @@ where
459
459
self . map . is_empty ( )
460
460
}
461
461
462
- // TODO not in linked_hash_map
463
- // /// Clears the set, returning all elements in an iterator.
464
- // ///
465
- // /// # Examples
466
- // ///
467
- // /// ```
468
- // /// use linked_hash_set::LinkedHashSet;
469
- // ///
470
- // /// let mut set: LinkedHashSet<_> = [1, 2, 3].iter().cloned().collect();
471
- // /// assert!(!set.is_empty());
472
- // ///
473
- // /// // print 1, 2, 3 in an insertion order
474
- // /// for i in set.drain() {
475
- // /// println!("{}", i);
476
- // /// }
477
- // ///
478
- // /// assert!(set.is_empty());
479
- // /// ```
480
- // #[inline]
481
- // pub fn drain(&mut self) -> Drain<T> {
482
- // Drain { iter: self.map.drain() }
483
- // }
462
+ /// Clears the set, returning all elements in an iterator.
463
+ ///
464
+ /// # Examples
465
+ ///
466
+ /// ```
467
+ /// use linked_hash_set::LinkedHashSet;
468
+ ///
469
+ /// let mut set: LinkedHashSet<_> = [1, 2, 3].into_iter().collect();
470
+ /// assert!(!set.is_empty());
471
+ ///
472
+ /// // print 1, 2, 3 in an insertion order
473
+ /// for i in set.drain() {
474
+ /// println!("{}", i);
475
+ /// }
476
+ ///
477
+ /// assert!(set.is_empty());
478
+ /// ```
479
+ #[ inline]
480
+ pub fn drain ( & mut self ) -> Drain < T > {
481
+ Drain {
482
+ iter : self . map . drain ( ) ,
483
+ }
484
+ }
484
485
485
486
/// Clears the set, removing all values.
486
487
///
@@ -509,7 +510,7 @@ where
509
510
/// ```
510
511
/// use linked_hash_set::LinkedHashSet;
511
512
///
512
- /// let set: LinkedHashSet<_> = [1, 2, 3].iter().cloned ().collect();
513
+ /// let set: LinkedHashSet<_> = [1, 2, 3].into_iter ().collect();
513
514
/// assert_eq!(set.contains(&1), true);
514
515
/// assert_eq!(set.contains(&4), false);
515
516
/// ```
@@ -535,7 +536,7 @@ where
535
536
/// ```
536
537
/// use linked_hash_set::LinkedHashSet;
537
538
///
538
- /// let mut set: LinkedHashSet<_> = [1, 2, 3].iter().cloned ().collect();
539
+ /// let mut set: LinkedHashSet<_> = [1, 2, 3].into_iter ().collect();
539
540
/// let was_refreshed = set.refresh(&2);
540
541
///
541
542
/// assert_eq!(was_refreshed, true);
@@ -571,7 +572,7 @@ where
571
572
/// ```
572
573
/// use linked_hash_set::LinkedHashSet;
573
574
///
574
- /// let a: LinkedHashSet<_> = [1, 2, 3].iter().cloned ().collect();
575
+ /// let a: LinkedHashSet<_> = [1, 2, 3].into_iter ().collect();
575
576
/// let mut b = LinkedHashSet::new();
576
577
///
577
578
/// assert_eq!(a.is_disjoint(&b), true);
@@ -592,7 +593,7 @@ where
592
593
/// ```
593
594
/// use linked_hash_set::LinkedHashSet;
594
595
///
595
- /// let sup: LinkedHashSet<_> = [1, 2, 3].iter().cloned ().collect();
596
+ /// let sup: LinkedHashSet<_> = [1, 2, 3].into_iter ().collect();
596
597
/// let mut set = LinkedHashSet::new();
597
598
///
598
599
/// assert_eq!(set.is_subset(&sup), true);
@@ -613,7 +614,7 @@ where
613
614
/// ```
614
615
/// use linked_hash_set::LinkedHashSet;
615
616
///
616
- /// let sub: LinkedHashSet<_> = [1, 2].iter().cloned ().collect();
617
+ /// let sub: LinkedHashSet<_> = [1, 2].into_iter ().collect();
617
618
/// let mut set = LinkedHashSet::new();
618
619
///
619
620
/// assert_eq!(set.is_superset(&sub), false);
@@ -1016,17 +1017,16 @@ pub struct IntoIter<K> {
1016
1017
iter : map:: IntoIter < K , ( ) > ,
1017
1018
}
1018
1019
1019
- // TODO not in linked_hash_map
1020
- // /// A draining iterator over the items of a `LinkedHashSet`.
1021
- // ///
1022
- // /// This `struct` is created by the [`drain`] method on [`LinkedHashSet`].
1023
- // /// See its documentation for more.
1024
- // ///
1025
- // /// [`LinkedHashSet`]: struct.LinkedHashSet.html
1026
- // /// [`drain`]: struct.LinkedHashSet.html#method.drain
1027
- // pub struct Drain<'a, K: 'a> {
1028
- // iter: map::Drain<'a, K, ()>,
1029
- // }
1020
+ /// A draining iterator over the items of a `LinkedHashSet`.
1021
+ ///
1022
+ /// This `struct` is created by the [`drain`] method on [`LinkedHashSet`].
1023
+ /// See its documentation for more.
1024
+ ///
1025
+ /// [`LinkedHashSet`]: struct.LinkedHashSet.html
1026
+ /// [`drain`]: struct.LinkedHashSet.html#method.drain
1027
+ pub struct Drain < ' a , K : ' a > {
1028
+ iter : map:: Drain < ' a , K , ( ) > ,
1029
+ }
1030
1030
1031
1031
/// A lazy iterator producing elements in the intersection of `LinkedHashSet`s.
1032
1032
///
@@ -1192,23 +1192,24 @@ impl<K> DoubleEndedIterator for IntoIter<K> {
1192
1192
// }
1193
1193
// }
1194
1194
1195
- // TODO not in linked_hash_map
1196
- // impl<'a, K> Iterator for Drain<'a, K> {
1197
- // type Item = K;
1198
- //
1199
- // fn next(&mut self) -> Option<K> {
1200
- // self.iter.next().map(|(k, _)| k)
1201
- // }
1202
- // fn size_hint(&self) -> (usize, Option<usize>) {
1203
- // self.iter.size_hint()
1204
- // }
1205
- // }
1206
- // impl<'a, K> ExactSizeIterator for Drain<'a, K> {
1207
- // fn len(&self) -> usize {
1208
- // self.iter.len()
1209
- // }
1210
- // }
1211
- //
1195
+ impl < K > Iterator for Drain < ' _ , K > {
1196
+ type Item = K ;
1197
+
1198
+ fn next ( & mut self ) -> Option < K > {
1199
+ self . iter . next ( ) . map ( |( k, _) | k)
1200
+ }
1201
+ fn size_hint ( & self ) -> ( usize , Option < usize > ) {
1202
+ self . iter . size_hint ( )
1203
+ }
1204
+ }
1205
+
1206
+ impl < K > ExactSizeIterator for Drain < ' _ , K > {
1207
+ fn len ( & self ) -> usize {
1208
+ self . iter . len ( )
1209
+ }
1210
+ }
1211
+
1212
+ // TODO Non-trivial port without private access to map
1212
1213
// impl<'a, K: fmt::Debug> fmt::Debug for Drain<'a, K> {
1213
1214
// fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
1214
1215
// let entries_iter = self.iter
@@ -1680,72 +1681,70 @@ mod test_set {
1680
1681
assert_eq ! ( format!( "{:?}" , empty) , "{}" ) ;
1681
1682
}
1682
1683
1683
- // #[test]
1684
- // fn test_trivial_drain() {
1685
- // let mut s = LinkedHashSet::<i32>::new();
1686
- // for _ in s.drain() {}
1687
- // assert!(s.is_empty());
1688
- // drop(s);
1689
- //
1690
- // let mut s = LinkedHashSet::<i32>::new();
1691
- // drop(s.drain());
1692
- // assert!(s.is_empty());
1693
- // }
1684
+ #[ test]
1685
+ fn test_trivial_drain ( ) {
1686
+ let mut s = LinkedHashSet :: < i32 > :: new ( ) ;
1687
+ for _ in s. drain ( ) { }
1688
+ assert ! ( s. is_empty( ) ) ;
1689
+ drop ( s) ;
1694
1690
1695
- // #[test]
1696
- // fn test_drain() {
1697
- // let mut s: LinkedHashSet<_> = (1..100).collect();
1698
- //
1699
- // // try this a bunch of times to make sure we don't screw up internal state.
1700
- // for _ in 0..20 {
1701
- // assert_eq!(s.len(), 99);
1702
- //
1703
- // {
1704
- // let mut last_i = 0;
1705
- // let mut d = s.drain();
1706
- // for (i, x) in d.by_ref().take(50).enumerate() {
1707
- // last_i = i;
1708
- // assert!(x != 0);
1709
- // }
1710
- // assert_eq!(last_i, 49);
1711
- // }
1712
- //
1713
- // for _ in &s {
1714
- // panic!("s should be empty!");
1715
- // }
1716
- //
1717
- // // reset to try again.
1718
- // s.extend(1..100);
1719
- // }
1720
- // }
1691
+ let mut s = LinkedHashSet :: < i32 > :: new ( ) ;
1692
+ drop ( s. drain ( ) ) ;
1693
+ assert ! ( s. is_empty( ) ) ;
1694
+ }
1695
+
1696
+ #[ test]
1697
+ fn test_drain ( ) {
1698
+ let mut s: LinkedHashSet < _ > = ( 1 ..100 ) . collect ( ) ;
1699
+
1700
+ // try this a bunch of times to make sure we don't screw up internal state.
1701
+ for _ in 0 ..20 {
1702
+ assert_eq ! ( s. len( ) , 99 ) ;
1703
+
1704
+ {
1705
+ let mut last_i = 0 ;
1706
+ let mut d = s. drain ( ) ;
1707
+ for ( i, x) in d. by_ref ( ) . take ( 50 ) . enumerate ( ) {
1708
+ last_i = i;
1709
+ assert ! ( x != 0 ) ;
1710
+ }
1711
+ assert_eq ! ( last_i, 49 ) ;
1712
+ }
1713
+
1714
+ assert ! ( s. is_empty( ) , "{s:?}" ) ;
1715
+
1716
+ // reset to try again.
1717
+ s. extend ( 1 ..100 ) ;
1718
+ }
1719
+ }
1721
1720
1722
1721
// #[test]
1723
1722
// fn test_replace() {
1724
1723
// use std::hash;
1725
- //
1724
+
1726
1725
// #[derive(Debug)]
1727
1726
// struct Foo(&'static str, i32);
1728
- //
1727
+
1729
1728
// impl PartialEq for Foo {
1730
1729
// fn eq(&self, other: &Self) -> bool {
1731
1730
// self.0 == other.0
1732
1731
// }
1733
1732
// }
1734
- //
1733
+
1735
1734
// impl Eq for Foo {}
1736
- //
1735
+
1737
1736
// impl hash::Hash for Foo {
1738
1737
// fn hash<H: hash::Hasher>(&self, h: &mut H) {
1739
1738
// self.0.hash(h);
1740
1739
// }
1741
1740
// }
1742
- //
1741
+
1743
1742
// let mut s = LinkedHashSet::new();
1744
1743
// assert_eq!(s.replace(Foo("a", 1)), None);
1745
1744
// assert_eq!(s.len(), 1);
1746
1745
// assert_eq!(s.replace(Foo("a", 2)), Some(Foo("a", 1)));
1747
1746
// assert_eq!(s.len(), 1);
1748
- //
1747
+
1749
1748
// let mut it = s.iter();
1750
1749
// assert_eq!(it.next(), Some(&Foo("a", 2)));
1751
1750
// assert_eq!(it.next(), None);
0 commit comments