about summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
authorNiko Matsakis <niko@alum.mit.edu>2012-02-06 07:13:14 -0800
committerNiko Matsakis <niko@alum.mit.edu>2012-02-10 20:48:28 -0800
commit5d57fa3403ab627e9507a9f0768e742ebc17bc11 (patch)
tree6449ba092d2fe2eb73bc208bb6948c946387ee79 /src/libstd
parentefd393d6137b06715dbd3a3e18bfd7ae4bd9bb6b (diff)
downloadrust-5d57fa3403ab627e9507a9f0768e742ebc17bc11.tar.gz
rust-5d57fa3403ab627e9507a9f0768e742ebc17bc11.zip
update ebml interface
Diffstat (limited to 'src/libstd')
-rw-r--r--src/libstd/ebml.rs24
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