diff options
| author | Niko Matsakis <niko@alum.mit.edu> | 2012-02-06 07:13:14 -0800 |
|---|---|---|
| committer | Niko Matsakis <niko@alum.mit.edu> | 2012-02-10 20:48:28 -0800 |
| commit | 5d57fa3403ab627e9507a9f0768e742ebc17bc11 (patch) | |
| tree | 6449ba092d2fe2eb73bc208bb6948c946387ee79 /src/libstd | |
| parent | efd393d6137b06715dbd3a3e18bfd7ae4bd9bb6b (diff) | |
| download | rust-5d57fa3403ab627e9507a9f0768e742ebc17bc11.tar.gz rust-5d57fa3403ab627e9507a9f0768e742ebc17bc11.zip | |
update ebml interface
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/ebml.rs | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/src/libstd/ebml.rs b/src/libstd/ebml.rs index e825314e2da..c4b07086acd 100644 --- a/src/libstd/ebml.rs +++ b/src/libstd/ebml.rs @@ -154,10 +154,9 @@ fn create_writer(w: io::writer) -> writer { // TODO: Provide a function to write the standard ebml header. fn start_tag(w: writer, tag_id: uint) { // Write the enum ID: - write_vint(w.writer, tag_id); - // Write a placeholder four-byte size. + // Write a placeholder four-byte size. w.size_positions += [w.writer.tell()]; let zeroes: [u8] = [0u8, 0u8, 0u8, 0u8]; w.writer.write(zeroes); @@ -170,5 +169,26 @@ fn end_tag(w: writer) { write_sized_vint(w.writer, cur_pos - last_size_pos - 4u, 4u); w.writer.seek(cur_pos as int, io::seek_set); } + +impl writer_util for writer { + fn wr_tag(tag_id: uint, blk: fn()) { + start_tag(self, tag_id); + blk(); + end_tag(self); + } + + fn wr_uint(id: uint) { + write_vint(self.writer, id); + } + + fn wr_bytes(b: [u8]) { + self.writer.write(b); + } + + fn wr_str(s: str) { + self.wr_bytes(str::bytes(s)); + } +} + // TODO: optionally perform "relaxations" on end_tag to more efficiently // encode sizes; this is a fixed point iteration |
