use crate::{api::sortedint::conf::SortedintRangeSpec, error::Result, traits::DbLike};
pub trait SortedInt: DbLike {
fn si_iter<K: AsRef<[u8]>, F: FnMut(u64) -> bool>(&self, key: K, f: F) -> Result<()>;
fn si_add<K: AsRef<[u8]>>(&self, key: K, ids: &[u64]) -> Result<usize>;
fn si_rem<K: AsRef<[u8]>>(&self, key: K, ids: &[u64]) -> Result<usize>;
fn si_card<K: AsRef<[u8]>>(&self, key: K) -> Result<u64>;
fn si_exists<K: AsRef<[u8]>>(&self, key: K, id: u64) -> Result<bool>;
#[inline]
fn si_ismember<K: AsRef<[u8]>>(&self, key: K, id: u64) -> Result<bool> {
self.si_exists(key, id)
}
fn si_mexist<K: AsRef<[u8]>>(&self, key: K, ids: &[u64]) -> Result<Vec<bool>>;
fn si_members<K: AsRef<[u8]>>(&self, key: K) -> Result<Vec<u64>>;
fn si_range<K: AsRef<[u8]>>(
&self,
key: K,
cursor: u64,
offset: usize,
limit: usize,
reversed: bool,
) -> Result<Vec<u64>>;
#[inline]
fn si_rev_range<K: AsRef<[u8]>>(
&self,
key: K,
cursor: u64,
offset: usize,
limit: usize,
) -> Result<Vec<u64>> {
self.si_range(key, cursor, offset, limit, true)
}
fn si_range_by_value<K: AsRef<[u8]>>(
&self,
key: K,
spec: &SortedintRangeSpec,
) -> Result<Vec<u64>>;
#[inline]
fn si_rev_range_by_value<K: AsRef<[u8]>>(
&self,
key: K,
spec: &SortedintRangeSpec,
) -> Result<Vec<u64>> {
let mut rev_spec = spec.clone();
rev_spec.reversed = true;
self.si_range_by_value(key, &rev_spec)
}
#[inline]
fn si_range_by_score<K: AsRef<[u8]>>(
&self,
key: K,
spec: &SortedintRangeSpec,
) -> Result<Vec<u64>> {
self.si_range_by_value(key, spec)
}
#[inline]
fn si_rev_range_by_score<K: AsRef<[u8]>>(
&self,
key: K,
spec: &SortedintRangeSpec,
) -> Result<Vec<u64>> {
self.si_rev_range_by_value(key, spec)
}
fn si_rem_range_by_value<K: AsRef<[u8]>>(
&self,
key: K,
spec: &SortedintRangeSpec,
) -> Result<usize>;
#[inline]
fn si_rem_range_by_score<K: AsRef<[u8]>>(
&self,
key: K,
spec: &SortedintRangeSpec,
) -> Result<usize> {
self.si_rem_range_by_value(key, spec)
}
fn si_rem_range_by_rank<K: AsRef<[u8]>>(&self, key: K, start: i64, stop: i64) -> Result<usize>;
fn si_rank<K: AsRef<[u8]>>(&self, key: K, id: u64) -> Result<Option<usize>>;
fn si_revrank<K: AsRef<[u8]>>(&self, key: K, id: u64) -> Result<Option<usize>>;
fn si_count<K: AsRef<[u8]>>(&self, key: K, spec: &SortedintRangeSpec) -> Result<usize>;
fn si_clear<K: AsRef<[u8]>>(&self, key: K) -> Result<usize>;
}