1
0
Fork 0
mirror of https://codeberg.org/icewind/bitbuffer.git synced 2026-06-03 16:44:06 +02:00

make usable with rust stable

This commit is contained in:
Robin Appelman 2019-02-22 22:40:45 +01:00
commit b8d6e4fd7a
2 changed files with 47 additions and 45 deletions

View file

@ -1,9 +1,9 @@
#![feature(test)]
#![warn(missing_docs)] #![warn(missing_docs)]
//! Tools for reading integers of arbitrary bit length and non byte-aligned integers and other data types //! Tools for reading integers of arbitrary bit length and non byte-aligned integers and other data types
extern crate test; // for bench on nightly
//extern crate test;
pub use endianness::{BigEndian, LittleEndian}; pub use endianness::{BigEndian, LittleEndian};
use endianness::Endianness; use endianness::Endianness;
@ -95,7 +95,7 @@ pub type Result<T> = std::result::Result<T, ReadError>;
/// 0b1001_1001, 0b1001_1001, 0b1001_1001, 0b1110_0111, /// 0b1001_1001, 0b1001_1001, 0b1001_1001, 0b1110_0111,
/// 0, 0, 0, 0, 0, 0, 0, 0 /// 0, 0, 0, 0, 0, 0, 0, 0
/// ]; /// ];
/// let buffer = BitBuffer::from_padded_slice(bytes, LittleEndian); /// let buffer = BitBuffer::from_padded_slice(bytes, 8, LittleEndian);
/// ``` /// ```
pub struct BitBuffer<'a, E, S> pub struct BitBuffer<'a, E, S>
where where

View file

@ -1,6 +1,7 @@
use std::fs;
use super::*; use super::*;
use test::Bencher; // for bench on nightly
//use std::fs;
//use test::Bencher;
const BYTES: &'static [u8] = &[ const BYTES: &'static [u8] = &[
0b1011_0101, 0b1011_0101,
@ -222,43 +223,44 @@ fn read_f64_le() {
assert_eq!(buffer.read_float::<f64>(6).unwrap(), 135447455835963910000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0); assert_eq!(buffer.read_float::<f64>(6).unwrap(), 135447455835963910000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0);
} }
fn read_perf<P: IsPadded>(buffer: BitBuffer<LittleEndian, P>) -> u16 { // for bench on nightly
let size = 5; //fn read_perf<P: IsPadded>(buffer: BitBuffer<LittleEndian, P>) -> u16 {
let mut pos = 0; // let size = 5;
let len = buffer.bit_len(); // let mut pos = 0;
let mut result: u16 = 0; // let len = buffer.bit_len();
loop { // let mut result: u16 = 0;
if pos + size > len { // loop {
return result; // if pos + size > len {
} // return result;
let data = buffer.read::<u16>(pos, size).unwrap(); // }
result = result.wrapping_add(data); // let data = buffer.read::<u16>(pos, size).unwrap();
pos += size; // result = result.wrapping_add(data);
} // pos += size;
} // }
//}
#[bench] //
fn perf_padded(b: &mut Bencher) { //#[bench]
let mut file = fs::read("/bulk/tmp/test.dem").expect("Unable to read file"); //fn perf_padded(b: &mut Bencher) {
let len = file.len(); // let mut file = fs::read("/bulk/tmp/test.dem").expect("Unable to read file");
file.extend_from_slice(&[0, 0, 0, 0, 0, 0, 0, 0]); // let len = file.len();
let bytes = file.as_slice(); // file.extend_from_slice(&[0, 0, 0, 0, 0, 0, 0, 0]);
b.iter(|| { // let bytes = file.as_slice();
let buffer = BitBuffer::from_padded_slice(&bytes, len, LittleEndian); // b.iter(|| {
let data = read_perf(buffer); // let buffer = BitBuffer::from_padded_slice(&bytes, len, LittleEndian);
assert_eq!(data, 43943); // let data = read_perf(buffer);
test::black_box(data); // assert_eq!(data, 43943);
}); // test::black_box(data);
} // });
//}
#[bench] //
fn perf_non_padded(b: &mut Bencher) { //#[bench]
let file = fs::read("/bulk/tmp/test.dem").expect("Unable to read file"); //fn perf_non_padded(b: &mut Bencher) {
let bytes = file.as_slice(); // let file = fs::read("/bulk/tmp/test.dem").expect("Unable to read file");
b.iter(|| { // let bytes = file.as_slice();
let buffer = BitBuffer::new(&bytes, LittleEndian); // b.iter(|| {
let data = read_perf(buffer); // let buffer = BitBuffer::new(&bytes, LittleEndian);
assert_eq!(data, 43943); // let data = read_perf(buffer);
test::black_box(data); // assert_eq!(data, 43943);
}); // test::black_box(data);
} // });
//}