mirror of
https://codeberg.org/icewind/bitbuffer.git
synced 2026-06-03 08:34:07 +02:00
add trait for skipping types
This commit is contained in:
parent
7b222158f1
commit
b723dee23b
4 changed files with 29 additions and 1 deletions
|
|
@ -13,6 +13,7 @@ travis-ci = { repository = "icewind1991/bitstream_reader" }
|
|||
[dependencies]
|
||||
num-traits = "0.2"
|
||||
bitstream_reader_derive = { version = "0.4", path = "bitstream_reader_derive" }
|
||||
bitstream_reader_skip = { version = "0.4", path = "bitstream_reader_skip", optional = true }
|
||||
packed_simd = { version = "0.3", features = ["into_bits"], optional = true }
|
||||
|
||||
[dev-dependencies]
|
||||
|
|
@ -21,5 +22,6 @@ maplit = "1.0.1"
|
|||
[features]
|
||||
unchecked_utf8 = []
|
||||
simd = ["packed_simd"]
|
||||
skip = ["bitstream_reader_skip"]
|
||||
|
||||
[workspace]
|
||||
|
|
@ -11,7 +11,17 @@
|
|||
<sourceFolder url="file://$MODULE_DIR$/bitstream_reader_derive/examples" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/bitstream_reader_derive/tests" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/bitstream_reader_derive/benches" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/bitstream_reader_skip/src" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/bitstream_reader_skip/examples" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/bitstream_reader_skip/tests" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/bitstream_reader_skip/benches" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/bitstream_reader_traits/src" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/bitstream_reader_traits/examples" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/bitstream_reader_traits/tests" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/bitstream_reader_traits/benches" isTestSource="true" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/bitstream_reader_derive/target" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/bitstream_reader_skip/target" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/bitstream_reader_traits/target" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/target" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ pub use std::string::FromUtf8Error;
|
|||
pub use bitstream_reader_derive::{BitRead, BitReadSized, BitSize, BitSizeSized};
|
||||
pub use buffer::BitBuffer;
|
||||
pub use endianness::*;
|
||||
pub use read::{BitRead, BitReadSized, BitSize, BitSizeSized, LazyBitRead, LazyBitReadSized};
|
||||
pub use read::{BitRead, BitReadSized, BitSize, BitSizeSized, LazyBitRead, LazyBitReadSized, BitSkip};
|
||||
pub use stream::BitStream;
|
||||
|
||||
mod buffer;
|
||||
|
|
|
|||
16
src/read.rs
16
src/read.rs
|
|
@ -95,6 +95,22 @@ pub trait BitSize {
|
|||
fn bit_size() -> usize;
|
||||
}
|
||||
|
||||
/// Trait to allow skipping a type
|
||||
///
|
||||
/// This might be faster than trying to read it
|
||||
pub trait BitSkip<E: Endianness>: BitRead<E> {
|
||||
/// Skip the type
|
||||
fn skip(stream: &mut BitStream<E>) -> Result<()> {
|
||||
Self::read(stream).map(|_| ())
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: BitRead<E> + BitSize, E: Endianness> BitSkip<E> for T {
|
||||
fn skip(stream: &mut BitStream<E>) -> Result<()> {
|
||||
stream.skip_bits(Self::bit_size())
|
||||
}
|
||||
}
|
||||
|
||||
macro_rules! impl_read_int {
|
||||
($type:ty, $len:expr) => {
|
||||
impl<E: Endianness> BitRead<E> for $type {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue