add durandal::chunk
parent
d397262cf4
commit
e62f14752b
|
@ -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
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
#[allow(dead_code)]
|
||||
pub mod bin;
|
||||
pub mod chunk;
|
||||
pub mod crc;
|
||||
pub mod err;
|
||||
pub mod fx32;
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue