use super::states::States;
use crate::traversal::{
Traverser,
over::{Over, OverData},
};
use core::marker::PhantomData;
pub struct PostOrder<O = OverData>
where
O: Over,
{
pub(super) states: States,
phantom: PhantomData<O>,
}
impl Default for PostOrder {
fn default() -> Self {
Self::new()
}
}
impl<O> Traverser<O> for PostOrder<O>
where
O: Over,
{
type IntoOver<O2>
= PostOrder<O2>
where
O2: Over;
fn new() -> Self {
Self {
states: Default::default(),
phantom: PhantomData,
}
}
fn transform_into<O2: Over>(self) -> Self::IntoOver<O2> {
PostOrder {
states: self.states,
phantom: PhantomData,
}
}
}