Own BinarySource, rather than referencing it
This commit is contained in:
parent
7a7469bed1
commit
554812df0e
|
@ -50,7 +50,7 @@ pub fn large_testdata_decoder_with_ann(c: &mut Criterion) {
|
||||||
let mut bs = vec![];
|
let mut bs = vec![];
|
||||||
fh.read_to_end(&mut bs).ok();
|
fh.read_to_end(&mut bs).ok();
|
||||||
b.iter(|| {
|
b.iter(|| {
|
||||||
let mut src = BytesBinarySource::new(&bs[..]);
|
let src = BytesBinarySource::new(&bs[..]);
|
||||||
let mut r = IOValues::new(src.packed()).read_annotations(true);
|
let mut r = IOValues::new(src.packed()).read_annotations(true);
|
||||||
while let Some(Ok(_)) = r.next() {}
|
while let Some(Ok(_)) = r.next() {}
|
||||||
})
|
})
|
||||||
|
@ -63,7 +63,7 @@ pub fn large_testdata_decoder_without_ann(c: &mut Criterion) {
|
||||||
let mut bs = vec![];
|
let mut bs = vec![];
|
||||||
fh.read_to_end(&mut bs).ok();
|
fh.read_to_end(&mut bs).ok();
|
||||||
b.iter(|| {
|
b.iter(|| {
|
||||||
let mut src = BytesBinarySource::new(&bs[..]);
|
let src = BytesBinarySource::new(&bs[..]);
|
||||||
let mut r = IOValues::new(src.packed()).read_annotations(false);
|
let mut r = IOValues::new(src.packed()).read_annotations(false);
|
||||||
while let Some(Ok(_)) = r.next() {}
|
while let Some(Ok(_)) = r.next() {}
|
||||||
})
|
})
|
||||||
|
@ -73,7 +73,7 @@ pub fn large_testdata_decoder_without_ann(c: &mut Criterion) {
|
||||||
pub fn large_testdata_encoder(c: &mut Criterion) {
|
pub fn large_testdata_encoder(c: &mut Criterion) {
|
||||||
c.bench_function("(oo) encode testdata.bin", |b| {
|
c.bench_function("(oo) encode testdata.bin", |b| {
|
||||||
let mut fh = io::BufReader::new(File::open("benches/testdata.bin").unwrap());
|
let mut fh = io::BufReader::new(File::open("benches/testdata.bin").unwrap());
|
||||||
let mut src = IOBinarySource::new(&mut fh);
|
let src = IOBinarySource::new(&mut fh);
|
||||||
let vs = IOValues::new(src.packed()).read_annotations(true).collect::<Result<Vec<_>, _>>().unwrap();
|
let vs = IOValues::new(src.packed()).read_annotations(true).collect::<Result<Vec<_>, _>>().unwrap();
|
||||||
b.iter_with_large_drop(|| {
|
b.iter_with_large_drop(|| {
|
||||||
let mut bs = vec![];
|
let mut bs = vec![];
|
||||||
|
|
|
@ -24,12 +24,12 @@ use super::super::{
|
||||||
source::BinarySource,
|
source::BinarySource,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub struct PackedReader<'de, 'src, S: BinarySource<'de>> {
|
pub struct PackedReader<'de, S: BinarySource<'de>> {
|
||||||
pub source: &'src mut S,
|
pub source: S,
|
||||||
phantom: PhantomData<&'de ()>,
|
phantom: PhantomData<&'de ()>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'de, 'src, S: BinarySource<'de>> BinarySource<'de> for PackedReader<'de, 'src, S> {
|
impl<'de, S: BinarySource<'de>> BinarySource<'de> for PackedReader<'de, S> {
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
fn mark(&mut self) -> io::Result<usize> {
|
fn mark(&mut self) -> io::Result<usize> {
|
||||||
self.source.mark()
|
self.source.mark()
|
||||||
|
@ -72,9 +72,9 @@ fn out_of_range<I: Into<BigInt>>(i: I) -> error::Error {
|
||||||
error::Error::NumberOutOfRange(i.into())
|
error::Error::NumberOutOfRange(i.into())
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'de, 'src, S: BinarySource<'de>> PackedReader<'de, 'src, S> {
|
impl<'de, S: BinarySource<'de>> PackedReader<'de, S> {
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
pub fn new(source: &'src mut S) -> Self {
|
pub fn new(source: S) -> Self {
|
||||||
PackedReader { source, phantom: PhantomData }
|
PackedReader { source, phantom: PhantomData }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -249,7 +249,7 @@ impl<'de, 'src, S: BinarySource<'de>> PackedReader<'de, 'src, S> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'de, 'src, S: BinarySource<'de>> Reader<'de> for PackedReader<'de, 'src, S> {
|
impl<'de, S: BinarySource<'de>> Reader<'de> for PackedReader<'de, S> {
|
||||||
fn peek_class(&mut self) -> io::Result<Option<NextToken>> {
|
fn peek_class(&mut self) -> io::Result<Option<NextToken>> {
|
||||||
match Tag::try_from(match self.peek()? {
|
match Tag::try_from(match self.peek()? {
|
||||||
None => return Ok(None),
|
None => return Ok(None),
|
||||||
|
|
|
@ -39,11 +39,11 @@ pub trait BinarySource<'de>: Sized {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn packed(&mut self) -> super::PackedReader<'de, '_, Self> {
|
fn packed(self) -> super::PackedReader<'de, Self> {
|
||||||
super::PackedReader::new(self)
|
super::PackedReader::new(self)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn text(&mut self) -> super::TextReader<'de, '_, Self> {
|
fn text(self) -> super::TextReader<'de, Self> {
|
||||||
super::TextReader::new(self)
|
super::TextReader::new(self)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,15 +41,15 @@ impl<'r> From<&'r Classification> for NextToken {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct TextReader<'de, 'src, S: BinarySource<'de>> {
|
pub struct TextReader<'de, S: BinarySource<'de>> {
|
||||||
pub source: &'src mut S,
|
pub source: S,
|
||||||
classification_cache: Option<Classification>,
|
classification_cache: Option<Classification>,
|
||||||
phantom: PhantomData<&'de ()>,
|
phantom: PhantomData<&'de ()>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'de, 'src, S: BinarySource<'de>> TextReader<'de, 'src, S>
|
impl<'de, S: BinarySource<'de>> TextReader<'de, S>
|
||||||
{
|
{
|
||||||
pub fn new(source: &'src mut S) -> Self {
|
pub fn new(source: S) -> Self {
|
||||||
TextReader {
|
TextReader {
|
||||||
source,
|
source,
|
||||||
classification_cache: None,
|
classification_cache: None,
|
||||||
|
@ -338,7 +338,7 @@ impl<'de, 'src, S: BinarySource<'de>> TextReader<'de, 'src, S>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'de, 'src, S: BinarySource<'de>> Reader<'de> for TextReader<'de, 'src, S>
|
impl<'de, S: BinarySource<'de>> Reader<'de> for TextReader<'de, S>
|
||||||
{
|
{
|
||||||
fn peek_class(&mut self) -> io::Result<Option<NextToken>> {
|
fn peek_class(&mut self) -> io::Result<Option<NextToken>> {
|
||||||
if let Some(a) = &self.classification_cache {
|
if let Some(a) = &self.classification_cache {
|
||||||
|
|
Loading…
Reference in New Issue