1616// FIXME: Iteration should probably be considered separately
1717
1818use collections:: { Collection , MutableSeq } ;
19+ use io:: { IoError , IoResult , Reader } ;
20+ use io;
1921use iter:: Iterator ;
22+ use num:: Int ;
2023use option:: { Option , Some , None } ;
24+ use ptr:: RawPtr ;
2125use result:: { Ok , Err } ;
22- use io;
23- use io:: { IoError , IoResult , Reader } ;
2426use slice:: { ImmutableSlice , Slice } ;
25- use ptr:: RawPtr ;
2627
2728/// An iterator that reads a single byte on each iteration,
2829/// until `.read_byte()` returns `EndOfFile`.
@@ -76,16 +77,15 @@ impl<'r, R: Reader> Iterator<IoResult<u8>> for Bytes<'r, R> {
7677///
7778/// This function returns the value returned by the callback, for convenience.
7879pub fn u64_to_le_bytes < T > ( n : u64 , size : uint , f: |v: & [ u8 ] | -> T ) -> T {
79- use mem:: { to_le16, to_le32, to_le64} ;
8080 use mem:: transmute;
8181
8282 // LLVM fails to properly optimize this when using shifts instead of the to_le* intrinsics
8383 assert ! ( size <= 8 u) ;
8484 match size {
8585 1 u => f ( & [ n as u8 ] ) ,
86- 2 u => f ( unsafe { transmute :: < _ , [ u8 , ..2 ] > ( to_le16 ( n as u16 ) ) } ) ,
87- 4 u => f ( unsafe { transmute :: < _ , [ u8 , ..4 ] > ( to_le32 ( n as u32 ) ) } ) ,
88- 8 u => f ( unsafe { transmute :: < _ , [ u8 , ..8 ] > ( to_le64 ( n ) ) } ) ,
86+ 2 u => f ( unsafe { transmute :: < _ , [ u8 , ..2 ] > ( ( n as u16 ) . to_le ( ) ) } ) ,
87+ 4 u => f ( unsafe { transmute :: < _ , [ u8 , ..4 ] > ( ( n as u32 ) . to_le ( ) ) } ) ,
88+ 8 u => f ( unsafe { transmute :: < _ , [ u8 , ..8 ] > ( n . to_le ( ) ) } ) ,
8989 _ => {
9090
9191 let mut bytes = vec ! ( ) ;
@@ -116,16 +116,15 @@ pub fn u64_to_le_bytes<T>(n: u64, size: uint, f: |v: &[u8]| -> T) -> T {
116116///
117117/// This function returns the value returned by the callback, for convenience.
118118pub fn u64_to_be_bytes < T > ( n : u64 , size : uint , f: |v: & [ u8 ] | -> T ) -> T {
119- use mem:: { to_be16, to_be32, to_be64} ;
120119 use mem:: transmute;
121120
122121 // LLVM fails to properly optimize this when using shifts instead of the to_be* intrinsics
123122 assert ! ( size <= 8 u) ;
124123 match size {
125124 1 u => f ( & [ n as u8 ] ) ,
126- 2 u => f ( unsafe { transmute :: < _ , [ u8 , ..2 ] > ( to_be16 ( n as u16 ) ) } ) ,
127- 4 u => f ( unsafe { transmute :: < _ , [ u8 , ..4 ] > ( to_be32 ( n as u32 ) ) } ) ,
128- 8 u => f ( unsafe { transmute :: < _ , [ u8 , ..8 ] > ( to_be64 ( n ) ) } ) ,
125+ 2 u => f ( unsafe { transmute :: < _ , [ u8 , ..2 ] > ( ( n as u16 ) . to_be ( ) ) } ) ,
126+ 4 u => f ( unsafe { transmute :: < _ , [ u8 , ..4 ] > ( ( n as u32 ) . to_be ( ) ) } ) ,
127+ 8 u => f ( unsafe { transmute :: < _ , [ u8 , ..8 ] > ( n . to_be ( ) ) } ) ,
129128 _ => {
130129 let mut bytes = vec ! ( ) ;
131130 let mut i = size;
@@ -152,7 +151,6 @@ pub fn u64_to_be_bytes<T>(n: u64, size: uint, f: |v: &[u8]| -> T) -> T {
152151/// 32-bit value is parsed.
153152pub fn u64_from_be_bytes ( data : & [ u8 ] , start : uint , size : uint ) -> u64 {
154153 use ptr:: { copy_nonoverlapping_memory} ;
155- use mem:: from_be64;
156154 use slice:: MutableSlice ;
157155
158156 assert ! ( size <= 8 u) ;
@@ -166,7 +164,7 @@ pub fn u64_from_be_bytes(data: &[u8], start: uint, size: uint) -> u64 {
166164 let ptr = data. as_ptr ( ) . offset ( start as int ) ;
167165 let out = buf. as_mut_ptr ( ) ;
168166 copy_nonoverlapping_memory ( out. offset ( ( 8 - size) as int ) , ptr, size) ;
169- from_be64 ( * ( out as * const u64 ) )
167+ ( * ( out as * const u64 ) ) . to_be ( )
170168 }
171169}
172170
0 commit comments