Own BinarySource, rather than referencing it

This commit is contained in:
Tony Garnock-Jones 2022-11-08 23:01:37 +01:00
parent 7a7469bed1
commit 554812df0e
4 changed files with 16 additions and 16 deletions

View File

@ -50,7 +50,7 @@ pub fn large_testdata_decoder_with_ann(c: &mut Criterion) {
let mut bs = vec![];
fh.read_to_end(&mut bs).ok();
b.iter(|| {
let mut src = BytesBinarySource::new(&bs[..]);
let src = BytesBinarySource::new(&bs[..]);
let mut r = IOValues::new(src.packed()).read_annotations(true);
while let Some(Ok(_)) = r.next() {}
})
@ -63,7 +63,7 @@ pub fn large_testdata_decoder_without_ann(c: &mut Criterion) {
let mut bs = vec![];
fh.read_to_end(&mut bs).ok();
b.iter(|| {
let mut src = BytesBinarySource::new(&bs[..]);
let src = BytesBinarySource::new(&bs[..]);
let mut r = IOValues::new(src.packed()).read_annotations(false);
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) {
c.bench_function("(oo) encode testdata.bin", |b| {
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();
b.iter_with_large_drop(|| {
let mut bs = vec![];

View File

@ -24,12 +24,12 @@ use super::super::{
source::BinarySource,
};
pub struct PackedReader<'de, 'src, S: BinarySource<'de>> {
pub source: &'src mut S,
pub struct PackedReader<'de, S: BinarySource<'de>> {
pub source: S,
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)]
fn mark(&mut self) -> io::Result<usize> {
self.source.mark()
@ -72,9 +72,9 @@ fn out_of_range<I: Into<BigInt>>(i: I) -> error::Error {
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)]
pub fn new(source: &'src mut S) -> Self {
pub fn new(source: S) -> Self {
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>> {
match Tag::try_from(match self.peek()? {
None => return Ok(None),

View File

@ -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)
}
fn text(&mut self) -> super::TextReader<'de, '_, Self> {
fn text(self) -> super::TextReader<'de, Self> {
super::TextReader::new(self)
}
}

View File

@ -41,15 +41,15 @@ impl<'r> From<&'r Classification> for NextToken {
}
}
pub struct TextReader<'de, 'src, S: BinarySource<'de>> {
pub source: &'src mut S,
pub struct TextReader<'de, S: BinarySource<'de>> {
pub source: S,
classification_cache: Option<Classification>,
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 {
source,
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>> {
if let Some(a) = &self.classification_cache {