mirror of https://codeberg.org/topola/topola.git
router: TraceStepper is not a real stepper
Contributes towards solving #82 properly later.
This commit is contained in:
parent
74ef5e356f
commit
04ab1ce69b
|
|
@ -19,7 +19,6 @@ use crate::{
|
|||
},
|
||||
graph::{GetPetgraphIndex, MakeRef},
|
||||
layout::Layout,
|
||||
stepper::{Step, StepBack},
|
||||
};
|
||||
|
||||
use super::{
|
||||
|
|
|
|||
|
|
@ -1,21 +1,17 @@
|
|||
use contracts::debug_ensures;
|
||||
use petgraph::data::DataMap;
|
||||
|
||||
use crate::{
|
||||
drawing::{
|
||||
use crate::drawing::{
|
||||
bend::LooseBendIndex,
|
||||
dot::FixedDotIndex,
|
||||
graph::PrimitiveIndex,
|
||||
head::{BareHead, CaneHead, Head},
|
||||
rules::AccessRules,
|
||||
},
|
||||
stepper::{Step, StepBack},
|
||||
};
|
||||
|
||||
use super::{
|
||||
draw::Draw,
|
||||
navmesh::{BinavvertexNodeIndex, Navmesh, NavvertexIndex},
|
||||
tracer::TracerStatus,
|
||||
tracer::{Tracer, TracerException},
|
||||
};
|
||||
|
||||
|
|
@ -104,16 +100,14 @@ pub struct TraceStepContext<'a: 'b, 'b, R: AccessRules> {
|
|||
pub width: f64,
|
||||
}
|
||||
|
||||
impl<'a, 'b, R: AccessRules> Step<TraceStepContext<'a, 'b, R>, TracerStatus, TracerException, ()>
|
||||
for TraceStepper
|
||||
{
|
||||
impl TraceStepper {
|
||||
#[debug_ensures(ret.is_ok() -> matches!(self.head, Head::Cane(..)))]
|
||||
#[debug_ensures(ret.is_ok() -> self.path.len() == old(self.path.len() + 1))]
|
||||
#[debug_ensures(ret.is_err() -> self.path.len() == old(self.path.len()))]
|
||||
fn step(
|
||||
pub fn step<'a, 'b, R: AccessRules>(
|
||||
&mut self,
|
||||
input: &mut TraceStepContext<'a, 'b, R>,
|
||||
) -> Result<TracerStatus, TracerException> {
|
||||
) -> Result<(), TracerException> {
|
||||
self.head = self
|
||||
.wrap(
|
||||
input.tracer,
|
||||
|
|
@ -125,13 +119,14 @@ impl<'a, 'b, R: AccessRules> Step<TraceStepContext<'a, 'b, R>, TracerStatus, Tra
|
|||
.into();
|
||||
self.path.push(input.to);
|
||||
|
||||
Ok(TracerStatus::Running)
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
impl<'a, R: AccessRules> StepBack<Tracer<'a, R>, TracerStatus, TracerException> for TraceStepper {
|
||||
#[debug_ensures(self.path.len() == old(self.path.len() - 1))]
|
||||
fn step_back(&mut self, tracer: &mut Tracer<'a, R>) -> Result<TracerStatus, TracerException> {
|
||||
pub fn step_back<'a, R: AccessRules>(
|
||||
&mut self,
|
||||
tracer: &mut Tracer<'a, R>,
|
||||
) -> Result<(), TracerException> {
|
||||
if let Head::Cane(head) = self.head {
|
||||
self.head = Draw::new(tracer.layout).undo_cane(head).unwrap();
|
||||
} else {
|
||||
|
|
@ -139,6 +134,6 @@ impl<'a, R: AccessRules> StepBack<Tracer<'a, R>, TracerStatus, TracerException>
|
|||
}
|
||||
|
||||
self.path.pop();
|
||||
Ok(TracerStatus::Running)
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ use thiserror::Error;
|
|||
use crate::{
|
||||
drawing::{band::BandTermsegIndex, dot::FixedDotIndex, rules::AccessRules},
|
||||
layout::Layout,
|
||||
stepper::{Step, StepBack},
|
||||
};
|
||||
|
||||
use super::{
|
||||
|
|
@ -21,21 +20,6 @@ pub enum TracerException {
|
|||
CannotWrap,
|
||||
}
|
||||
|
||||
pub enum TracerStatus {
|
||||
Running,
|
||||
Finished,
|
||||
}
|
||||
|
||||
impl TryInto<()> for TracerStatus {
|
||||
type Error = ();
|
||||
fn try_into(self) -> Result<(), ()> {
|
||||
match self {
|
||||
TracerStatus::Running => Err(()),
|
||||
TracerStatus::Finished => Ok(()),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct Tracer<'a, R: AccessRules> {
|
||||
pub layout: &'a mut Layout<R>,
|
||||
|
|
|
|||
Loading…
Reference in New Issue