use crate::{
api::bitmap::conf::{BitOp, BitfieldOperation, BitfieldValue},
error::Result,
traits::DbLike,
};
pub trait Bitmap: DbLike {
fn setbit<K: AsRef<[u8]>>(&self, key: K, offset: u64, bit: u8) -> Result<u8>;
fn getbit<K: AsRef<[u8]>>(&self, key: K, offset: u64) -> Result<u8>;
fn bitcount<K: AsRef<[u8]>>(&self, key: K, start: Option<i64>, end: Option<i64>) -> Result<u64>;
fn bitcount_opts<K: AsRef<[u8]>>(
&self,
key: K,
start: Option<i64>,
end: Option<i64>,
is_bit_index: bool,
) -> Result<u64>;
fn bitpos<K: AsRef<[u8]>>(
&self,
key: K,
bit: u8,
start: Option<i64>,
end: Option<i64>,
) -> Result<i64>;
fn bitpos_opts<K: AsRef<[u8]>>(
&self,
key: K,
bit: u8,
start: Option<i64>,
end: Option<i64>,
stop_given: bool,
is_bit_index: bool,
) -> Result<i64>;
fn bitop<K: AsRef<[u8]>, S: AsRef<[u8]>>(
&self,
op: BitOp,
dest_key: K,
src_keys: &[S],
) -> Result<usize>;
fn bitfield<K: AsRef<[u8]>>(
&self,
key: K,
ops: &[BitfieldOperation],
) -> Result<Vec<Option<BitfieldValue>>>;
fn bitfield_read_only<K: AsRef<[u8]>>(
&self,
key: K,
ops: &[BitfieldOperation],
) -> Result<Vec<Option<BitfieldValue>>>;
fn exec_bitfield<K: AsRef<[u8]>>(
&self,
key: K,
ops: &[BitfieldOperation],
read_only: bool,
) -> Result<Vec<Option<BitfieldValue>>>;
fn get_bitmap_bytes<K: AsRef<[u8]>>(&self, key: K) -> Result<Option<Vec<u8>>>;
fn del_bitmap<K: AsRef<[u8]>>(&self, key: K) -> Result<bool>;
}