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 OrderEdge *getInverseOrderEdge(OrderEdge *edge);
27 Order *getOrder() {return order;}
28 bool isTherePath(OrderNode *source, OrderNode *destination);
29 bool isTherePathVisit(HashsetOrderNode &visited, OrderNode *current, OrderNode *destination);
30 SetIteratorOrderNode *getNodes() {return nodes.iterator();}
31 SetIteratorOrderEdge *getEdges() {return edges.iterator();}
32 void DFS(Vector<OrderNode *> *finishNodes);
33 void DFSMust(Vector<OrderNode *> *finishNodes);
34 void computeStronglyConnectedComponentGraph();
35 void resetNodeInfoStatusSCC();
36 void completePartialOrderGraph();
37 void removeNode(OrderNode *node) {nodes.remove(node);}
41 HashsetOrderNode nodes;
42 Vector<OrderNode *> allNodes;
43 HashsetOrderEdge edges;
45 void DFSNodeVisit(OrderNode *node, Vector<OrderNode *> *finishNodes, bool isReverse, bool mustvisit, uint sccNum);
46 void DFSReverse(Vector<OrderNode *> *finishNodes);
49 OrderGraph *buildOrderGraph(Order *order);
50 OrderGraph *buildMustOrderGraph(Order *order);
51 #endif/* ORDERGRAPH_H */