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)]
|
#[allow(dead_code)]
|
||||||
pub mod bin;
|
pub mod bin;
|
||||||
|
pub mod chunk;
|
||||||
pub mod crc;
|
pub mod crc;
|
||||||
pub mod err;
|
pub mod err;
|
||||||
pub mod fx32;
|
pub mod fx32;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::durandal::{bin::*, err::*, text::*};
|
use crate::durandal::{bin::*, chunk::*, err::*, text::*};
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
|
|
||||||
fn read_group(b: &[u8], text: &[u8]) -> ResultS<Group>
|
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}))
|
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 v = Vec::new();
|
||||||
let mut p = 0;
|
let mut p = 0;
|
||||||
|
|
Loading…
Reference in New Issue