add durandal::chunk

png-branch
an 2018-12-13 04:07:54 -05:00
parent d397262cf4
commit e62f14752b
3 changed files with 35 additions and 3 deletions

31
src/durandal/chunk.rs Normal file
View File

@ -0,0 +1,31 @@
use crate::durandal::err::*;
impl<T: Chunked<T>> Chunker<Vec<T>> for T
{
fn chunk(b: &[u8]) -> ResultS<Vec<T>>
{
let mut v = Vec::with_capacity(b.len() / T::SIZE_CHUNK);
let mut p = 0;
while p < b.len() {
v.push(T::read(&b[p..])?);
p += T::SIZE_CHUNK;
}
Ok(v)
}
}
pub trait Chunked<T>
{
const SIZE_CHUNK: usize;
fn read(b: &[u8]) -> ResultS<T>;
}
pub trait Chunker<T>
{
fn chunk(b: &[u8]) -> ResultS<T>;
}
// EOF

View File

@ -2,6 +2,7 @@
#[allow(dead_code)]
pub mod bin;
pub mod chunk;
pub mod crc;
pub mod err;
pub mod fx32;

View File

@ -1,4 +1,4 @@
use crate::durandal::{bin::*, err::*, text::*};
use crate::durandal::{bin::*, chunk::*, err::*, text::*};
use std::fmt;
fn read_group(b: &[u8], text: &[u8]) -> ResultS<Group>
@ -57,9 +57,9 @@ fn read_terminal(b: &[u8]) -> ResultS<(usize, Terminal)>
Ok((end, Terminal{lines, groups, faces}))
}
impl Terminal
impl Chunker<Vec<Terminal>> for Terminal
{
pub fn chunk(b: &[u8]) -> ResultS<Vec<Terminal>>
fn chunk(b: &[u8]) -> ResultS<Vec<Terminal>>
{
let mut v = Vec::new();
let mut p = 0;