use crate::Primitives;
pub trait CarryChain<P: Primitives> {
fn chain_length(&self) -> P::NonNegativeInteger;
fn generate_mask(&self) -> P::NonNegativeInteger;
fn propagate_mask(&self) -> P::NonNegativeInteger;
fn kill_mask(&self) -> P::NonNegativeInteger;
}
pub trait CarryEvent<P: Primitives> {
fn event_kind(&self) -> P::NonNegativeInteger;
fn site_position(&self) -> P::NonNegativeInteger;
}
pub trait CarryProfile<P: Primitives> {
fn carry_count(&self) -> P::NonNegativeInteger;
fn max_propagation_length(&self) -> P::NonNegativeInteger;
type CarryChain: CarryChain<P>;
fn profile_chain(&self) -> &Self::CarryChain;
}
pub trait EncodingConfiguration<P: Primitives> {
fn symbol_set_size(&self) -> P::PositiveInteger;
fn quantization_bits(&self) -> P::PositiveInteger;
type TermExpression: crate::kernel::schema::TermExpression<P>;
fn encoding_map(&self) -> &Self::TermExpression;
}
pub trait EncodingQuality<P: Primitives> {
fn mean_delta(&self) -> P::Decimal;
fn discrimination_ratio(&self) -> P::Decimal;
fn is_optimal_encoding(&self) -> P::Boolean;
}