public MeetOverPaths(ControlFlowGraph controlFlowGraph, ITransmissionFunction <TacNode> transmissionFunction, ICollectionOperator <TacNode> collectionOperator, HashSet <TacNode> initSet, bool isForwardDirection = true ) { TransmissionFunction = transmissionFunction; ControlFlowGraph = controlFlowGraph; CollectionOperator = collectionOperator; IsForwardDirection = isForwardDirection; InitSet = initSet; InOut = new InOutContainer <TacNode>(); }
//protected abstract HashSet<TacNode> CollectionOperator(HashSet<TacNode> x, HashSet<TacNode> y); protected IterationAlgorithm( ControlFlowGraph cfg, ITransmissionFunction <T> func, ICollectionOperator <T> collectionOperator, bool forwardDirection = true) { controlFlowGraph = cfg; TransmissionFunc = func.Calculate; CollectionOperator = collectionOperator.Collect; isForwardDirection = forwardDirection; if (forwardDirection) { GetPredVertices = x => controlFlowGraph.InEdges(x).Select(e => e.Source); } else { GetPredVertices = x => controlFlowGraph.OutEdges(x).Select(e => e.Target); } }