Skip to content

Commit fd9ad77

Browse files
ericktalexcrichton
authored andcommitted
Move SeekableMemWriter into librbml
1 parent e1dcbef commit fd9ad77

File tree

7 files changed

+11
-235
lines changed

7 files changed

+11
-235
lines changed

src/librustc/util/io.rs renamed to src/librbml/io.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ fn combine(seek: SeekStyle, cur: uint, end: uint, offset: i64) -> IoResult<u64>
3939
///
4040
/// ```rust
4141
/// # #![allow(unused_must_use)]
42-
/// use std::io::SeekableMemWriter;
42+
/// use rbml::io::SeekableMemWriter;
4343
///
4444
/// let mut w = SeekableMemWriter::new();
4545
/// w.write([0, 1, 2]);
@@ -128,6 +128,7 @@ impl Seek for SeekableMemWriter {
128128

129129
#[cfg(test)]
130130
mod tests {
131+
extern crate test;
131132
use super::SeekableMemWriter;
132133
use std::io;
133134
use test::Bencher;

src/librbml/lib.rs

Lines changed: 4 additions & 116 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@ extern crate serialize;
3232
#[phase(plugin, link)] extern crate log;
3333
#[cfg(test)] extern crate test;
3434

35-
use std::io;
3635
use std::str;
3736

37+
pub mod io;
3838

3939
/// Common data structures
4040
#[deriving(Clone)]
@@ -105,7 +105,7 @@ pub enum EbmlEncoderTag {
105105
pub enum Error {
106106
IntTooBig(uint),
107107
Expected(String),
108-
IoError(io::IoError)
108+
IoError(std::io::IoError)
109109
}
110110
// --------------------------------------
111111

@@ -1038,127 +1038,15 @@ pub mod writer {
10381038
#[cfg(test)]
10391039
mod tests {
10401040
use super::{Doc, reader, writer};
1041+
use super::io::SeekableMemWriter;
1042+
10411043
use serialize::{Encodable, Decodable};
10421044

10431045
use std::io::{IoError, IoResult, SeekStyle};
10441046
use std::io;
10451047
use std::option::{None, Option, Some};
10461048
use std::slice;
10471049

1048-
static BUF_CAPACITY: uint = 128;
1049-
1050-
fn combine(seek: SeekStyle, cur: uint, end: uint, offset: i64) -> IoResult<u64> {
1051-
// compute offset as signed and clamp to prevent overflow
1052-
let pos = match seek {
1053-
io::SeekSet => 0,
1054-
io::SeekEnd => end,
1055-
io::SeekCur => cur,
1056-
} as i64;
1057-
1058-
if offset + pos < 0 {
1059-
Err(IoError {
1060-
kind: io::InvalidInput,
1061-
desc: "invalid seek to a negative offset",
1062-
detail: None
1063-
})
1064-
} else {
1065-
Ok((offset + pos) as u64)
1066-
}
1067-
}
1068-
1069-
/// Writes to an owned, growable byte vector that supports seeking.
1070-
///
1071-
/// # Example
1072-
///
1073-
/// ```rust
1074-
/// # #![allow(unused_must_use)]
1075-
/// use std::io::SeekableMemWriter;
1076-
///
1077-
/// let mut w = SeekableMemWriter::new();
1078-
/// w.write([0, 1, 2]);
1079-
///
1080-
/// assert_eq!(w.unwrap(), vec!(0, 1, 2));
1081-
/// ```
1082-
pub struct SeekableMemWriter {
1083-
buf: Vec<u8>,
1084-
pos: uint,
1085-
}
1086-
1087-
impl SeekableMemWriter {
1088-
/// Create a new `SeekableMemWriter`.
1089-
#[inline]
1090-
pub fn new() -> SeekableMemWriter {
1091-
SeekableMemWriter::with_capacity(BUF_CAPACITY)
1092-
}
1093-
/// Create a new `SeekableMemWriter`, allocating at least `n` bytes for
1094-
/// the internal buffer.
1095-
#[inline]
1096-
pub fn with_capacity(n: uint) -> SeekableMemWriter {
1097-
SeekableMemWriter { buf: Vec::with_capacity(n), pos: 0 }
1098-
}
1099-
1100-
/// Acquires an immutable reference to the underlying buffer of this
1101-
/// `SeekableMemWriter`.
1102-
///
1103-
/// No method is exposed for acquiring a mutable reference to the buffer
1104-
/// because it could corrupt the state of this `MemWriter`.
1105-
#[inline]
1106-
pub fn get_ref<'a>(&'a self) -> &'a [u8] { self.buf.as_slice() }
1107-
1108-
/// Unwraps this `SeekableMemWriter`, returning the underlying buffer
1109-
#[inline]
1110-
pub fn unwrap(self) -> Vec<u8> { self.buf }
1111-
}
1112-
1113-
impl Writer for SeekableMemWriter {
1114-
#[inline]
1115-
fn write(&mut self, buf: &[u8]) -> IoResult<()> {
1116-
if self.pos == self.buf.len() {
1117-
self.buf.push_all(buf)
1118-
} else {
1119-
// Make sure the internal buffer is as least as big as where we
1120-
// currently are
1121-
let difference = self.pos as i64 - self.buf.len() as i64;
1122-
if difference > 0 {
1123-
self.buf.grow(difference as uint, &0);
1124-
}
1125-
1126-
// Figure out what bytes will be used to overwrite what's currently
1127-
// there (left), and what will be appended on the end (right)
1128-
let cap = self.buf.len() - self.pos;
1129-
let (left, right) = if cap <= buf.len() {
1130-
(buf.slice_to(cap), buf.slice_from(cap))
1131-
} else {
1132-
(buf, &[])
1133-
};
1134-
1135-
// Do the necessary writes
1136-
if left.len() > 0 {
1137-
slice::bytes::copy_memory(self.buf.mut_slice_from(self.pos), left);
1138-
}
1139-
if right.len() > 0 {
1140-
self.buf.push_all(right);
1141-
}
1142-
}
1143-
1144-
// Bump us forward
1145-
self.pos += buf.len();
1146-
Ok(())
1147-
}
1148-
}
1149-
1150-
impl Seek for SeekableMemWriter {
1151-
#[inline]
1152-
fn tell(&self) -> IoResult<u64> { Ok(self.pos as u64) }
1153-
1154-
#[inline]
1155-
fn seek(&mut self, pos: i64, style: SeekStyle) -> IoResult<()> {
1156-
let new = try!(combine(style, self.pos, self.buf.len(), pos));
1157-
self.pos = new as uint;
1158-
Ok(())
1159-
}
1160-
}
1161-
11621050
#[test]
11631051
fn test_vuint_at() {
11641052
let data = [

src/librustc/lib.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,6 @@ pub mod util {
133133

134134
pub mod common;
135135
pub mod ppaux;
136-
pub mod io;
137136
pub mod nodemap;
138137
}
139138

src/librustc/metadata/encoder.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ use middle::ty;
2626
use middle::typeck;
2727
use middle::stability;
2828
use middle;
29-
use util::io::SeekableMemWriter;
3029
use util::nodemap::{NodeMap, NodeSet};
3130

3231
use serialize::Encodable;
@@ -53,6 +52,7 @@ use syntax::visit::Visitor;
5352
use syntax::visit;
5453
use syntax;
5554
use rbml::writer;
55+
use rbml::io::SeekableMemWriter;
5656

5757
/// A borrowed version of ast::InlinedItem.
5858
pub enum InlinedItemRef<'a> {

src/librustc/metadata/tyencode.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ use syntax::ast::*;
2727
use syntax::diagnostic::SpanHandler;
2828
use syntax::parse::token;
2929

30-
use util::io::SeekableMemWriter;
30+
use rbml::io::SeekableMemWriter;
3131

3232
macro_rules! mywrite( ($($arg:tt)*) => ({ write!($($arg)*); }) )
3333

src/librustc/middle/astencode.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ use middle::subst;
2828
use middle::subst::VecPerParamSpace;
2929
use middle::typeck::{MethodCall, MethodCallee, MethodOrigin};
3030
use middle::{ty, typeck};
31-
use util::io::SeekableMemWriter;
3231
use util::ppaux::ty_to_string;
3332

3433
use syntax::{ast, ast_map, ast_util, codemap, fold};
@@ -43,6 +42,7 @@ use std::io::Seek;
4342
use std::mem;
4443
use std::gc::GC;
4544

45+
use rbml::io::SeekableMemWriter;
4646
use rbml::{reader, writer};
4747
use rbml;
4848
use serialize;

src/test/run-pass/issue-11881.rs

Lines changed: 2 additions & 114 deletions
Original file line numberDiff line numberDiff line change
@@ -17,121 +17,9 @@ use std::slice;
1717

1818
use serialize::{Encodable, Encoder};
1919
use serialize::json;
20-
use rbml::writer;
21-
22-
static BUF_CAPACITY: uint = 128;
23-
24-
fn combine(seek: SeekStyle, cur: uint, end: uint, offset: i64) -> IoResult<u64> {
25-
// compute offset as signed and clamp to prevent overflow
26-
let pos = match seek {
27-
io::SeekSet => 0,
28-
io::SeekEnd => end,
29-
io::SeekCur => cur,
30-
} as i64;
31-
32-
if offset + pos < 0 {
33-
Err(IoError {
34-
kind: io::InvalidInput,
35-
desc: "invalid seek to a negative offset",
36-
detail: None
37-
})
38-
} else {
39-
Ok((offset + pos) as u64)
40-
}
41-
}
42-
43-
/// Writes to an owned, growable byte vector that supports seeking.
44-
///
45-
/// # Example
46-
///
47-
/// ```rust
48-
/// # #![allow(unused_must_use)]
49-
/// use std::io::SeekableMemWriter;
50-
///
51-
/// let mut w = SeekableMemWriter::new();
52-
/// w.write([0, 1, 2]);
53-
///
54-
/// assert_eq!(w.unwrap(), vec!(0, 1, 2));
55-
/// ```
56-
pub struct SeekableMemWriter {
57-
buf: Vec<u8>,
58-
pos: uint,
59-
}
60-
61-
impl SeekableMemWriter {
62-
/// Create a new `SeekableMemWriter`.
63-
#[inline]
64-
pub fn new() -> SeekableMemWriter {
65-
SeekableMemWriter::with_capacity(BUF_CAPACITY)
66-
}
67-
/// Create a new `SeekableMemWriter`, allocating at least `n` bytes for
68-
/// the internal buffer.
69-
#[inline]
70-
pub fn with_capacity(n: uint) -> SeekableMemWriter {
71-
SeekableMemWriter { buf: Vec::with_capacity(n), pos: 0 }
72-
}
73-
74-
/// Acquires an immutable reference to the underlying buffer of this
75-
/// `SeekableMemWriter`.
76-
///
77-
/// No method is exposed for acquiring a mutable reference to the buffer
78-
/// because it could corrupt the state of this `MemWriter`.
79-
#[inline]
80-
pub fn get_ref<'a>(&'a self) -> &'a [u8] { self.buf.as_slice() }
8120

82-
/// Unwraps this `SeekableMemWriter`, returning the underlying buffer
83-
#[inline]
84-
pub fn unwrap(self) -> Vec<u8> { self.buf }
85-
}
86-
87-
impl Writer for SeekableMemWriter {
88-
#[inline]
89-
fn write(&mut self, buf: &[u8]) -> IoResult<()> {
90-
if self.pos == self.buf.len() {
91-
self.buf.push_all(buf)
92-
} else {
93-
// Make sure the internal buffer is as least as big as where we
94-
// currently are
95-
let difference = self.pos as i64 - self.buf.len() as i64;
96-
if difference > 0 {
97-
self.buf.grow(difference as uint, &0);
98-
}
99-
100-
// Figure out what bytes will be used to overwrite what's currently
101-
// there (left), and what will be appended on the end (right)
102-
let cap = self.buf.len() - self.pos;
103-
let (left, right) = if cap <= buf.len() {
104-
(buf.slice_to(cap), buf.slice_from(cap))
105-
} else {
106-
(buf, &[])
107-
};
108-
109-
// Do the necessary writes
110-
if left.len() > 0 {
111-
slice::bytes::copy_memory(self.buf.mut_slice_from(self.pos), left);
112-
}
113-
if right.len() > 0 {
114-
self.buf.push_all(right);
115-
}
116-
}
117-
118-
// Bump us forward
119-
self.pos += buf.len();
120-
Ok(())
121-
}
122-
}
123-
124-
impl Seek for SeekableMemWriter {
125-
#[inline]
126-
fn tell(&self) -> IoResult<u64> { Ok(self.pos as u64) }
127-
128-
#[inline]
129-
fn seek(&mut self, pos: i64, style: SeekStyle) -> IoResult<()> {
130-
let new = try!(combine(style, self.pos, self.buf.len(), pos));
131-
self.pos = new as uint;
132-
Ok(())
133-
}
134-
}
21+
use rbml::writer;
22+
use rbml::io::SeekableMemWriter;
13523

13624
#[deriving(Encodable)]
13725
struct Foo {

0 commit comments

Comments
 (0)