@@ -15,9 +15,9 @@ type ebml_state = {ebml_tag: ebml_tag, tag_pos: uint, data_pos: uint};
15
15
// modules within this file.
16
16
17
17
// ebml reading
18
- type doc = { data : vec [ u8 ] , start : uint , end : uint } ;
18
+ type doc = { data : @ u8 [ ] , start: uint, end: uint} ;
19
19
20
- fn vint_at ( data : vec [ u8 ] , start : uint ) -> { val : uint , next : uint } {
20
+ fn vint_at ( data : & u8 [ ] , start : uint ) -> { val : uint , next : uint } {
21
21
let a = data. ( start) ;
22
22
if a & 0x80u8 != 0u8 { ret { val : a & 0x7fu8 as uint , next : start + 1 u} ; }
23
23
if a & 0x40u8 != 0u8 {
@@ -39,22 +39,22 @@ fn vint_at(data: vec[u8], start: uint) -> {val: uint, next: uint} {
39
39
} else { log_err "vint too big" ; fail; }
40
40
}
41
41
42
- fn new_doc ( data : vec [ u8 ] ) -> doc {
43
- ret { data : data, start : 0 u, end : vec :: len[ u8] ( data) } ;
42
+ fn new_doc ( data : & @ u8 [ ] ) -> doc {
43
+ ret { data : data, start : 0 u, end : ivec :: len[ u8] ( * data) } ;
44
44
}
45
45
46
- fn doc_at ( data : vec [ u8 ] , start : uint ) -> doc {
47
- let elt_tag = vint_at ( data, start) ;
48
- let elt_size = vint_at ( data, elt_tag. next ) ;
46
+ fn doc_at ( data : & @ u8 [ ] , start : uint ) -> doc {
47
+ let elt_tag = vint_at ( * data, start) ;
48
+ let elt_size = vint_at ( * data, elt_tag. next ) ;
49
49
let end = elt_size. next + elt_size. val ;
50
50
ret { data : data, start : elt_size. next , end : end} ;
51
51
}
52
52
53
53
fn maybe_get_doc ( d : doc , tg : uint ) -> option:: t [ doc ] {
54
54
let pos = d. start ;
55
55
while pos < d. end {
56
- let elt_tag = vint_at ( d. data , pos) ;
57
- let elt_size = vint_at ( d. data , elt_tag. next ) ;
56
+ let elt_tag = vint_at ( * d. data , pos) ;
57
+ let elt_size = vint_at ( * d. data , elt_tag. next ) ;
58
58
pos = elt_size. next + elt_size. val ;
59
59
if elt_tag. val == tg {
60
60
ret some[ doc] ( { data: d. data , start: elt_size. next , end: pos} ) ;
@@ -76,8 +76,8 @@ fn get_doc(d: doc, tg: uint) -> doc {
76
76
iter docs( d: doc) -> { tag: uint, doc: doc} {
77
77
let pos = d. start ;
78
78
while pos < d. end {
79
- let elt_tag = vint_at ( d. data , pos) ;
80
- let elt_size = vint_at ( d. data , elt_tag. next ) ;
79
+ let elt_tag = vint_at ( * d. data , pos) ;
80
+ let elt_size = vint_at ( * d. data , elt_tag. next ) ;
81
81
pos = elt_size. next + elt_size. val ;
82
82
put { tag : elt_tag. val ,
83
83
doc : { data: d. data , start : elt_size. next , end : pos} } ;
@@ -87,18 +87,18 @@ iter docs(d: doc) -> {tag: uint, doc: doc} {
87
87
iter tagged_docs ( d: doc, tg: uint) -> doc {
88
88
let pos = d. start ;
89
89
while pos < d. end {
90
- let elt_tag = vint_at ( d. data , pos) ;
91
- let elt_size = vint_at ( d. data , elt_tag. next ) ;
90
+ let elt_tag = vint_at ( * d. data , pos) ;
91
+ let elt_size = vint_at ( * d. data , elt_tag. next ) ;
92
92
pos = elt_size. next + elt_size. val ;
93
93
if elt_tag. val == tg {
94
94
put { data : d. data , start : elt_size. next , end : pos} ;
95
95
}
96
96
}
97
97
}
98
98
99
- fn doc_data ( d : doc ) -> vec [ u8 ] { ret vec :: slice[ u8] ( d. data , d. start , d. end ) ; }
99
+ fn doc_data ( d : doc ) -> u8 [ ] { ret ivec :: slice[ u8] ( * d. data , d. start , d. end ) ; }
100
100
101
- fn be_uint_from_bytes ( data : vec [ u8 ] , start : uint , size : uint ) -> uint {
101
+ fn be_uint_from_bytes ( data : & @ u8 [ ] , start : uint , size : uint ) -> uint {
102
102
let sz = size;
103
103
assert ( sz <= 4 u) ;
104
104
let val = 0 u;
@@ -117,29 +117,29 @@ fn doc_as_uint(d: doc) -> uint {
117
117
118
118
119
119
// ebml writing
120
- type writer = { writer : io :: buf_writer , mutable size_positions : vec [ uint ] } ;
120
+ type writer = { writer : ioivec :: buf_writer , mutable size_positions : uint [ ] } ;
121
121
122
- fn write_sized_vint ( w : & io :: buf_writer , n : uint , size : uint ) {
123
- let buf: vec [ u8 ] ;
122
+ fn write_sized_vint ( w : & ioivec :: buf_writer , n : uint , size : uint ) {
123
+ let buf: u8 [ ] ;
124
124
alt size {
125
- 1 u { buf = [ 0x80u8 | ( n as u8 ) ] ; }
126
- 2 u { buf = [ 0x40u8 | ( n >> 8 u as u8 ) , n & 0xff u as u8 ] ; }
125
+ 1 u { buf = ~ [ 0x80u8 | ( n as u8 ) ] ; }
126
+ 2 u { buf = ~ [ 0x40u8 | ( n >> 8 u as u8 ) , n & 0xff u as u8 ] ; }
127
127
3 u {
128
128
buf =
129
- [ 0x20u8 | ( n >> 16 u as u8 ) , n >> 8 u & 0xff u as u8 ,
130
- n & 0xff u as u8 ] ;
129
+ ~ [ 0x20u8 | ( n >> 16 u as u8 ) , n >> 8 u & 0xff u as u8 ,
130
+ n & 0xff u as u8 ] ;
131
131
}
132
132
4 u {
133
133
buf =
134
- [ 0x10u8 | ( n >> 24 u as u8 ) , n >> 16 u & 0xff u as u8 ,
135
- n >> 8 u & 0xff u as u8 , n & 0xff u as u8 ] ;
134
+ ~ [ 0x10u8 | ( n >> 24 u as u8 ) , n >> 16 u & 0xff u as u8 ,
135
+ n >> 8 u & 0xff u as u8 , n & 0xff u as u8 ] ;
136
136
}
137
137
_ { log_err "vint to write too big" ; fail; }
138
138
}
139
139
w. write ( buf) ;
140
140
}
141
141
142
- fn write_vint ( w : & io :: buf_writer , n : uint ) {
142
+ fn write_vint ( w : & ioivec :: buf_writer , n : uint ) {
143
143
if n < 0x7f u { write_sized_vint ( w, n, 1 u) ; ret; }
144
144
if n < 0x4000 u { write_sized_vint ( w, n, 2 u) ; ret; }
145
145
if n < 0x200000 u { write_sized_vint ( w, n, 3 u) ; ret; }
@@ -148,8 +148,8 @@ fn write_vint(w: &io::buf_writer, n: uint) {
148
148
fail;
149
149
}
150
150
151
- fn create_writer ( w : & io :: buf_writer ) -> writer {
152
- let size_positions: vec [ uint ] = [ ] ;
151
+ fn create_writer ( w : & ioivec :: buf_writer ) -> writer {
152
+ let size_positions: uint [ ] = ~ [ ] ;
153
153
ret { writer : w, mutable size_positions : size_positions} ;
154
154
}
155
155
@@ -161,17 +161,17 @@ fn start_tag(w: &writer, tag_id: uint) {
161
161
write_vint ( w. writer , tag_id) ;
162
162
// Write a placeholder four-byte size.
163
163
164
- w. size_positions += [ w. writer . tell ( ) ] ;
165
- let zeroes: vec [ u8 ] = [ 0u8 , 0u8 , 0u8 , 0u8 ] ;
164
+ w. size_positions += ~ [ w. writer . tell ( ) ] ;
165
+ let zeroes: u8 [ ] = ~ [ 0u8 , 0u8 , 0u8 , 0u8 ] ;
166
166
w. writer . write ( zeroes) ;
167
167
}
168
168
169
169
fn end_tag ( w : & writer ) {
170
- let last_size_pos = vec :: pop[ uint] ( w. size_positions ) ;
170
+ let last_size_pos = ivec :: pop[ uint] ( w. size_positions ) ;
171
171
let cur_pos = w. writer . tell ( ) ;
172
- w. writer . seek ( last_size_pos as int , io :: seek_set) ;
172
+ w. writer . seek ( last_size_pos as int , ioivec :: seek_set) ;
173
173
write_sized_vint ( w. writer , cur_pos - last_size_pos - 4 u, 4 u) ;
174
- w. writer . seek ( cur_pos as int , io :: seek_set) ;
174
+ w. writer . seek ( cur_pos as int , ioivec :: seek_set) ;
175
175
}
176
176
// TODO: optionally perform "relaxations" on end_tag to more efficiently
177
177
// encode sizes; this is a fixed point iteration
0 commit comments