@@ -2181,7 +2181,7 @@ pub trait MutableVector<'a, T> {
2181
2181
/// v.sort(|a, b| *b <= *a);
2182
2182
/// assert_eq!(v, [5, 4, 3, 2, 1]);
2183
2183
/// ```
2184
- fn sort ( self , less_eq : |& T , & T | -> bool) ;
2184
+ fn sort_by ( self , less_eq : |& T , & T | -> bool) ;
2185
2185
2186
2186
/**
2187
2187
* Consumes `src` and moves as many elements as it can into `self`
@@ -2328,7 +2328,11 @@ impl<'a,T> MutableVector<'a, T> for &'a mut [T] {
2328
2328
}
2329
2329
2330
2330
#[ inline]
2331
+ <<<<<<< HEAD
2331
2332
fn sort( self , less_eq : |& T , & T | -> bool) {
2333
+ =======
2334
+ fn sort_by < Sort : SortComparator < T > > ( self , less_eq : Sort ) {
2335
+ >>>>>>> 9 ceda35... std:: vec : add a sugary . sort( ) method for plain Ord sorting.
2332
2336
merge_sort ( self , less_eq )
2333
2337
}
2334
2338
@@ -2385,6 +2389,32 @@ impl<'a, T:Clone> MutableCloneableVector<T> for &'a mut [T] {
2385
2389
}
2386
2390
}
2387
2391
2392
+ /// Methods for mutable vectors with orderable elements, such as
2393
+ /// in -place sorting.
2394
+ pub trait MutableOrdVector < T > {
2395
+ /// Sort the vector, in place.
2396
+ ///
2397
+ /// This is equivalent to `self.sort_by(std::vec::SortForward)`.
2398
+ ///
2399
+ /// # Example
2400
+ ///
2401
+ /// ```rust
2402
+ /// use std::vec;
2403
+ ///
2404
+ /// let mut v = [-5, 4, 1, -3, 2];
2405
+ ///
2406
+ /// v.sort();
2407
+ /// assert_eq!(v, [-5, -3, 1, 2, 4]);
2408
+ /// ```
2409
+ fn sort ( self ) ;
2410
+ }
2411
+ impl <' a , T : Ord > MutableOrdVector < T > for & ' a mut [ T ] {
2412
+ #[ inline]
2413
+ fn sort ( self ) {
2414
+ self . sort_by( SortForward )
2415
+ }
2416
+ }
2417
+
2388
2418
/**
2389
2419
* Constructs a vector from an unsafe pointer to a buffer
2390
2420
*
@@ -3474,16 +3504,39 @@ mod tests {
3474
3504
let mut v = task_rng().gen_vec::<uint>(len);
3475
3505
v.sort(|a,b| a <= b);
3476
3506
3507
+ <<<<<<< HEAD
3477
3508
assert!(v.windows(2).all(|w| w[0] <= w[1]));
3509
+ =======
3510
+ let mut v1 = v.clone();
3511
+ let mut v2 = v.clone();
3512
+ v.sort();
3513
+ assert!(v.windows(2).all(|w| w[0] <= w[1]));
3514
+
3515
+ v1.sort_by(vec::SortForward);
3516
+ assert!(v1.windows(2).all(|w| w[0] <= w[1]));
3517
+
3518
+ v1.sort_by(vec::SortReverse);
3519
+ assert!(v1.windows(2).all(|w| w[0] >= w[1]));
3520
+
3521
+ v2.sort_by(|a: &uint, b: &uint| a <= b);
3522
+ assert!(v2.windows(2).all(|w| w[0] <= w[1]));
3523
+ >>>>>>> 9ceda35... std::vec: add a sugary .sort() method for plain Ord sorting.
3478
3524
}
3479
3525
}
3480
3526
3481
3527
// shouldn't fail/crash
3482
3528
let mut v: [uint, .. 0] = [];
3529
+ <<<<<<< HEAD
3483
3530
v.sort(|a,b| a <= b);
3484
3531
3485
3532
let mut v = [0xDEADBEEF];
3486
3533
v.sort(|a,b| a <= b);
3534
+ =======
3535
+ v.sort_by(SortForward);
3536
+
3537
+ let mut v = [0xDEADBEEF];
3538
+ v.sort_by(SortForward);
3539
+ >>>>>>> 9ceda35... std::vec: add a sugary .sort() method for plain Ord sorting.
3487
3540
assert_eq!(v, [0xDEADBEEF]);
3488
3541
}
3489
3542
@@ -3506,7 +3559,11 @@ mod tests {
3506
3559
3507
3560
// only sort on the first element, so an unstable sort
3508
3561
// may mix up the counts.
3562
+ <<<<<<< HEAD
3509
3563
v.sort(|&(a,_), &(b,_)| a <= b);
3564
+ =======
3565
+ v.sort_by(|&(a,_): &(uint, uint), &(b,_): &(uint, uint)| a <= b);
3566
+ >>>>>>> 9ceda35... std::vec: add a sugary .sort() method for plain Ord sorting.
3510
3567
3511
3568
// this comparison includes the count (the second item
3512
3569
// of the tuple), so elements with equal first items
@@ -4341,7 +4398,7 @@ mod bench {
4341
4398
use extra:: test:: BenchHarness ;
4342
4399
use iter:: range;
4343
4400
use vec;
4344
- use vec:: VectorVector ;
4401
+ use vec:: { VectorVector , MutableOrdVector } ;
4345
4402
use option:: * ;
4346
4403
use ptr;
4347
4404
use rand:: { weak_rng, task_rng, Rng } ;
@@ -4551,7 +4608,7 @@ mod bench {
4551
4608
let mut rng = weak_rng( ) ;
4552
4609
bh. iter( || {
4553
4610
let mut v: ~[ f64 ] = rng. gen_vec( 5 ) ;
4554
- v. sort ( |a , b| * a <= * b ) ;
4611
+ v. sort( ) ;
4555
4612
} ) ;
4556
4613
bh. bytes = 5 * mem:: size_of:: <f64 >( ) as u64 ;
4557
4614
}
@@ -4561,7 +4618,7 @@ mod bench {
4561
4618
let mut rng = weak_rng( ) ;
4562
4619
bh. iter( || {
4563
4620
let mut v: ~[ f64 ] = rng. gen_vec( 100 ) ;
4564
- v. sort ( |a , b| * a <= * b ) ;
4621
+ v. sort( ) ;
4565
4622
} ) ;
4566
4623
bh. bytes = 100 * mem:: size_of:: <f64 >( ) as u64 ;
4567
4624
}
@@ -4571,7 +4628,7 @@ mod bench {
4571
4628
let mut rng = weak_rng( ) ;
4572
4629
bh. iter( || {
4573
4630
let mut v: ~[ f64 ] = rng. gen_vec( 10000 ) ;
4574
- v. sort ( |a , b| * a <= * b ) ;
4631
+ v. sort( ) ;
4575
4632
} ) ;
4576
4633
bh. bytes = 10000 * mem:: size_of:: <f64 >( ) as u64 ;
4577
4634
}
@@ -4580,7 +4637,7 @@ mod bench {
4580
4637
fn sort_sorted( bh: & mut BenchHarness ) {
4581
4638
let mut v = vec:: from_fn( 10000 , |i| i) ;
4582
4639
bh. iter( || {
4583
- v. sort ( |a , b| * a <= * b ) ;
4640
+ v. sort( ) ;
4584
4641
} ) ;
4585
4642
bh. bytes = ( v. len( ) * mem:: size_of_val( & v[ 0 ] ) ) as u64 ;
4586
4643
}
0 commit comments