diff options
| author | Patrick Walton <[email protected]> | 2011-03-25 17:53:46 -0700 |
|---|---|---|
| committer | Patrick Walton <[email protected]> | 2011-03-25 17:54:48 -0700 |
| commit | 94c19a18ae8ddf70d0c6a21b296e0858dc154d2a (patch) | |
| tree | 8f8a88da05e45ba03c48cf82f9670a9d00991b7a /src/lib | |
| parent | Trans nomenclature tidy-up: upcall vs. native vs. extern. (diff) | |
| download | rust-94c19a18ae8ddf70d0c6a21b296e0858dc154d2a.tar.xz rust-94c19a18ae8ddf70d0c6a21b296e0858dc154d2a.zip | |
rustc: Look up names in "use"d crates
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/ebml.rs | 15 | ||||
| -rw-r--r-- | src/lib/io.rs | 9 |
2 files changed, 18 insertions, 6 deletions
diff --git a/src/lib/ebml.rs b/src/lib/ebml.rs index d1697eba..047218a3 100644 --- a/src/lib/ebml.rs +++ b/src/lib/ebml.rs @@ -6,7 +6,7 @@ import option.none; import option.some; type ebml_tag = rec(uint id, uint size); -type ebml_state = rec(ebml_tag ebml_tag, uint pos); +type ebml_state = rec(ebml_tag ebml_tag, uint tag_pos, uint data_pos); // TODO: When we have module renaming, make "reader" and "writer" separate // modules within this file. @@ -56,8 +56,10 @@ impure fn create_reader(&io.reader r) -> reader { impure fn bytes_left(&reader r) -> uint { auto pos = r.reader.tell(); alt (_vec.last[ebml_state](r.states)) { - case (none[ebml_state]) { ret r.size - pos; } - case (some[ebml_state](?st)) { ret st.pos + st.ebml_tag.size - pos; } + case (none[ebml_state]) { ret r.size - pos; } + case (some[ebml_state](?st)) { + ret st.data_pos + st.ebml_tag.size - pos; + } } } @@ -69,9 +71,10 @@ impure fn read_tag(&reader r) -> ebml_tag { // Reads a tag and moves the cursor to its first child or data segment. impure fn move_to_first_child(&reader r) { - auto pos = r.reader.tell(); + auto tag_pos = r.reader.tell(); auto t = read_tag(r); - r.states += vec(rec(ebml_tag=t, pos=pos)); + auto data_pos = r.reader.tell(); + r.states += vec(rec(ebml_tag=t, tag_pos=tag_pos, data_pos=data_pos)); } // Reads a tag and skips over its contents, moving to its next sibling. @@ -84,7 +87,7 @@ impure fn move_to_next_sibling(&reader r) { impure fn move_to_parent(&reader r) { check (_vec.len[ebml_state](r.states) > 0u); auto st = _vec.pop[ebml_state](r.states); - r.reader.seek(st.pos as int, io.seek_set); + r.reader.seek(st.tag_pos as int, io.seek_set); } // Reads the data segment of a tag. diff --git a/src/lib/io.rs b/src/lib/io.rs index 5088d197..84de1815 100644 --- a/src/lib/io.rs +++ b/src/lib/io.rs @@ -188,6 +188,11 @@ fn file_reader(str path) -> reader { ret new_reader(FILE_buf_reader(f, true)); } +// FIXME: Remove me once objects are exported. +fn new_reader_(buf_reader bufr) -> reader { + ret new_reader(bufr); +} + // Byte buffer readers @@ -224,6 +229,10 @@ state obj byte_buf_reader(byte_buf bbuf) { impure fn tell() -> uint { ret bbuf.pos; } } +fn new_byte_buf_reader(vec[u8] buf) -> byte_buf_reader { + ret byte_buf_reader(@rec(buf=buf, mutable pos=0u)); +} + // Writing |