File tree Expand file tree Collapse file tree 2 files changed +20
-12
lines changed
branches/snap-stage3/src/libstd/io Expand file tree Collapse file tree 2 files changed +20
-12
lines changed Original file line number Diff line number Diff line change 1
1
---
2
2
refs/heads/master: 0da105a8b7b6b1e0568e8ff20f6ff4b13cc7ecc2
3
3
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
4
- refs/heads/snap-stage3: 326e63187ff4490c30ed603158e00c0be58dd162
4
+ refs/heads/snap-stage3: 0b3311c260812cef6c35b7e99e93516cfc7a3561
5
5
refs/heads/try: c274a6888410ce3e357e014568b43310ed787d36
6
6
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
7
7
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
Original file line number Diff line number Diff line change 13
13
// XXX: Not sure how this should be structured
14
14
// XXX: Iteration should probably be considered separately
15
15
16
+ use container:: Container ;
16
17
use iter:: Iterator ;
17
18
use option:: Option ;
18
19
use io:: Reader ;
19
- use vec:: OwnedVector ;
20
+ use vec:: { OwnedVector , ImmutableVector } ;
20
21
21
22
/// An iterator that reads a single byte on each iteration,
22
23
/// until `.read_byte()` returns `None`.
@@ -117,16 +118,23 @@ pub fn u64_from_be_bytes(data: &[u8],
117
118
start : uint ,
118
119
size : uint )
119
120
-> u64 {
120
- let mut sz = size;
121
- assert ! ( ( sz <= 8 u) ) ;
122
- let mut val = 0_u64 ;
123
- let mut pos = start;
124
- while sz > 0 u {
125
- sz -= 1 u;
126
- val += ( data[ pos] as u64 ) << ( ( sz * 8 u) as u64 ) ;
127
- pos += 1 u;
128
- }
129
- return val;
121
+ use ptr:: { copy_nonoverlapping_memory, offset, mut_offset} ;
122
+ use unstable:: intrinsics:: from_be64;
123
+ use vec:: MutableVector ;
124
+
125
+ assert ! ( size <= 8 u) ;
126
+
127
+ if data. len ( ) - start < size {
128
+ fail ! ( "index out of bounds" ) ;
129
+ }
130
+
131
+ let mut buf = [ 0u8 , ..8 ] ;
132
+ unsafe {
133
+ let ptr = offset ( data. as_ptr ( ) , start as int ) ;
134
+ let out = buf. as_mut_ptr ( ) ;
135
+ copy_nonoverlapping_memory ( mut_offset ( out, ( 8 - size) as int ) , ptr, size) ;
136
+ from_be64 ( * ( out as * i64 ) ) as u64
137
+ }
130
138
}
131
139
132
140
#[ cfg( test) ]
You can’t perform that action at this time.
0 commit comments