33f2b69cab59121f7e0033c0a3d44e2b6ba12d4d
[satune.git] / src / ASTAnalyses / ordergraph.h
1 /*
2  * File:   ordergraph.h
3  * Author: hamed
4  *
5  * Created on August 7, 2017, 3:42 PM
6  */
7
8 #ifndef ORDERGRAPH_H
9 #define ORDERGRAPH_H
10 #include "classlist.h"
11 #include "structs.h"
12 #include "mymemory.h"
13
14 struct OrderGraph {
15         HashSetOrderNode *nodes;
16         HashSetOrderEdge *edges;
17         Order *order;
18 };
19
20 OrderGraph *allocOrderGraph(Order *order);
21 OrderGraph *buildOrderGraph(Order *order);
22 OrderGraph *buildMustOrderGraph(Order *order);
23 void addOrderConstraintToOrderGraph(OrderGraph *graph, BooleanOrder *bOrder);
24 void addMustOrderConstraintToOrderGraph(OrderGraph *graph, BooleanOrder *bOrder);
25 OrderNode *getOrderNodeFromOrderGraph(OrderGraph *graph, uint64_t id);
26 OrderEdge *getOrderEdgeFromOrderGraph(OrderGraph *graph, OrderNode *begin, OrderNode *end);
27 OrderNode *lookupOrderNodeFromOrderGraph(OrderGraph *graph, uint64_t id);
28 OrderEdge *lookupOrderEdgeFromOrderGraph(OrderGraph *graph, OrderNode *begin, OrderNode *end);
29 void addOrderEdge(OrderGraph *graph, OrderNode *node1, OrderNode *node2, BooleanOrder *constr);
30 void addMustOrderEdge(OrderGraph *graph, OrderNode *node1, OrderNode *node2, BooleanOrder *constr);
31 void deleteOrderGraph(OrderGraph *graph);
32 OrderEdge *getInverseOrderEdge(OrderGraph *graph, OrderEdge *edge);
33 #endif/* ORDERGRAPH_H */
34