use super::{ReasonContext, ReasonContextCore, ReasonContextCoreOut, ReasonContextWithLinks};
use crate::{
__delegate_from_core,
control::Reasoner,
entity::{Concept, RCTask, Task, TaskLink},
global::{ClockTime, Float},
parameters::Parameters,
storage::Memory,
};
use navm::output::Output;
use std::ops::{Deref, DerefMut};
#[derive(Debug)]
pub struct ReasonContextTransform<'this> {
pub(crate) core: ReasonContextCore<'this>,
pub(crate) outs: ReasonContextCoreOut,
current_task_link: TaskLink,
}
impl<'this> ReasonContextTransform<'this> {
pub fn new<'r: 'this>(
reasoner: &'r mut Reasoner,
current_concept: Concept,
current_task_link: TaskLink,
) -> Self {
let core = ReasonContextCore::new(reasoner, current_concept);
let outs = ReasonContextCoreOut::new();
Self {
core,
outs,
current_task_link,
}
}
}
impl ReasonContext for ReasonContextTransform<'_> {
__delegate_from_core! {}
fn current_task<'r, 's: 'r>(&'s self) -> impl Deref<Target = RCTask> + 'r {
self.current_task_link.target_rc()
}
fn current_task_mut<'r, 's: 'r>(&'s mut self) -> impl DerefMut<Target = RCTask> + 'r {
self.current_task_link.target_rc_mut()
}
fn absorbed_by_reasoner(mut self) {
let _ = self
.core .current_concept_mut()
.put_task_link_back(self.current_task_link);
self.core.absorbed_by_reasoner(self.outs);
}
}
impl ReasonContextWithLinks for ReasonContextTransform<'_> {
fn current_belief(&self) -> Option<&crate::entity::JudgementV1> {
None
}
fn belief_link_for_budget_inference(&self) -> Option<&crate::entity::TermLink> {
None
}
fn belief_link_for_budget_inference_mut(&mut self) -> Option<&mut crate::entity::TermLink> {
None
}
fn current_task_link(&self) -> &TaskLink {
&self.current_task_link
}
fn current_task_link_mut(&mut self) -> &mut TaskLink {
&mut self.current_task_link
}
}