From 0ad402149e61896e81785b4625a7078b988b1597 Mon Sep 17 00:00:00 2001 From: ice_iix Date: Thu, 30 Dec 2021 15:34:28 -0800 Subject: [PATCH] bit map: allow creating, but not accessing, zero-length bit maps --- protocol/src/types/bit/map.rs | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/protocol/src/types/bit/map.rs b/protocol/src/types/bit/map.rs index 1c7961d..1c743ec 100644 --- a/protocol/src/types/bit/map.rs +++ b/protocol/src/types/bit/map.rs @@ -64,11 +64,20 @@ impl Map { } pub fn from_raw(bits: Vec, size: usize, padded: bool) -> Map { - Map { - length: (bits.len() * 64 + (size - 1)) / size, - bit_size: size, - bits, - padded, + if size == 0 { + Map { + length: 0, + bit_size: size, + bits, + padded, + } + } else { + Map { + length: (bits.len() * 64 + (size - 1)) / size, + bit_size: size, + bits, + padded, + } } } @@ -81,6 +90,7 @@ impl Map { } fn get_bit_offset(&self, i: usize) -> usize { + assert!(self.length != 0); let padding = if self.padded { i / (64 / self.bit_size) * (64 % self.bit_size) } else {