use std::collections::HashSet;
use std::hash::Hash;
use crate::delegate::filter::AbstractFilter;
use crate::logger::AbstractProcessLogger;
use crate::manager::handler::AbstractProcessHandler;
use crate::manager::verdict::AbstractGlobalVerdict;
pub trait AbstractConfiguration : Sized {
type ProcessContext;
type ProcessParameterization;
type NodeKind : AbstractNodeKind;
type StepKind : AbstractStepKind<Self>;
type Priorities : AbstractPriorities;
type Filter : AbstractFilter<Self>;
type FilterCriterion;
type FilterEliminationKind : std::string::ToString;
type Logger : AbstractProcessLogger<Self>;
type GlobalVerdict : AbstractGlobalVerdict<Self>;
type LocalVerdict;
type ProcessHandler : AbstractProcessHandler<Self>;
}
pub trait AbstractPriorities : Sized + std::string::ToString {}
pub trait AbstractStepKind<Config : AbstractConfiguration> : Sized {
fn get_priority(&self, process_priorities : &Config::Priorities) -> i32;
}
pub trait AbstractNodeKind : Sized + Clone + PartialEq + Eq + Hash {
fn is_included_for_memoization(&self, memoized_node : &Self) -> bool;
}