mirror of
https://codeberg.org/icewind/bitbuffer.git
synced 2026-06-04 00:54:07 +02:00
make more functions inlinable
this has a noticable performance improvments since a lot of conditionals can be determined compile time when inlined
This commit is contained in:
parent
c6fb6e999a
commit
8e1c901985
2 changed files with 9 additions and 0 deletions
|
|
@ -165,6 +165,7 @@ where
|
|||
/// ```
|
||||
///
|
||||
/// [`ReadError::NotEnoughData`]: enum.ReadError.html#variant.NotEnoughData
|
||||
#[inline]
|
||||
pub fn read_bool(&self, position: usize) -> Result<bool> {
|
||||
let byte_index = position / 8;
|
||||
let bit_offset = position & 7;
|
||||
|
|
@ -339,6 +340,7 @@ where
|
|||
/// ```
|
||||
///
|
||||
/// [`ReadError::NotEnoughData`]: enum.ReadError.html#variant.NotEnoughData
|
||||
#[inline]
|
||||
pub fn read_bytes(&self, position: usize, byte_count: usize) -> Result<Vec<u8>> {
|
||||
if position + byte_count * 8 > self.bit_len() {
|
||||
if position > self.bit_len() {
|
||||
|
|
@ -424,6 +426,7 @@ where
|
|||
///
|
||||
/// [`ReadError::NotEnoughData`]: enum.ReadError.html#variant.NotEnoughData
|
||||
/// [`ReadError::Utf8Error`]: enum.ReadError.html#variant.Utf8Error
|
||||
#[inline]
|
||||
pub fn read_string(&self, position: usize, byte_len: Option<usize>) -> Result<String> {
|
||||
match byte_len {
|
||||
Some(byte_len) => {
|
||||
|
|
@ -498,6 +501,7 @@ where
|
|||
/// ```
|
||||
///
|
||||
/// [`ReadError::NotEnoughData`]: enum.ReadError.html#variant.NotEnoughData
|
||||
#[inline]
|
||||
pub fn read_float<T>(&self, position: usize) -> Result<T>
|
||||
where
|
||||
T: Float + UncheckedPrimitiveFloat,
|
||||
|
|
|
|||
|
|
@ -92,6 +92,7 @@ where
|
|||
/// ```
|
||||
///
|
||||
/// [`ReadError::NotEnoughData`]: enum.ReadError.html#variant.NotEnoughData
|
||||
#[inline]
|
||||
pub fn read_bool(&mut self) -> Result<bool> {
|
||||
let result = self.buffer.read_bool(self.pos);
|
||||
if result.is_ok() {
|
||||
|
|
@ -129,6 +130,7 @@ where
|
|||
///
|
||||
/// [`ReadError::NotEnoughData`]: enum.ReadError.html#variant.NotEnoughData
|
||||
/// [`ReadError::TooManyBits`]: enum.ReadError.html#variant.TooManyBits
|
||||
#[inline]
|
||||
pub fn read_int<T>(&mut self, count: usize) -> Result<T>
|
||||
where
|
||||
T: PrimInt + BitOrAssign + IsSigned + UncheckedPrimitiveInt,
|
||||
|
|
@ -166,6 +168,7 @@ where
|
|||
/// ```
|
||||
///
|
||||
/// [`ReadError::NotEnoughData`]: enum.ReadError.html#variant.NotEnoughData
|
||||
#[inline]
|
||||
pub fn read_float<T>(&mut self) -> Result<T>
|
||||
where
|
||||
T: Float + UncheckedPrimitiveFloat,
|
||||
|
|
@ -204,6 +207,7 @@ where
|
|||
/// ```
|
||||
///
|
||||
/// [`ReadError::NotEnoughData`]: enum.ReadError.html#variant.NotEnoughData
|
||||
#[inline]
|
||||
pub fn read_bytes(&mut self, byte_count: usize) -> Result<Vec<u8>> {
|
||||
let count = byte_count * 8;
|
||||
let result = self.buffer.read_bytes(self.pos, byte_count);
|
||||
|
|
@ -255,6 +259,7 @@ where
|
|||
///
|
||||
/// [`ReadError::NotEnoughData`]: enum.ReadError.html#variant.NotEnoughData
|
||||
/// [`ReadError::Utf8Error`]: enum.ReadError.html#variant.Utf8Error
|
||||
#[inline]
|
||||
pub fn read_string(&mut self, byte_len: Option<usize>) -> Result<String> {
|
||||
let result = self.buffer.read_string(self.pos, byte_len).map_err(|err| {
|
||||
// still advance the stream on malformed utf8
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue