use crate::{BitVecValue, BitVecValueRef, WidthInt, Word};
pub trait ArrayOps {
fn index_width(&self) -> WidthInt;
fn data_width(&self) -> WidthInt;
#[inline]
fn words_per_element(&self) -> usize {
self.data_width().div_ceil(Word::BITS) as usize
}
#[inline]
fn num_elements(&self) -> usize {
1usize << self.index_width()
}
fn select<'a>(&self, index: impl Into<BitVecValueRef<'a>>) -> BitVecValue;
}
pub trait ArrayMutOps: ArrayOps {
fn store<'a, 'b>(
&mut self,
index: impl Into<BitVecValueRef<'a>>,
data: impl Into<BitVecValueRef<'b>>,
);
fn clear(&mut self);
}