1
0
Fork 0
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:
Robin Appelman 2019-03-17 18:44:14 +01:00
commit b723dee23b
4 changed files with 29 additions and 1 deletions

View file

@ -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]

View file

@ -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" />

View file

@ -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;

View file

@ -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 {