use std::hash::Hash;
use crate::{filter_map::FilterMap, graph::Graph};
use super::{PatternElement, PatternGraph};
pub trait SubgraphAlgorithm<
'a,
NodeWeight,
EdgeWeight,
NRef,
ERef,
N2Ref,
E2Ref,
PatternGraphType,
BaseGraphType,
> where
NRef: Copy + Eq + Hash,
N2Ref: Copy + Eq + Hash,
PatternGraphType: PatternGraph<NodeWeight, EdgeWeight, NodeRef = NRef, EdgeRef = ERef>,
BaseGraphType: Graph<NodeWeight, EdgeWeight, NodeRef = N2Ref, EdgeRef = E2Ref>,
{
fn eval(
pattern_graph: &'a PatternGraphType,
base_graph: &'a BaseGraphType,
) -> Vec<MatchedGraph<'a, NodeWeight, EdgeWeight, PatternGraphType>>;
}
pub type MatchedGraph<'a, N, E, P> =
FilterMap<'a, PatternElement<N>, PatternElement<E>, &'a N, &'a E, P>;