use crate::slg::TruncatingInferenceTable;
use crate::table::AnswerIndex;
use crate::{ExClause, TableIndex, TimeStamp};
use std::fmt::{Debug, Error, Formatter};
use chalk_ir::interner::Interner;
use chalk_ir::{Canonical, UniverseMap};
#[derive(Debug)]
pub(crate) struct CanonicalStrand<I: Interner> {
pub(super) canonical_ex_clause: Canonical<ExClause<I>>,
pub(crate) selected_subgoal: Option<SelectedSubgoal>,
pub(crate) last_pursued_time: TimeStamp,
}
pub(crate) struct Strand<I: Interner> {
pub(super) infer: TruncatingInferenceTable<I>,
pub(super) ex_clause: ExClause<I>,
pub(crate) selected_subgoal: Option<SelectedSubgoal>,
pub(crate) last_pursued_time: TimeStamp,
}
#[derive(Clone, Debug)]
pub(crate) struct SelectedSubgoal {
pub(crate) subgoal_index: usize,
pub(super) subgoal_table: TableIndex,
pub(crate) answer_index: AnswerIndex,
pub(crate) universe_map: UniverseMap,
}
impl<I: Interner> Debug for Strand<I> {
fn fmt(&self, fmt: &mut Formatter<'_>) -> Result<(), Error> {
fmt.debug_struct("Strand")
.field("ex_clause", &self.ex_clause)
.field("selected_subgoal", &self.selected_subgoal)
.finish()
}
}