]> git.nihav.org Git - nihav.git/blobdiff - src/io/byteio.rs
Cook decoder
[nihav.git] / src / io / byteio.rs
index 9fee3bda0e6c7f101349d689b833737885c02f08..e172a325d223e19ff512a6f553b9c4aa083293f1 100644 (file)
@@ -13,7 +13,7 @@ pub enum ByteIOError {
     SeekError,
 }
 
-type ByteIOResult<T> = Result<T, ByteIOError>;
+pub type ByteIOResult<T> = Result<T, ByteIOError>;
 
 pub trait ByteIO {
     fn read_buf(&mut self, buf: &mut [u8]) -> ByteIOResult<usize>;
@@ -166,7 +166,7 @@ impl<'a> ByteReader<'a> {
         } else {
             let mut ssize = len;
             let mut buf : [u8; 16] = [0; 16];
-            let mut bref = &mut buf;
+            let bref = &mut buf;
             while ssize > bref.len() {
                 self.io.read_buf(bref)?;
                 ssize -= bref.len();
@@ -190,6 +190,16 @@ impl<'a> ByteReader<'a> {
     pub fn is_eof(&mut self) -> bool {
         self.io.is_eof()
     }
+
+    pub fn size(&mut self) -> i64 {
+        self.io.size()
+    }
+
+    pub fn left(&mut self) -> i64 {
+        let size = self.io.size();
+        if size == -1 { return -1; }
+        return size - (self.io.tell() as i64)
+    }
 }
 
 impl<'a> MemoryReader<'a> {
@@ -360,8 +370,8 @@ pub struct MemoryWriter<'a> {
     pos:      usize,
 }
 
-pub struct FileWriter<'a> {
-    file:     &'a File,
+pub struct FileWriter {
+    file:     File,
 }
 
 impl<'a> ByteWriter<'a> {
@@ -509,13 +519,13 @@ impl<'a> ByteIO for MemoryWriter<'a> {
     }
 }
 
-impl<'a> FileWriter<'a> {
-    pub fn new_write(file: &'a mut File) -> Self {
+impl FileWriter {
+    pub fn new_write(file: File) -> Self {
         FileWriter { file: file }
     }
 }
 
-impl<'a> ByteIO for FileWriter<'a> {
+impl ByteIO for FileWriter {
     #[allow(unused_variables)]
     fn read_byte(&mut self) -> ByteIOResult<u8> {
         Err(ByteIOError::NotImplemented)