1
0
Fork 0
mirror of https://codeberg.org/icewind/bitbuffer.git synced 2026-06-03 16:44:06 +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] [dependencies]
num-traits = "0.2" num-traits = "0.2"
bitstream_reader_derive = { version = "0.4", path = "bitstream_reader_derive" } 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 } packed_simd = { version = "0.3", features = ["into_bits"], optional = true }
[dev-dependencies] [dev-dependencies]
@ -21,5 +22,6 @@ maplit = "1.0.1"
[features] [features]
unchecked_utf8 = [] unchecked_utf8 = []
simd = ["packed_simd"] simd = ["packed_simd"]
skip = ["bitstream_reader_skip"]
[workspace] [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/examples" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/bitstream_reader_derive/tests" isTestSource="true" /> <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_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_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" /> <excludeFolder url="file://$MODULE_DIR$/target" />
</content> </content>
<orderEntry type="inheritedJdk" /> <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 bitstream_reader_derive::{BitRead, BitReadSized, BitSize, BitSizeSized};
pub use buffer::BitBuffer; pub use buffer::BitBuffer;
pub use endianness::*; 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; pub use stream::BitStream;
mod buffer; mod buffer;

View file

@ -95,6 +95,22 @@ pub trait BitSize {
fn bit_size() -> usize; 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 { macro_rules! impl_read_int {
($type:ty, $len:expr) => { ($type:ty, $len:expr) => {
impl<E: Endianness> BitRead<E> for $type { impl<E: Endianness> BitRead<E> for $type {