• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #![no_std]
2 extern crate alloc;
3 
4 pub mod linked_hash_map;
5 pub mod linked_hash_set;
6 pub mod lru_cache;
7 #[cfg(feature = "serde_impl")]
8 pub mod serde;
9 
10 use core::hash::{BuildHasher, Hasher};
11 
12 pub use linked_hash_map::LinkedHashMap;
13 pub use linked_hash_set::LinkedHashSet;
14 pub use lru_cache::LruCache;
15 
16 /// Default hash builder, matches hashbrown's default hasher.
17 ///
18 /// See [`DefaultHasher`] for more details.
19 #[derive(Clone, Copy, Default, Debug)]
20 pub struct DefaultHashBuilder(hashbrown::DefaultHashBuilder);
21 
22 impl BuildHasher for DefaultHashBuilder {
23     type Hasher = DefaultHasher;
24 
25     #[inline]
build_hasher(&self) -> Self::Hasher26     fn build_hasher(&self) -> Self::Hasher {
27         DefaultHasher(self.0.build_hasher())
28     }
29 }
30 
31 /// Default hasher, as selected by hashbrown.
32 #[derive(Clone)]
33 pub struct DefaultHasher(<hashbrown::DefaultHashBuilder as BuildHasher>::Hasher);
34 
35 impl Hasher for DefaultHasher {
36     #[inline]
write(&mut self, bytes: &[u8])37     fn write(&mut self, bytes: &[u8]) {
38         self.0.write(bytes)
39     }
40 
41     #[inline]
write_u8(&mut self, i: u8)42     fn write_u8(&mut self, i: u8) {
43         self.0.write_u8(i)
44     }
45 
46     #[inline]
write_u16(&mut self, i: u16)47     fn write_u16(&mut self, i: u16) {
48         self.0.write_u16(i)
49     }
50 
51     #[inline]
write_u32(&mut self, i: u32)52     fn write_u32(&mut self, i: u32) {
53         self.0.write_u32(i)
54     }
55 
56     #[inline]
write_u64(&mut self, i: u64)57     fn write_u64(&mut self, i: u64) {
58         self.0.write_u64(i)
59     }
60 
61     #[inline]
write_u128(&mut self, i: u128)62     fn write_u128(&mut self, i: u128) {
63         self.0.write_u128(i)
64     }
65 
66     #[inline]
write_usize(&mut self, i: usize)67     fn write_usize(&mut self, i: usize) {
68         self.0.write_usize(i)
69     }
70 
71     #[inline]
finish(&self) -> u6472     fn finish(&self) -> u64 {
73         self.0.finish()
74     }
75 
76     #[inline]
write_i8(&mut self, i: i8)77     fn write_i8(&mut self, i: i8) {
78         self.0.write_i8(i)
79     }
80 
81     #[inline]
write_i16(&mut self, i: i16)82     fn write_i16(&mut self, i: i16) {
83         self.0.write_i16(i)
84     }
85 
86     #[inline]
write_i32(&mut self, i: i32)87     fn write_i32(&mut self, i: i32) {
88         self.0.write_i32(i)
89     }
90 
91     #[inline]
write_i64(&mut self, i: i64)92     fn write_i64(&mut self, i: i64) {
93         self.0.write_i64(i)
94     }
95 
96     #[inline]
write_i128(&mut self, i: i128)97     fn write_i128(&mut self, i: i128) {
98         self.0.write_i128(i)
99     }
100 
101     #[inline]
write_isize(&mut self, i: isize)102     fn write_isize(&mut self, i: isize) {
103         self.0.write_isize(i)
104     }
105 }
106