blob: 5cd7e807b0880e385db4bcf8c0997cb06f3646ad [file] [log] [blame] [edit]
//! Central checker data structure.
use partial_ref::{part, PartialRefTarget};
use crate::{
clauses::Clauses, hash::ClauseHasher, processing::Processing, rup::RupCheck,
state::CheckerState, tmp::TmpData, variables::Variables,
};
/// Part declarations for the [`Context`] struct.
pub mod parts {
use super::*;
part!(pub CheckerStateP: CheckerState);
part!(pub ClauseHasherP: ClauseHasher);
part!(pub ClausesP: Clauses);
part!(pub ProcessingP<'a>: Processing<'a>);
part!(pub RupCheckP: RupCheck);
part!(pub TmpDataP: TmpData);
part!(pub VariablesP: Variables);
}
use parts::*;
/// Central checker data structure.
///
/// This struct contains all data kept by the checker. Most functions operating on multiple fields
/// of the context use partial references provided by the `partial_ref` crate. This documents the
/// data dependencies and makes the borrow checker happy without the overhead of passing individual
/// references.
#[derive(PartialRefTarget, Default)]
pub struct Context<'a> {
#[part(CheckerStateP)]
pub checker_state: CheckerState,
#[part(ClauseHasherP)]
pub clause_hasher: ClauseHasher,
#[part(ClausesP)]
pub clauses: Clauses,
#[part(ProcessingP<'a>)]
pub processing: Processing<'a>,
#[part(RupCheckP)]
pub rup_check: RupCheck,
#[part(TmpDataP)]
pub tmp_data: TmpData,
#[part(VariablesP)]
pub variables: Variables,
}