implement WriteStream
This commit is contained in:
parent
69aa2ded18
commit
4a60850712
1 changed files with 43 additions and 0 deletions
|
|
@ -38,3 +38,46 @@ impl<'a> ReadStream<'a> {
|
||||||
Ok(self.rdr.read_u32::<LittleEndian>()?)
|
Ok(self.rdr.read_u32::<LittleEndian>()?)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub struct WriteStream {
|
||||||
|
buf: Cursor<Vec<u8>>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl WriteStream {
|
||||||
|
pub fn new(capacity: usize) -> WriteStream {
|
||||||
|
WriteStream {
|
||||||
|
buf: Cursor::new(Vec::with_capacity(capacity)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn into_raw(self, offset: usize, size: usize) -> Raw {
|
||||||
|
let buf_size = self.buf.get_ref().len();
|
||||||
|
Raw {
|
||||||
|
offset: offset,
|
||||||
|
size: if size == 0 { buf_size } else { size },
|
||||||
|
mem: self.buf.into_inner(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn offset(&self) -> usize {
|
||||||
|
self.buf.position() as usize
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn write_bytes(&mut self, bytes: &[u8]) {
|
||||||
|
self.buf.get_mut().extend(bytes.iter());
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn write<T: Decoder>(&mut self, val: &T) -> Result<()> {
|
||||||
|
let mut raw = val.encode()?;
|
||||||
|
self.buf.get_mut().append(&mut raw.mem);
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn write_u16(&mut self, val: u16) -> Result<()> {
|
||||||
|
Ok(self.buf.write_u16::<LittleEndian>(val)?)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn write_u32(&mut self, val: u32) -> Result<()> {
|
||||||
|
Ok(self.buf.write_u32::<LittleEndian>(val)?)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue