5 * Created on August 7, 2017, 3:42 PM
10 #include "classlist.h"
16 OrderGraph(Order *order);
18 void addOrderConstraintToOrderGraph(BooleanOrder *bOrder);
19 void addMustOrderConstraintToOrderGraph(BooleanOrder *bOrder);
20 OrderNode *getOrderNodeFromOrderGraph(uint64_t id);
21 OrderEdge *getOrderEdgeFromOrderGraph(OrderNode *begin, OrderNode *end);
22 OrderNode *lookupOrderNodeFromOrderGraph(uint64_t id);
23 OrderEdge *lookupOrderEdgeFromOrderGraph(OrderNode *begin, OrderNode *end);
24 void addOrderEdge(OrderNode *node1, OrderNode *node2, BooleanOrder *constr);
25 void addMustOrderEdge(OrderNode *node1, OrderNode *node2, BooleanOrder *constr);
26 void addEdge(uint64_t first, uint64_t second);
27 OrderEdge *getInverseOrderEdge(OrderEdge *edge);
28 Order *getOrder() {return order;}
29 bool isTherePath(OrderNode *source, OrderNode *destination);
30 bool isTherePathVisit(HashsetOrderNode &visited, OrderNode *current, OrderNode *destination);
31 SetIteratorOrderNode *getNodes() {return nodes.iterator();}
32 SetIteratorOrderEdge *getEdges() {return edges.iterator();}
33 void DFS(Vector<OrderNode *> *finishNodes);
34 void DFSMust(Vector<OrderNode *> *finishNodes);
35 void computeStronglyConnectedComponentGraph();
36 void resetNodeInfoStatusSCC();
37 void completePartialOrderGraph();
41 HashsetOrderNode nodes;
42 HashsetOrderEdge edges;
44 void DFSNodeVisit(OrderNode *node, Vector<OrderNode *> *finishNodes, bool isReverse, bool mustvisit, uint sccNum);
45 void DFSReverse(Vector<OrderNode *> *finishNodes);
48 OrderGraph *buildOrderGraph(Order *order);
49 OrderGraph *buildMustOrderGraph(Order *order);
50 #endif/* ORDERGRAPH_H */