mod effects;
mod reconcile;
mod resolve;
mod structural;
pub(super) use effects::{OwnedPopulationMutation, PopulationEffects};
pub(super) use resolve::{resolve, stage};
use super::{DatabaseId, MergedRecordSnapshot, VersionResult};
use crate::diskann_index::{
format::DiskANNCanonicalOrigin, DiskANNPopulationState, DiskANNPopulationWitness,
DiskANNQueryRead,
};
use crate::read_control::StorageReadControl;
use uqa_core::{memory::BudgetedVec, DocId};
pub struct DiskANNPopulationOrigin {
pub field: BudgetedVec<u8>,
pub document: DocId,
pub origin: DiskANNCanonicalOrigin,
}
pub struct DiskANNPopulationHeader {
pub field: BudgetedVec<u8>,
pub state: DiskANNPopulationState,
}
pub trait DiskANNPopulationRecordLayout: Send + Sync {
fn origin(
&self,
key: &[u8],
value: &[u8],
control: &StorageReadControl,
) -> VersionResult<DiskANNPopulationOrigin>;
fn origin_prefix(
&self,
field: &[u8],
control: &StorageReadControl,
) -> VersionResult<BudgetedVec<u8>>;
fn origin_header_prefix(
&self,
key: &[u8],
control: &StorageReadControl,
) -> VersionResult<BudgetedVec<u8>>;
fn header_prefix(
&self,
field: &[u8],
control: &StorageReadControl,
) -> VersionResult<BudgetedVec<u8>>;
fn header(
&self,
key: &[u8],
value: &[u8],
control: &StorageReadControl,
) -> VersionResult<DiskANNPopulationHeader>;
fn witness_prefix(
&self,
header: &[u8],
control: &StorageReadControl,
) -> VersionResult<BudgetedVec<u8>>;
fn preview_header(
&self,
key: &[u8],
control: &StorageReadControl,
) -> VersionResult<BudgetedVec<u8>>;
fn witness_key(
&self,
header: &[u8],
document: DocId,
control: &StorageReadControl,
) -> VersionResult<BudgetedVec<u8>>;
fn witness(
&self,
key: &[u8],
value: &[u8],
state: DiskANNPopulationState,
document: DocId,
origin: DiskANNCanonicalOrigin,
control: &StorageReadControl,
) -> VersionResult<DiskANNPopulationWitness>;
fn encode_header(
&self,
key: &[u8],
template: &[u8],
state: DiskANNPopulationState,
control: &StorageReadControl,
) -> VersionResult<BudgetedVec<u8>>;
fn encode_witness(
&self,
key: &[u8],
header_template: &[u8],
witness: DiskANNPopulationWitness,
control: &StorageReadControl,
) -> VersionResult<BudgetedVec<u8>>;
fn with_canonical(
&self,
field: &[u8],
dimensions: u32,
view: &MergedRecordSnapshot,
history: DatabaseId,
control: &StorageReadControl,
visit: &mut dyn FnMut(&dyn DiskANNQueryRead) -> VersionResult<()>,
) -> VersionResult<()>;
}