1const MAX_BIN_WIDTH: u16 = u16::MAX;
4
5#[derive(Clone, Copy, Debug, Eq, PartialEq)]
7#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
8pub struct Bin {
9 pub(crate) k: i16,
11
12 pub(crate) n: u16,
14}
15
16impl Bin {
17 pub fn key(&self) -> i32 {
19 self.k as i32
20 }
21
22 pub fn count(&self) -> u32 {
24 self.n as u32
25 }
26
27 #[allow(clippy::cast_possible_truncation)]
28 pub(crate) fn increment(&mut self, n: u64) -> u64 {
29 let next = n + u64::from(self.n);
30 if next > u64::from(MAX_BIN_WIDTH) {
31 self.n = MAX_BIN_WIDTH;
32 return next - u64::from(MAX_BIN_WIDTH);
33 }
34
35 self.n = next as u16;
38 0
39 }
40}