21
21
//!
22
22
//! ```
23
23
//! use std::cmp::Ordering;
24
- //! // Only required for Rust versions prior to 1.43.0.
25
- //! use std::usize;
26
24
//! use binary_heap_plus::BinaryHeap;
27
25
//!
28
26
//! #[derive(Copy, Clone, Eq, PartialEq)]
@@ -159,7 +157,7 @@ use std::slice;
159
157
// use std::vec::Drain;
160
158
use compare:: Compare ;
161
159
use core:: fmt;
162
- use core:: mem:: { size_of , swap, ManuallyDrop } ;
160
+ use core:: mem:: { swap, ManuallyDrop } ;
163
161
use core:: ptr;
164
162
#[ cfg( feature = "serde" ) ]
165
163
use serde:: { Deserialize , Serialize } ;
@@ -227,6 +225,15 @@ use std::vec;
227
225
/// assert!(heap.is_empty())
228
226
/// ```
229
227
///
228
+ /// A `BinaryHeap` with a known list of items can be initialized from an array:
229
+ ///
230
+ /// ```
231
+ /// use binary_heap_plus::BinaryHeap;
232
+ ///
233
+ /// // This will create a max-heap.
234
+ /// let heap = BinaryHeap::from([1, 5, 2]);
235
+ /// ```
236
+ ///
230
237
/// ## Min-heap
231
238
///
232
239
/// `BinaryHeap` can also act as a min-heap without requiring [`Reverse`] or a custom [`Ord`]
@@ -281,7 +288,7 @@ pub struct MaxComparator;
281
288
282
289
impl < T : Ord > Compare < T > for MaxComparator {
283
290
fn compare ( & self , a : & T , b : & T ) -> Ordering {
284
- a. cmp ( & b)
291
+ a. cmp ( b)
285
292
}
286
293
}
287
294
@@ -293,7 +300,7 @@ pub struct MinComparator;
293
300
294
301
impl < T : Ord > Compare < T > for MinComparator {
295
302
fn compare ( & self , a : & T , b : & T ) -> Ordering {
296
- b. cmp ( & a)
303
+ b. cmp ( a)
297
304
}
298
305
}
299
306
@@ -687,7 +694,7 @@ impl<T, C: Compare<T>> BinaryHeap<T, C> {
687
694
///
688
695
/// // replace the comparor
689
696
/// heap.replace_cmp(Comparator { ascending: false });
690
- /// assert_eq!(heap.into_iter_sorted().collect::<Vec<_>>(), vec! [5, 3, 1]);
697
+ /// assert_eq!(heap.into_iter_sorted().collect::<Vec<_>>(), [5, 3, 1]);
691
698
/// ```
692
699
#[ inline]
693
700
pub fn replace_cmp ( & mut self , cmp : C ) {
@@ -757,7 +764,7 @@ impl<T, C: Compare<T>> BinaryHeap<T, C> {
757
764
///
758
765
/// ```
759
766
/// use binary_heap_plus::BinaryHeap;
760
- /// let mut heap = BinaryHeap::from(vec! [1, 3]);
767
+ /// let mut heap = BinaryHeap::from([1, 3]);
761
768
///
762
769
/// assert_eq!(heap.pop(), Some(3));
763
770
/// assert_eq!(heap.pop(), Some(1));
@@ -830,7 +837,7 @@ impl<T, C: Compare<T>> BinaryHeap<T, C> {
830
837
/// ```
831
838
/// use binary_heap_plus::BinaryHeap;
832
839
///
833
- /// let mut heap = BinaryHeap::from(vec! [1, 2, 4, 5, 7]);
840
+ /// let mut heap = BinaryHeap::from([1, 2, 4, 5, 7]);
834
841
/// heap.push(6);
835
842
/// heap.push(3);
836
843
///
@@ -1010,11 +1017,9 @@ impl<T, C: Compare<T>> BinaryHeap<T, C> {
1010
1017
1011
1018
let tail_len = self . len ( ) - start;
1012
1019
1013
- // `usize::BITS` requires Rust 1.53.0 or greater.
1014
- #[ allow( clippy:: manual_bits) ]
1015
1020
#[ inline( always) ]
1016
1021
fn log2_fast ( x : usize ) -> usize {
1017
- 8 * size_of :: < usize > ( ) - ( x. leading_zeros ( ) as usize ) - 1
1022
+ ( usize :: BITS - x. leading_zeros ( ) - 1 ) as usize
1018
1023
}
1019
1024
1020
1025
// `rebuild` takes O(self.len()) operations
@@ -1061,8 +1066,8 @@ impl<T, C: Compare<T>> BinaryHeap<T, C> {
1061
1066
/// ```
1062
1067
/// use binary_heap_plus::BinaryHeap;
1063
1068
///
1064
- /// let mut a = BinaryHeap::from(vec! [-10, 1, 2, 3, 3]);
1065
- /// let mut b = BinaryHeap::from(vec! [-20, 5, 43]);
1069
+ /// let mut a = BinaryHeap::from([-10, 1, 2, 3, 3]);
1070
+ /// let mut b = BinaryHeap::from([-20, 5, 43]);
1066
1071
///
1067
1072
/// a.append(&mut b);
1068
1073
///
@@ -1093,15 +1098,15 @@ impl<T, C> BinaryHeap<T, C> {
1093
1098
///
1094
1099
/// ```
1095
1100
/// use binary_heap_plus::BinaryHeap;
1096
- /// let heap = BinaryHeap::from(vec! [1, 2, 3, 4]);
1101
+ /// let heap = BinaryHeap::from([1, 2, 3, 4]);
1097
1102
///
1098
1103
/// // Print 1, 2, 3, 4 in arbitrary order
1099
1104
/// for x in heap.iter() {
1100
1105
/// println!("{}", x);
1101
1106
/// }
1102
1107
/// ```
1103
1108
// #[stable(feature = "rust1", since = "1.0.0")]
1104
- pub fn iter ( & self ) -> Iter < T > {
1109
+ pub fn iter ( & self ) -> Iter < ' _ , T > {
1105
1110
Iter {
1106
1111
iter : self . data . iter ( ) ,
1107
1112
}
@@ -1116,9 +1121,9 @@ impl<T, C> BinaryHeap<T, C> {
1116
1121
///
1117
1122
/// ```
1118
1123
/// use binary_heap_plus::BinaryHeap;
1119
- /// let heap = BinaryHeap::from(vec! [1, 2, 3, 4, 5]);
1124
+ /// let heap = BinaryHeap::from([1, 2, 3, 4, 5]);
1120
1125
///
1121
- /// assert_eq!(heap.into_iter_sorted().take(2).collect::<Vec<_>>(), vec! [5, 4]);
1126
+ /// assert_eq!(heap.into_iter_sorted().take(2).collect::<Vec<_>>(), [5, 4]);
1122
1127
/// ```
1123
1128
// #[unstable(feature = "binary_heap_into_iter_sorted", issue = "59278")]
1124
1129
pub fn into_iter_sorted ( self ) -> IntoIterSorted < T , C > {
@@ -1258,12 +1263,7 @@ impl<T, C> BinaryHeap<T, C> {
1258
1263
/// heap.shrink_to(10);
1259
1264
/// assert!(heap.capacity() >= 10);
1260
1265
/// ```
1261
- ///
1262
- /// # Compatibility
1263
- ///
1264
- /// This feature requires Rust 1.56.0 or greater.
1265
1266
#[ inline]
1266
- #[ cfg( rustc_1_56) ]
1267
1267
pub fn shrink_to ( & mut self , min_capacity : usize ) {
1268
1268
self . data . shrink_to ( min_capacity)
1269
1269
}
@@ -1277,7 +1277,7 @@ impl<T, C> BinaryHeap<T, C> {
1277
1277
///
1278
1278
/// ```
1279
1279
/// use binary_heap_plus::BinaryHeap;
1280
- /// let heap = BinaryHeap::from(vec! [1, 2, 3, 4, 5, 6, 7]);
1280
+ /// let heap = BinaryHeap::from([1, 2, 3, 4, 5, 6, 7]);
1281
1281
/// let vec = heap.into_vec();
1282
1282
///
1283
1283
/// // Will print in some order
@@ -1299,7 +1299,7 @@ impl<T, C> BinaryHeap<T, C> {
1299
1299
///
1300
1300
/// ```
1301
1301
/// use binary_heap_plus::BinaryHeap;
1302
- /// let heap = BinaryHeap::from(vec! [1, 3]);
1302
+ /// let heap = BinaryHeap::from([1, 3]);
1303
1303
///
1304
1304
/// assert_eq!(heap.len(), 2);
1305
1305
/// ```
@@ -1346,7 +1346,7 @@ impl<T, C> BinaryHeap<T, C> {
1346
1346
///
1347
1347
/// ```
1348
1348
/// use binary_heap_plus::BinaryHeap;
1349
- /// let mut heap = BinaryHeap::from(vec! [1, 3]);
1349
+ /// let mut heap = BinaryHeap::from([1, 3]);
1350
1350
///
1351
1351
/// assert!(!heap.is_empty());
1352
1352
///
@@ -1372,7 +1372,7 @@ impl<T, C> BinaryHeap<T, C> {
1372
1372
///
1373
1373
/// ```
1374
1374
/// use binary_heap_plus::BinaryHeap;
1375
- /// let mut heap = BinaryHeap::from(vec! [1, 3]);
1375
+ /// let mut heap = BinaryHeap::from([1, 3]);
1376
1376
///
1377
1377
/// assert!(!heap.is_empty());
1378
1378
///
@@ -1655,10 +1655,6 @@ impl<T: Ord> From<Vec<T>> for BinaryHeap<T> {
1655
1655
}
1656
1656
}
1657
1657
1658
- /// # Compatibility
1659
- ///
1660
- /// This trait is only implemented for Rust 1.56.0 or greater.
1661
- #[ cfg( rustc_1_56) ]
1662
1658
impl < T : Ord , const N : usize > From < [ T ; N ] > for BinaryHeap < T > {
1663
1659
/// ```
1664
1660
/// use binary_heap_plus::BinaryHeap;
@@ -1706,7 +1702,7 @@ impl<T, C> IntoIterator for BinaryHeap<T, C> {
1706
1702
///
1707
1703
/// ```
1708
1704
/// use binary_heap_plus::BinaryHeap;
1709
- /// let heap = BinaryHeap::from(vec! [1, 2, 3, 4]);
1705
+ /// let heap = BinaryHeap::from([1, 2, 3, 4]);
1710
1706
///
1711
1707
/// // Print 1, 2, 3, 4 in arbitrary order
1712
1708
/// for x in heap.into_iter() {
0 commit comments