From 7a7469bed122f1dc959e562932d060c9ea81c49f Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Tue, 8 Nov 2022 22:52:11 +0100 Subject: [PATCH] Hoist common features to BinarySource --- implementations/rust/oo/src/packed/reader.rs | 14 +------------- implementations/rust/oo/src/source.rs | 12 ++++++++++++ implementations/rust/oo/src/text/reader.rs | 7 +++---- 3 files changed, 16 insertions(+), 17 deletions(-) diff --git a/implementations/rust/oo/src/packed/reader.rs b/implementations/rust/oo/src/packed/reader.rs index de30e6d..633aac0 100644 --- a/implementations/rust/oo/src/packed/reader.rs +++ b/implementations/rust/oo/src/packed/reader.rs @@ -1,5 +1,5 @@ use crate::{ValueClass, AtomClass, Atom}; -use crate::error::{self, ExpectedKind, io_eof}; +use crate::error::{self, ExpectedKind}; use num_bigint::BigInt; use num_traits::cast::{FromPrimitive, ToPrimitive}; @@ -78,18 +78,6 @@ impl<'de, 'src, S: BinarySource<'de>> PackedReader<'de, 'src, S> { PackedReader { source, phantom: PhantomData } } - #[inline(always)] - fn peek_noeof(&mut self) -> io::Result { - self.peek()?.ok_or_else(io_eof) - } - - #[inline(always)] - fn read(&mut self) -> io::Result { - let v = self.peek_noeof()?; - self.skip()?; - Ok(v) - } - #[inline(always)] fn varint(&mut self) -> io::Result { let mut shift = 0; diff --git a/implementations/rust/oo/src/source.rs b/implementations/rust/oo/src/source.rs index 2fe3762..ccd8c1b 100644 --- a/implementations/rust/oo/src/source.rs +++ b/implementations/rust/oo/src/source.rs @@ -17,6 +17,18 @@ pub trait BinarySource<'de>: Sized { //--------------------------------------------------------------------------- + #[inline(always)] + fn peek_noeof(&mut self) -> io::Result { + self.peek()?.ok_or_else(io_eof) + } + + #[inline(always)] + fn read(&mut self) -> io::Result { + let v = self.peek_noeof()?; + self.skip()?; + Ok(v) + } + fn syntax_error(&mut self, message: &str) -> io::Error { io::Error::new(io::ErrorKind::InvalidData, SyntaxError { position: match self.input_position() { diff --git a/implementations/rust/oo/src/text/reader.rs b/implementations/rust/oo/src/text/reader.rs index 0ea299a..960adf2 100644 --- a/implementations/rust/oo/src/text/reader.rs +++ b/implementations/rust/oo/src/text/reader.rs @@ -67,17 +67,16 @@ impl<'de, 'src, S: BinarySource<'de>> TextReader<'de, 'src, S> #[inline(always)] fn peek_noeof(&mut self) -> io::Result { - self.source.peek()?.ok_or_else(io_eof) + self.source.peek_noeof() } fn skip(&mut self) -> io::Result<()> { self.source.skip() } + #[inline(always)] fn next_byte(&mut self) -> io::Result { - let b = self.peek_noeof()?; - self.source.skip()?; - Ok(b) + self.source.read() } fn skip_whitespace(&mut self) {