mirror of
https://codeberg.org/icewind/bitbuffer.git
synced 2026-06-03 16:44:06 +02:00
implement ReadSized for HashMap
This commit is contained in:
parent
ddce420663
commit
ccced2c28e
3 changed files with 27 additions and 1 deletions
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "bitstream_reader"
|
||||
version = "0.3.0"
|
||||
version = "0.3.1"
|
||||
authors = ["Robin Appelman <robin@icewind.nl>"]
|
||||
edition = "2018"
|
||||
description = "Reading bit sequences from a byte slice"
|
||||
|
|
@ -14,4 +14,7 @@ travis-ci = { repository = "icewind1991/bitstream_reader" }
|
|||
num-traits = "0.2"
|
||||
bitstream_reader_derive = { version = "0.3", path = "bitstream_reader_derive" }
|
||||
|
||||
[dev-dependencies]
|
||||
maplit = "1.0.1"
|
||||
|
||||
[workspace]
|
||||
15
src/read.rs
15
src/read.rs
|
|
@ -1,4 +1,6 @@
|
|||
use crate::{BitStream, Endianness, Result};
|
||||
use std::collections::HashMap;
|
||||
use std::hash::Hash;
|
||||
|
||||
/// Trait for types that can be read from a stream without requiring the size to be configured
|
||||
///
|
||||
|
|
@ -269,3 +271,16 @@ impl<E: Endianness, T: BitRead<E>> BitReadSized<E> for Vec<T> {
|
|||
// stream.read_bytes(size)
|
||||
// }
|
||||
//}
|
||||
|
||||
/// Read `K` and `T` `size` times and return as `HashMap<K, T>`
|
||||
impl<E: Endianness, K: BitRead<E> + Eq + Hash, T: BitRead<E>> BitReadSized<E> for HashMap<K, T> {
|
||||
fn read(stream: &mut BitStream<E>, size: usize) -> Result<Self> {
|
||||
let mut map = HashMap::with_capacity(size);
|
||||
for _ in 0..size {
|
||||
let key = stream.read()?;
|
||||
let value = stream.read()?;
|
||||
map.insert(key, value);
|
||||
}
|
||||
Ok(map)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
use bitstream_reader::{BigEndian, BitBuffer, BitRead, BitStream, LittleEndian};
|
||||
use maplit::hashmap;
|
||||
use std::collections::HashMap;
|
||||
|
||||
// for bench on nightly
|
||||
//use std::fs;
|
||||
|
|
@ -270,6 +272,12 @@ fn read_sized_trait() {
|
|||
stream.set_pos(0).unwrap();
|
||||
let vec: Vec<u8> = stream.read_sized(3).unwrap();
|
||||
assert_eq!(vec![0b1011_0101, 0b0110_1010, 0b1010_1100], vec);
|
||||
stream.set_pos(0).unwrap();
|
||||
let result: HashMap<u8, u8> = stream.read_sized(2).unwrap();
|
||||
assert_eq!(
|
||||
hashmap!(0b1011_0101 => 0b0110_1010, 0b1010_1100 => 0b1001_1001),
|
||||
result
|
||||
);
|
||||
}
|
||||
|
||||
#[derive(BitRead, PartialEq, Debug)]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue