about summary refs log tree commit diff
path: root/src/libstd/ebml.rs
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2012-07-27 19:32:42 -0700
committerPatrick Walton <pcwalton@mimiga.net>2012-07-27 19:35:24 -0700
commit93c2f5e0e43532a2288ed6dec378564264d1a77c (patch)
tree2d8d3f5d4667f7a009fa338bc34076216873b35c /src/libstd/ebml.rs
parente6d2e49852873c52b872185a0ae5a8ca941ed2f1 (diff)
downloadrust-93c2f5e0e43532a2288ed6dec378564264d1a77c.tar.gz
rust-93c2f5e0e43532a2288ed6dec378564264d1a77c.zip
rustc: Use coherence for operator overloading.
The only use of the old-style impls is now placement new.
Diffstat (limited to 'src/libstd/ebml.rs')
-rw-r--r--src/libstd/ebml.rs20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/libstd/ebml.rs b/src/libstd/ebml.rs
index d29727046d8..8dbb39d1831 100644
--- a/src/libstd/ebml.rs
+++ b/src/libstd/ebml.rs
@@ -27,6 +27,8 @@ export serializer;
 export ebml_deserializer;
 export deserializer;
 export with_doc_data;
+export get_doc;
+export extensions;
 
 type ebml_tag = {id: uint, size: uint};
 
@@ -40,6 +42,24 @@ type doc = {data: @~[u8], start: uint, end: uint};
 
 type tagged_doc = {tag: uint, doc: doc};
 
+trait get_doc {
+    fn [](tag: uint) -> doc;
+}
+
+impl extensions of get_doc for doc {
+    fn [](tag: uint) -> doc {
+        get_doc(self, tag)
+    }
+}
+
+impl extensions of ops::index<uint,doc> for doc {
+    pure fn index(&&tag: uint) -> doc {
+        unchecked {
+            get_doc(self, tag)
+        }
+    }
+}
+
 fn vuint_at(data: &[u8], start: uint) -> {val: uint, next: uint} {
     let a = data[start];
     if a & 0x80u8 != 0u8 {