@@ -23,7 +23,6 @@ use cast;
23
23
use char;
24
24
use char:: Char ;
25
25
use clone:: Clone ;
26
- use cmp:: { TotalOrd , Ordering , Less , Equal , Greater } ;
27
26
use container:: Container ;
28
27
use iter:: Times ;
29
28
use iterator:: { Iterator , IteratorUtil , FilterIterator , AdditiveIterator , MapIterator } ;
@@ -37,8 +36,6 @@ use uint;
37
36
use vec;
38
37
use vec:: { OwnedVector , OwnedCopyableVector , ImmutableVector } ;
39
38
40
- #[ cfg( not( test) ) ] use cmp:: { Eq , Ord , Equiv , TotalEq } ;
41
-
42
39
/*
43
40
Section: Conditions
44
41
*/
@@ -530,165 +527,6 @@ pub fn eq(a: &~str, b: &~str) -> bool {
530
527
eq_slice ( * a, * b)
531
528
}
532
529
533
- #[ cfg( not( test) ) ]
534
- impl < ' self > TotalOrd for & ' self str {
535
- #[ inline]
536
- fn cmp ( & self , other : & & ' self str ) -> Ordering {
537
- for self . bytes_iter( ) . zip( other. bytes_iter( ) ) . advance |( s_b, o_b) | {
538
- match s_b. cmp( & o_b) {
539
- Greater => return Greater ,
540
- Less => return Less ,
541
- Equal => ( )
542
- }
543
- }
544
-
545
- self . len ( ) . cmp ( & other. len ( ) )
546
- }
547
- }
548
-
549
- #[ cfg ( not ( test) ) ]
550
- impl TotalOrd for ~str {
551
- #[ inline]
552
- fn cmp( & self , other: & ~str) -> Ordering { self. as_slice ( ) . cmp ( & other. as_slice ( ) ) }
553
- }
554
-
555
- #[ cfg( not( test) ) ]
556
- impl TotalOrd for @str {
557
- #[ inline]
558
- fn cmp ( & self , other : & @str ) -> Ordering { self . as_slice ( ) . cmp ( & other. as_slice ( ) ) }
559
- }
560
-
561
- /// Bytewise slice less than
562
- #[ inline]
563
- fn lt ( a : & str , b : & str ) -> bool {
564
- a. cmp ( & b) == Less
565
- }
566
-
567
- /// Bytewise less than or equal
568
- #[ inline]
569
- pub fn le ( a : & str , b : & str ) -> bool {
570
- !lt ( b, a)
571
- }
572
-
573
- /// Bytewise greater than or equal
574
- #[ inline]
575
- fn ge ( a : & str , b : & str ) -> bool {
576
- !lt ( a, b)
577
- }
578
-
579
- /// Bytewise greater than
580
- #[ inline]
581
- fn gt ( a : & str , b : & str ) -> bool {
582
- !le ( a, b)
583
- }
584
-
585
- #[ cfg( not( test) ) ]
586
- impl < ' self > Eq for & ' self str {
587
- #[ inline( always) ]
588
- fn eq ( & self , other : & & ' self str ) -> bool {
589
- eq_slice ( ( * self ) , ( * other) )
590
- }
591
- #[ inline( always) ]
592
- fn ne ( & self , other : & & ' self str ) -> bool { !( * self ) . eq ( other) }
593
- }
594
-
595
- #[ cfg( not( test) ) ]
596
- impl Eq for ~str {
597
- #[ inline( always) ]
598
- fn eq ( & self , other : & ~str ) -> bool {
599
- eq_slice ( ( * self ) , ( * other) )
600
- }
601
- #[ inline( always) ]
602
- fn ne ( & self , other : & ~str ) -> bool { !( * self ) . eq ( other) }
603
- }
604
-
605
- #[ cfg( not( test) ) ]
606
- impl Eq for @str {
607
- #[ inline( always) ]
608
- fn eq ( & self , other : & @str ) -> bool {
609
- eq_slice ( ( * self ) , ( * other) )
610
- }
611
- #[ inline( always) ]
612
- fn ne ( & self , other : & @str ) -> bool { !( * self ) . eq ( other) }
613
- }
614
-
615
- #[ cfg( not( test) ) ]
616
- impl < ' self > TotalEq for & ' self str {
617
- #[ inline( always) ]
618
- fn equals ( & self , other : & & ' self str ) -> bool {
619
- eq_slice ( ( * self ) , ( * other) )
620
- }
621
- }
622
-
623
- #[ cfg( not( test) ) ]
624
- impl TotalEq for ~str {
625
- #[ inline( always) ]
626
- fn equals ( & self , other : & ~str ) -> bool {
627
- eq_slice ( ( * self ) , ( * other) )
628
- }
629
- }
630
-
631
- #[ cfg( not( test) ) ]
632
- impl TotalEq for @str {
633
- #[ inline( always) ]
634
- fn equals ( & self , other : & @str ) -> bool {
635
- eq_slice ( ( * self ) , ( * other) )
636
- }
637
- }
638
-
639
- #[ cfg( not( test) ) ]
640
- impl Ord for ~str {
641
- #[ inline( always) ]
642
- fn lt ( & self , other : & ~str ) -> bool { lt ( ( * self ) , ( * other) ) }
643
- #[ inline( always) ]
644
- fn le ( & self , other : & ~str ) -> bool { le ( ( * self ) , ( * other) ) }
645
- #[ inline( always) ]
646
- fn ge ( & self , other : & ~str ) -> bool { ge ( ( * self ) , ( * other) ) }
647
- #[ inline( always) ]
648
- fn gt ( & self , other : & ~str ) -> bool { gt ( ( * self ) , ( * other) ) }
649
- }
650
-
651
- #[ cfg( not( test) ) ]
652
- impl < ' self > Ord for & ' self str {
653
- #[ inline( always) ]
654
- fn lt ( & self , other : & & ' self str ) -> bool { lt ( ( * self ) , ( * other) ) }
655
- #[ inline( always) ]
656
- fn le ( & self , other : & & ' self str ) -> bool { le ( ( * self ) , ( * other) ) }
657
- #[ inline( always) ]
658
- fn ge ( & self , other : & & ' self str ) -> bool { ge ( ( * self ) , ( * other) ) }
659
- #[ inline( always) ]
660
- fn gt ( & self , other : & & ' self str ) -> bool { gt ( ( * self ) , ( * other) ) }
661
- }
662
-
663
- #[ cfg( not( test) ) ]
664
- impl Ord for @str {
665
- #[ inline( always) ]
666
- fn lt ( & self , other : & @str ) -> bool { lt ( ( * self ) , ( * other) ) }
667
- #[ inline( always) ]
668
- fn le ( & self , other : & @str ) -> bool { le ( ( * self ) , ( * other) ) }
669
- #[ inline( always) ]
670
- fn ge ( & self , other : & @str ) -> bool { ge ( ( * self ) , ( * other) ) }
671
- #[ inline( always) ]
672
- fn gt ( & self , other : & @str ) -> bool { gt ( ( * self ) , ( * other) ) }
673
- }
674
-
675
- #[ cfg( not( test) ) ]
676
- impl < ' self , S : Str > Equiv < S > for & ' self str {
677
- #[ inline( always) ]
678
- fn equiv ( & self , other : & S ) -> bool { eq_slice ( * self , other. as_slice ( ) ) }
679
- }
680
- #[ cfg( not( test) ) ]
681
- impl < ' self , S : Str > Equiv < S > for @str {
682
- #[ inline( always) ]
683
- fn equiv ( & self , other : & S ) -> bool { eq_slice ( * self , other. as_slice ( ) ) }
684
- }
685
-
686
- #[ cfg( not( test) ) ]
687
- impl < ' self , S : Str > Equiv < S > for ~str {
688
- #[ inline( always) ]
689
- fn equiv ( & self , other : & S ) -> bool { eq_slice ( * self , other. as_slice ( ) ) }
690
- }
691
-
692
530
/*
693
531
Section: Searching
694
532
*/
@@ -1072,12 +910,136 @@ pub mod raw {
1072
910
#[cfg(not(test))]
1073
911
pub mod traits {
1074
912
use ops::Add;
913
+ use cmp::{TotalOrd, Ordering, Less, Equal, Greater, Eq, Ord, Equiv, TotalEq};
914
+ use super::{Str, eq_slice};
915
+
1075
916
impl<'self> Add<&'self str,~str> for ~str {
1076
917
#[inline(always)]
1077
918
fn add(&self, rhs: & &'self str) -> ~str {
1078
919
self.append((*rhs))
1079
920
}
1080
921
}
922
+
923
+ impl<'self> TotalOrd for &'self str {
924
+ #[inline]
925
+ fn cmp(&self, other: & &'self str) -> Ordering {
926
+ for self.bytes_iter().zip(other.bytes_iter()).advance |(s_b, o_b)| {
927
+ match s_b.cmp(&o_b) {
928
+ Greater => return Greater,
929
+ Less => return Less,
930
+ Equal => ()
931
+ }
932
+ }
933
+
934
+ self.len().cmp(&other.len())
935
+ }
936
+ }
937
+
938
+ impl TotalOrd for ~str {
939
+ #[inline]
940
+ fn cmp(&self, other: &~str) -> Ordering { self.as_slice().cmp(&other.as_slice()) }
941
+ }
942
+
943
+ impl TotalOrd for @str {
944
+ #[inline]
945
+ fn cmp(&self, other: &@str) -> Ordering { self.as_slice().cmp(&other.as_slice()) }
946
+ }
947
+
948
+ impl<'self> Eq for &'self str {
949
+ #[inline(always)]
950
+ fn eq(&self, other: & &'self str) -> bool {
951
+ eq_slice((*self), (*other))
952
+ }
953
+ #[inline(always)]
954
+ fn ne(&self, other: & &'self str) -> bool { !(*self).eq(other) }
955
+ }
956
+
957
+ impl Eq for ~str {
958
+ #[inline(always)]
959
+ fn eq(&self, other: &~str) -> bool {
960
+ eq_slice((*self), (*other))
961
+ }
962
+ #[inline(always)]
963
+ fn ne(&self, other: &~str) -> bool { !(*self).eq(other) }
964
+ }
965
+
966
+ impl Eq for @str {
967
+ #[inline(always)]
968
+ fn eq(&self, other: &@str) -> bool {
969
+ eq_slice((*self), (*other))
970
+ }
971
+ #[inline(always)]
972
+ fn ne(&self, other: &@str) -> bool { !(*self).eq(other) }
973
+ }
974
+
975
+ impl<'self> TotalEq for &'self str {
976
+ #[inline(always)]
977
+ fn equals(&self, other: & &'self str) -> bool {
978
+ eq_slice((*self), (*other))
979
+ }
980
+ }
981
+
982
+ impl TotalEq for ~str {
983
+ #[inline(always)]
984
+ fn equals(&self, other: &~str) -> bool {
985
+ eq_slice((*self), (*other))
986
+ }
987
+ }
988
+
989
+ impl TotalEq for @str {
990
+ #[inline(always)]
991
+ fn equals(&self, other: &@str) -> bool {
992
+ eq_slice((*self), (*other))
993
+ }
994
+ }
995
+
996
+ impl<'self> Ord for &'self str {
997
+ #[inline(always)]
998
+ fn lt(&self, other: & &'self str) -> bool { self.cmp(other) == Less }
999
+ #[inline(always)]
1000
+ fn le(&self, other: & &'self str) -> bool { self.cmp(other) != Greater }
1001
+ #[inline(always)]
1002
+ fn ge(&self, other: & &'self str) -> bool { self.cmp(other) != Less }
1003
+ #[inline(always)]
1004
+ fn gt(&self, other: & &'self str) -> bool { self.cmp(other) == Greater }
1005
+ }
1006
+
1007
+ impl Ord for ~str {
1008
+ #[inline(always)]
1009
+ fn lt(&self, other: &~str) -> bool { self.cmp(other) == Less }
1010
+ #[inline(always)]
1011
+ fn le(&self, other: &~str) -> bool { self.cmp(other) != Greater }
1012
+ #[inline(always)]
1013
+ fn ge(&self, other: &~str) -> bool { self.cmp(other) != Less }
1014
+ #[inline(always)]
1015
+ fn gt(&self, other: &~str) -> bool { self.cmp(other) == Greater }
1016
+ }
1017
+
1018
+ impl Ord for @str {
1019
+ #[inline(always)]
1020
+ fn lt(&self, other: &@str) -> bool { self.cmp(other) == Less }
1021
+ #[inline(always)]
1022
+ fn le(&self, other: &@str) -> bool { self.cmp(other) != Greater }
1023
+ #[inline(always)]
1024
+ fn ge(&self, other: &@str) -> bool { self.cmp(other) != Less }
1025
+ #[inline(always)]
1026
+ fn gt(&self, other: &@str) -> bool { self.cmp(other) == Greater }
1027
+ }
1028
+
1029
+ impl<'self, S: Str> Equiv<S> for &'self str {
1030
+ #[inline(always)]
1031
+ fn equiv(&self, other: &S) -> bool { eq_slice(*self, other.as_slice()) }
1032
+ }
1033
+
1034
+ impl<'self, S: Str> Equiv<S> for @str {
1035
+ #[inline(always)]
1036
+ fn equiv(&self, other: &S) -> bool { eq_slice(*self, other.as_slice()) }
1037
+ }
1038
+
1039
+ impl<'self, S: Str> Equiv<S> for ~str {
1040
+ #[inline(always)]
1041
+ fn equiv(&self, other: &S) -> bool { eq_slice(*self, other.as_slice()) }
1042
+ }
1081
1043
}
1082
1044
1083
1045
#[cfg(test)]
@@ -2267,10 +2229,10 @@ mod tests {
2267
2229
2268
2230
#[test]
2269
2231
fn test_le() {
2270
- assert!((le(&" ", &" ")) );
2271
- assert!((le(&" ", & " foo")) );
2272
- assert!((le(& " foo", & " foo")) );
2273
- assert!((!eq(&~ " foo", & ~" bar")) );
2232
+ assert!(" " <= " " );
2233
+ assert!(" " <= " foo");
2234
+ assert!(" foo" <= " foo");
2235
+ assert!(" foo" != ~" bar");
2274
2236
}
2275
2237
2276
2238
#[test]
0 commit comments