From 93c2f5e0e43532a2288ed6dec378564264d1a77c Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Fri, 27 Jul 2012 19:32:42 -0700 Subject: rustc: Use coherence for operator overloading. The only use of the old-style impls is now placement new. --- src/libstd/ebml.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'src/libstd') 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 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 { -- cgit 1.4.1-3-g733a5