use crate::clubcard::ClubcardIndexEntry;
use crate::equation::Equation;
pub trait AsQuery<const W: usize> {
fn as_query(&self, m: usize) -> Equation<W>;
fn block(&self) -> &[u8];
fn discriminant(&self) -> &[u8];
#[doc(hidden)]
fn as_approx_query(&self, meta: &ClubcardIndexEntry) -> Equation<W> {
let mut approx_eq = self.as_query(meta.approx_filter_m);
approx_eq.s += meta.approx_filter_offset;
approx_eq
}
#[doc(hidden)]
fn as_exact_query(&self, meta: &ClubcardIndexEntry) -> Equation<W> {
let mut exact_eq = self.as_query(meta.exact_filter_m);
exact_eq.s += meta.exact_filter_offset;
exact_eq
}
}
pub trait Filterable<const W: usize>: AsQuery<W> {
fn included(&self) -> bool {
false
}
}
pub trait Queryable<const W: usize>: AsQuery<W> {
type UniverseMetadata;
type PartitionMetadata;
fn in_universe(&self, meta: &Self::UniverseMetadata) -> bool;
}