diff --git a/roaring/src/bitmap/container.rs b/roaring/src/bitmap/container.rs index 3ab1e5ad..4017eaab 100644 --- a/roaring/src/bitmap/container.rs +++ b/roaring/src/bitmap/container.rs @@ -17,6 +17,7 @@ pub struct Container { pub store: Store, } +#[derive(Clone)] pub struct Iter<'a> { pub key: u16, inner: store::Iter<'a>, @@ -41,6 +42,7 @@ impl Container { self.store.is_empty() } + #[inline] pub fn insert(&mut self, index: u16) -> bool { if self.store.insert(index) { self.ensure_correct_store(); diff --git a/roaring/src/bitmap/inherent.rs b/roaring/src/bitmap/inherent.rs index 559b7579..b2919b4c 100644 --- a/roaring/src/bitmap/inherent.rs +++ b/roaring/src/bitmap/inherent.rs @@ -48,6 +48,7 @@ impl RoaringBitmap { /// assert_eq!(rb.insert(3), false); /// assert_eq!(rb.contains(3), true); /// ``` + #[inline] pub fn insert(&mut self, value: u32) -> bool { let (key, index) = util::split(value); let container = match self.containers.binary_search_by_key(&key, |c| c.key) { diff --git a/roaring/src/bitmap/iter.rs b/roaring/src/bitmap/iter.rs index 59463a21..f37e5482 100644 --- a/roaring/src/bitmap/iter.rs +++ b/roaring/src/bitmap/iter.rs @@ -9,12 +9,14 @@ use crate::{NonSortedIntegers, RoaringBitmap}; use alloc::vec::Vec; /// An iterator for `RoaringBitmap`. +#[derive(Clone)] pub struct Iter<'a> { inner: iter::Flatten>, size_hint: u64, } /// An iterator for `RoaringBitmap`. +#[derive(Clone)] pub struct IntoIter { inner: iter::Flatten>, size_hint: u64, diff --git a/roaring/src/bitmap/store/array_store/mod.rs b/roaring/src/bitmap/store/array_store/mod.rs index 883db31f..e252caba 100644 --- a/roaring/src/bitmap/store/array_store/mod.rs +++ b/roaring/src/bitmap/store/array_store/mod.rs @@ -47,6 +47,7 @@ impl ArrayStore { } } + #[inline] pub fn insert(&mut self, index: u16) -> bool { self.vec.binary_search(&index).map_err(|loc| self.vec.insert(loc, index)).is_err() } diff --git a/roaring/src/bitmap/store/bitmap_store.rs b/roaring/src/bitmap/store/bitmap_store.rs index f349a2aa..7a181e3f 100644 --- a/roaring/src/bitmap/store/bitmap_store.rs +++ b/roaring/src/bitmap/store/bitmap_store.rs @@ -52,6 +52,7 @@ impl BitmapStore { } } + #[inline] pub fn insert(&mut self, index: u16) -> bool { let (key, bit) = (key(index), bit(index)); let old_w = self.bits[key]; @@ -403,6 +404,7 @@ impl Display for Error { #[cfg(feature = "std")] impl std::error::Error for Error {} +#[derive(Clone)] pub struct BitmapIter> { key: usize, value: u64, diff --git a/roaring/src/bitmap/store/mod.rs b/roaring/src/bitmap/store/mod.rs index bb0d5822..bc46c532 100644 --- a/roaring/src/bitmap/store/mod.rs +++ b/roaring/src/bitmap/store/mod.rs @@ -25,6 +25,7 @@ pub enum Store { Bitmap(BitmapStore), } +#[derive(Clone)] pub enum Iter<'a> { Array(slice::Iter<'a, u16>), Vec(vec::IntoIter), @@ -49,6 +50,7 @@ impl Store { Store::Bitmap(BitmapStore::full()) } + #[inline] pub fn insert(&mut self, index: u16) -> bool { match self { Array(vec) => vec.insert(index),