From c40e2b263ea168c0eba745eb155f2807d0e425a7 Mon Sep 17 00:00:00 2001 From: TonalidadeHidrica <47710717+TonalidadeHidrica@users.noreply.github.com> Date: Mon, 13 Jun 2022 11:02:49 +0900 Subject: [PATCH] Add len and is_empty to three containers --- src/fenwicktree.rs | 10 ++++++++++ src/lazysegtree.rs | 12 ++++++++++++ src/segtree.rs | 12 ++++++++++++ 3 files changed, 34 insertions(+) diff --git a/src/fenwicktree.rs b/src/fenwicktree.rs index 9256ff0..a44b451 100644 --- a/src/fenwicktree.rs +++ b/src/fenwicktree.rs @@ -40,6 +40,14 @@ impl> FenwickTree { { self.accum(r) - self.accum(l) } + /// Returns the number of elements. + pub fn len(&self) -> usize { + self.n + } + /// Returns if the container is empty. + pub fn is_empty(&self) -> bool { + self.len() == 0 + } } #[cfg(test)] @@ -53,6 +61,8 @@ mod tests { for i in 0..5 { bit.add(i, i as i64 + 1); } + assert_eq!(bit.len(), 5); + assert!(!bit.is_empty()); assert_eq!(bit.sum(0, 5), 15); assert_eq!(bit.sum(0, 4), 10); assert_eq!(bit.sum(1, 3), 5); diff --git a/src/lazysegtree.rs b/src/lazysegtree.rs index 47020a8..dfe265c 100644 --- a/src/lazysegtree.rs +++ b/src/lazysegtree.rs @@ -254,6 +254,15 @@ impl LazySegtree { } {} 0 } + + /// Returns the number of elements. + pub fn len(&self) -> usize { + self.n + } + /// Returns if the container is empty. + pub fn is_empty(&self) -> bool { + self.len() == 0 + } } pub struct LazySegtree @@ -341,6 +350,9 @@ mod tests { let mut segtree: LazySegtree = base.clone().into(); check_segtree(&base, &mut segtree); + assert_eq!(segtree.len(), n); + assert!(!segtree.is_empty()); + let mut segtree = LazySegtree::::new(n); let mut internal = vec![i32::min_value(); n]; for i in 0..n { diff --git a/src/segtree.rs b/src/segtree.rs index b543aa3..f50a81f 100644 --- a/src/segtree.rs +++ b/src/segtree.rs @@ -213,6 +213,15 @@ impl Segtree { fn update(&mut self, k: usize) { self.d[k] = M::binary_operation(&self.d[2 * k], &self.d[2 * k + 1]); } + + /// Returns the number of elements. + pub fn len(&self) -> usize { + self.n + } + /// Returns if the container is empty. + pub fn is_empty(&self) -> bool { + self.len() == 0 + } } // Maybe we can use this someday @@ -248,6 +257,9 @@ mod tests { let segtree: Segtree> = base.clone().into(); check_segtree(&base, &segtree); + assert_eq!(segtree.len(), n); + assert!(!segtree.is_empty()); + let mut segtree = Segtree::>::new(n); let mut internal = vec![i32::min_value(); n]; for i in 0..n {