@@ -96,17 +96,8 @@ pub mod reader {
96
96
97
97
use std:: cast:: transmute;
98
98
use std:: int;
99
- use std:: io;
100
99
use std:: option:: { None , Option , Some } ;
101
100
102
- #[ cfg( target_arch = "x86" ) ]
103
- #[ cfg( target_arch = "x86_64" ) ]
104
- use std:: ptr:: offset;
105
-
106
- #[ cfg( target_arch = "x86" ) ]
107
- #[ cfg( target_arch = "x86_64" ) ]
108
- use std:: unstable:: intrinsics:: bswap32;
109
-
110
101
// ebml reading
111
102
112
103
struct Res {
@@ -144,6 +135,9 @@ pub mod reader {
144
135
#[ cfg( target_arch = "x86" ) ]
145
136
#[ cfg( target_arch = "x86_64" ) ]
146
137
pub fn vuint_at ( data : & [ u8 ] , start : uint ) -> Res {
138
+ use std:: ptr:: offset;
139
+ use std:: unstable:: intrinsics:: bswap32;
140
+
147
141
if data. len ( ) - start < 4 {
148
142
return vuint_at_slow ( data, start) ;
149
143
}
@@ -178,8 +172,7 @@ pub mod reader {
178
172
}
179
173
}
180
174
181
- #[ cfg( target_arch = "arm" ) ]
182
- #[ cfg( target_arch = "mips" ) ]
175
+ #[ cfg( not( target_arch = "x86" ) , not( target_arch = "x86_64" ) ) ]
183
176
pub fn vuint_at ( data : & [ u8 ] , start : uint ) -> Res {
184
177
vuint_at_slow ( data, start)
185
178
}
@@ -265,17 +258,17 @@ pub mod reader {
265
258
266
259
pub fn doc_as_u16 ( d : Doc ) -> u16 {
267
260
assert_eq ! ( d. end, d. start + 2 u) ;
268
- io:: u64_from_be_bytes ( * d. data , d. start , 2 u) as u16
261
+ :: std :: io:: u64_from_be_bytes ( * d. data , d. start , 2 u) as u16
269
262
}
270
263
271
264
pub fn doc_as_u32 ( d : Doc ) -> u32 {
272
265
assert_eq ! ( d. end, d. start + 4 u) ;
273
- io:: u64_from_be_bytes ( * d. data , d. start , 4 u) as u32
266
+ :: std :: io:: u64_from_be_bytes ( * d. data , d. start , 4 u) as u32
274
267
}
275
268
276
269
pub fn doc_as_u64 ( d : Doc ) -> u64 {
277
270
assert_eq ! ( d. end, d. start + 8 u) ;
278
- io:: u64_from_be_bytes ( * d. data , d. start , 8 u)
271
+ :: std :: io:: u64_from_be_bytes ( * d. data , d. start , 8 u)
279
272
}
280
273
281
274
pub fn doc_as_i8 ( d : Doc ) -> i8 { doc_as_u8 ( d) as i8 }
@@ -614,11 +607,14 @@ pub mod writer {
614
607
615
608
use std:: cast;
616
609
use std:: clone:: Clone ;
617
- use std:: io;
610
+ use std:: rt:: io;
611
+ use std:: rt:: io:: { Writer , Seek } ;
612
+ use std:: rt:: io:: mem:: MemWriter ;
618
613
619
614
// ebml writing
620
615
pub struct Encoder {
621
- writer : @io:: Writer ,
616
+ // FIXME(#5665): this should take a trait object
617
+ writer : @mut MemWriter ,
622
618
priv size_positions : ~[ uint ] ,
623
619
}
624
620
@@ -631,7 +627,7 @@ pub mod writer {
631
627
}
632
628
}
633
629
634
- fn write_sized_vuint ( w : @io :: Writer , n : uint , size : uint ) {
630
+ fn write_sized_vuint ( w : @mut MemWriter , n : uint , size : uint ) {
635
631
match size {
636
632
1 u => w. write ( & [ 0x80u8 | ( n as u8 ) ] ) ,
637
633
2 u => w. write ( & [ 0x40u8 | ( ( n >> 8_ u) as u8 ) , n as u8 ] ) ,
@@ -643,15 +639,15 @@ pub mod writer {
643
639
} ;
644
640
}
645
641
646
- fn write_vuint ( w : @io :: Writer , n : uint ) {
642
+ fn write_vuint ( w : @mut MemWriter , n : uint ) {
647
643
if n < 0x7f_ u { write_sized_vuint ( w, n, 1 u) ; return ; }
648
644
if n < 0x4000_ u { write_sized_vuint ( w, n, 2 u) ; return ; }
649
645
if n < 0x200000_ u { write_sized_vuint ( w, n, 3 u) ; return ; }
650
646
if n < 0x10000000_ u { write_sized_vuint ( w, n, 4 u) ; return ; }
651
647
fail ! ( "vint to write too big: {}" , n) ;
652
648
}
653
649
654
- pub fn Encoder ( w : @io :: Writer ) -> Encoder {
650
+ pub fn Encoder ( w : @mut MemWriter ) -> Encoder {
655
651
let size_positions: ~[ uint ] = ~[ ] ;
656
652
Encoder {
657
653
writer : w,
@@ -668,18 +664,18 @@ pub mod writer {
668
664
write_vuint ( self . writer , tag_id) ;
669
665
670
666
// Write a placeholder four-byte size.
671
- self . size_positions . push ( self . writer . tell ( ) ) ;
667
+ self . size_positions . push ( self . writer . tell ( ) as uint ) ;
672
668
let zeroes: & [ u8 ] = & [ 0u8 , 0u8 , 0u8 , 0u8 ] ;
673
669
self . writer . write ( zeroes) ;
674
670
}
675
671
676
672
pub fn end_tag ( & mut self ) {
677
673
let last_size_pos = self . size_positions . pop ( ) ;
678
674
let cur_pos = self . writer . tell ( ) ;
679
- self . writer . seek ( last_size_pos as int , io:: SeekSet ) ;
680
- let size = ( cur_pos - last_size_pos - 4 u ) ;
681
- write_sized_vuint ( self . writer , size, 4 u) ;
682
- self . writer . seek ( cur_pos as int , io:: SeekSet ) ;
675
+ self . writer . seek ( last_size_pos as i64 , io:: SeekSet ) ;
676
+ let size = ( cur_pos as uint - last_size_pos - 4 ) ;
677
+ write_sized_vuint ( self . writer , size as uint , 4 u) ;
678
+ self . writer . seek ( cur_pos as i64 , io:: SeekSet ) ;
683
679
684
680
debug ! ( "End tag (size = {})" , size) ;
685
681
}
@@ -697,19 +693,19 @@ pub mod writer {
697
693
}
698
694
699
695
pub fn wr_tagged_u64 ( & mut self , tag_id : uint , v : u64 ) {
700
- do io:: u64_to_be_bytes ( v, 8 u) |v| {
696
+ do :: std :: io:: u64_to_be_bytes ( v, 8 u) |v| {
701
697
self . wr_tagged_bytes ( tag_id, v) ;
702
698
}
703
699
}
704
700
705
701
pub fn wr_tagged_u32 ( & mut self , tag_id : uint , v : u32 ) {
706
- do io:: u64_to_be_bytes ( v as u64 , 4 u) |v| {
702
+ do :: std :: io:: u64_to_be_bytes ( v as u64 , 4 u) |v| {
707
703
self . wr_tagged_bytes ( tag_id, v) ;
708
704
}
709
705
}
710
706
711
707
pub fn wr_tagged_u16 ( & mut self , tag_id : uint , v : u16 ) {
712
- do io:: u64_to_be_bytes ( v as u64 , 2 u) |v| {
708
+ do :: std :: io:: u64_to_be_bytes ( v as u64 , 2 u) |v| {
713
709
self . wr_tagged_bytes ( tag_id, v) ;
714
710
}
715
711
}
@@ -719,19 +715,19 @@ pub mod writer {
719
715
}
720
716
721
717
pub fn wr_tagged_i64 ( & mut self , tag_id : uint , v : i64 ) {
722
- do io:: u64_to_be_bytes ( v as u64 , 8 u) |v| {
718
+ do :: std :: io:: u64_to_be_bytes ( v as u64 , 8 u) |v| {
723
719
self . wr_tagged_bytes ( tag_id, v) ;
724
720
}
725
721
}
726
722
727
723
pub fn wr_tagged_i32 ( & mut self , tag_id : uint , v : i32 ) {
728
- do io:: u64_to_be_bytes ( v as u64 , 4 u) |v| {
724
+ do :: std :: io:: u64_to_be_bytes ( v as u64 , 4 u) |v| {
729
725
self . wr_tagged_bytes ( tag_id, v) ;
730
726
}
731
727
}
732
728
733
729
pub fn wr_tagged_i16 ( & mut self , tag_id : uint , v : i16 ) {
734
- do io:: u64_to_be_bytes ( v as u64 , 2 u) |v| {
730
+ do :: std :: io:: u64_to_be_bytes ( v as u64 , 2 u) |v| {
735
731
self . wr_tagged_bytes ( tag_id, v) ;
736
732
}
737
733
}
@@ -963,18 +959,18 @@ mod tests {
963
959
use serialize:: Encodable ;
964
960
use serialize;
965
961
966
- use std:: io;
962
+ use std:: rt:: io:: Decorator ;
963
+ use std:: rt:: io:: mem:: MemWriter ;
967
964
use std:: option:: { None , Option , Some } ;
968
965
969
966
#[ test]
970
967
fn test_option_int ( ) {
971
968
fn test_v ( v : Option < int > ) {
972
969
debug ! ( "v == {:?}" , v) ;
973
- let bytes = do io:: with_bytes_writer |wr| {
974
- let mut ebml_w = writer:: Encoder ( wr) ;
975
- v. encode ( & mut ebml_w)
976
- } ;
977
- let ebml_doc = reader:: Doc ( @bytes) ;
970
+ let wr = @mut MemWriter :: new ( ) ;
971
+ let mut ebml_w = writer:: Encoder ( wr) ;
972
+ v. encode ( & mut ebml_w) ;
973
+ let ebml_doc = reader:: Doc ( @wr. inner_ref ( ) . to_owned ( ) ) ;
978
974
let mut deser = reader:: Decoder ( ebml_doc) ;
979
975
let v1 = serialize:: Decodable :: decode ( & mut deser) ;
980
976
debug ! ( "v1 == {:?}" , v1) ;
0 commit comments