//! 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, }