diff options
| author | Patrick Walton <pcwalton@mimiga.net> | 2012-07-27 19:32:42 -0700 |
|---|---|---|
| committer | Patrick Walton <pcwalton@mimiga.net> | 2012-07-27 19:35:24 -0700 |
| commit | 93c2f5e0e43532a2288ed6dec378564264d1a77c (patch) | |
| tree | 2d8d3f5d4667f7a009fa338bc34076216873b35c /src/libstd/ebml.rs | |
| parent | e6d2e49852873c52b872185a0ae5a8ca941ed2f1 (diff) | |
| download | rust-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.rs | 20 |
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 { |
