@@ -709,7 +709,7 @@ Function: enum_chars
709
709
710
710
Returns a vector containing a range of chars
711
711
*/
712
- fn enum_chars( start : u8 , end : u8 ) : u8 :: le ( start , end ) -> [ char ] {
712
+ fn enum_chars( start : u8 , end : u8 ) : :: u8:: le ( start, end) -> [ char] {
713
713
let i = start;
714
714
let r = [ ] ;
715
715
while i <= end { r += [ i as char ] ; i += 1 u as u8 ; }
@@ -879,6 +879,99 @@ mod unsafe {
879
879
}
880
880
}
881
881
882
+ /*
883
+ Module: u8
884
+ */
885
+ mod u8 {
886
+ export cmp;
887
+ export lt, le, eq, ne, ge, gt;
888
+ export hash;
889
+
890
+ #[ nolink]
891
+ #[ abi = "cdecl" ]
892
+ native mod libc {
893
+ fn memcmp ( s1 : * u8 , s2 : * u8 , n : ctypes:: size_t ) -> ctypes:: c_int ;
894
+ }
895
+
896
+ /*
897
+ Function cmp
898
+
899
+ Bytewise string comparison
900
+ */
901
+ pure fn cmp ( & & a: [ u8 ] , & & b: [ u8 ] ) -> int unsafe {
902
+ let a_len = len ( a) ;
903
+ let b_len = len ( b) ;
904
+ let n = math:: min ( a_len, b_len) as ctypes:: size_t ;
905
+ let r = libc:: memcmp ( to_ptr ( a) , to_ptr ( b) , n) as int ;
906
+
907
+ if r != 0 { r } else {
908
+ if a_len == b_len {
909
+ 0
910
+ } else if a_len < b_len {
911
+ -1
912
+ } else {
913
+ 1
914
+ }
915
+ }
916
+ }
917
+
918
+ /*
919
+ Function: lt
920
+
921
+ Bytewise less than or equal
922
+ */
923
+ pure fn lt ( & & a: [ u8 ] , & & b: [ u8 ] ) -> bool { cmp ( a, b) < 0 }
924
+
925
+ /*
926
+ Function: le
927
+
928
+ Bytewise less than or equal
929
+ */
930
+ pure fn le ( & & a: [ u8 ] , & & b: [ u8 ] ) -> bool { cmp ( a, b) <= 0 }
931
+
932
+ /*
933
+ Function: eq
934
+
935
+ Bytewise equality
936
+ */
937
+ pure fn eq ( & & a: [ u8 ] , & & b: [ u8 ] ) -> bool unsafe { cmp ( a, b) == 0 }
938
+
939
+ /*
940
+ Function: ne
941
+
942
+ Bytewise inequality
943
+ */
944
+ pure fn ne ( & & a: [ u8 ] , & & b: [ u8 ] ) -> bool unsafe { cmp ( a, b) != 0 }
945
+
946
+ /*
947
+ Function: ge
948
+
949
+ Bytewise greater than or equal
950
+ */
951
+ pure fn ge ( & & a: [ u8 ] , & & b: [ u8 ] ) -> bool { cmp ( a, b) >= 0 }
952
+
953
+ /*
954
+ Function: gt
955
+
956
+ Bytewise greater than
957
+ */
958
+ pure fn gt ( & & a: [ u8 ] , & & b: [ u8 ] ) -> bool { cmp ( a, b) > 0 }
959
+
960
+ /*
961
+ Function: hash
962
+
963
+ String hash function
964
+ */
965
+ fn hash ( & & s: [ u8 ] ) -> uint {
966
+ // djb hash.
967
+ // FIXME: replace with murmur.
968
+
969
+ let u: uint = 5381 u;
970
+ vec:: iter ( s, { |c| u *= 33 u; u += c as uint ; } ) ;
971
+ ret u;
972
+ }
973
+ }
974
+
882
975
// Local Variables:
883
976
// mode: rust;
884
977
// fill-column: 78;
0 commit comments