stdlib: Box data in EBML documents

This commit is contained in:
Patrick Walton 2011-07-11 18:18:43 -07:00
parent e1f9bfbac9
commit d21228fce7
1 changed files with 7 additions and 7 deletions

View File

@ -15,9 +15,9 @@ type ebml_state = rec(ebml_tag ebml_tag, uint tag_pos, uint data_pos);
// modules within this file.
// ebml reading
type doc = rec(u8[] data, uint start, uint end);
type doc = rec(@u8[] data, uint start, uint end);
fn vint_at(&u8[] data, uint start) -> tup(uint, uint) {
fn vint_at(&@u8[] data, uint start) -> tup(uint, uint) {
auto a = data.(start);
if (a & 0x80u8 != 0u8) { ret tup(a & 0x7fu8 as uint, start + 1u); }
if (a & 0x40u8 != 0u8) {
@ -35,11 +35,11 @@ fn vint_at(&u8[] data, uint start) -> tup(uint, uint) {
} else { log_err "vint too big"; fail; }
}
fn new_doc(&u8[] data) -> doc {
ret rec(data=data, start=0u, end=ivec::len[u8](data));
fn new_doc(&@u8[] data) -> doc {
ret rec(data=data, start=0u, end=ivec::len[u8](*data));
}
fn doc_at(&u8[] data, uint start) -> doc {
fn doc_at(&@u8[] data, uint start) -> doc {
auto elt_tag = vint_at(data, start);
auto elt_size = vint_at(data, elt_tag._1);
auto end = elt_size._1 + elt_size._0;
@ -91,9 +91,9 @@ iter tagged_docs(doc d, uint tg) -> doc {
}
}
fn doc_data(doc d) -> u8[] { ret ivec::slice[u8](d.data, d.start, d.end); }
fn doc_data(doc d) -> u8[] { ret ivec::slice[u8](*d.data, d.start, d.end); }
fn be_uint_from_bytes(&u8[] data, uint start, uint size) -> uint {
fn be_uint_from_bytes(&@u8[] data, uint start, uint size) -> uint {
auto sz = size;
assert (sz <= 4u);
auto val = 0u;