1 #include "ordergraph.h"
6 OrderGraph* allocOrderGraph() {
7 OrderGraph* This = (OrderGraph*) ourmalloc(sizeof(OrderGraph));
8 This->nodes = allocHashSetOrderNode(HT_INITIAL_CAPACITY, HT_DEFAULT_FACTOR);
9 initDefVectorOrderNode(&This->scc);
13 void addOrderEdge(OrderGraph* graph, OrderNode* node1, OrderNode* node2, Boolean* constr) {
14 switch(constr->polarity){
17 OrderEdge* _1to2 = getOrderEdgeFromOrderGraph(graph, node1, node2);
18 addNewOutgoingEdge(node1, _1to2);
19 addNewIncomingEdge(node2, _1to2);
20 if(constr->polarity == P_TRUE)
24 OrderEdge* _2to1 = getOrderEdgeFromOrderGraph(graph, node2, node1);
25 addNewOutgoingEdge(node2, _2to1);
26 addNewIncomingEdge(node1, _2to1);
35 OrderNode* getOrderNodeFromOrderGraph(OrderGraph* graph, uint64_t id) {
36 OrderNode* node = allocOrderNode(id);
37 OrderNode* tmp = getHashSetOrderNode(graph->nodes, node);
39 deleteOrderNode(node);
42 addHashSetOrderNode(graph->nodes, node);
47 OrderEdge* getOrderEdgeFromOrderGraph(OrderGraph* graph, OrderNode* begin, OrderNode* end) {
48 OrderEdge* edge = allocOrderEdge(begin, end);
49 OrderEdge* tmp = getHashSetOrderEdge(graph->edges, edge);
51 deleteOrderEdge(edge);
54 addHashSetOrderEdge(graph->edges, edge);
59 void addOrderConstraintToOrderGraph(OrderGraph* graph, Boolean* constr) {
60 BooleanOrder* bOrder = (BooleanOrder*) constr;
61 OrderNode* from = getOrderNodeFromOrderGraph(graph, bOrder->first);
62 OrderNode* to = getOrderNodeFromOrderGraph(graph, bOrder->second);
63 addOrderEdge(graph, from, to, constr);
66 void deleteOrderGraph(OrderGraph* graph){
67 HSIteratorOrderNode* iterator = iteratorOrderNode(graph->nodes);
68 while(hasNextOrderNode(iterator)){
69 OrderNode* node = nextOrderNode(iterator);
70 deleteOrderNode(node);
72 deleteIterOrderNode(iterator);
74 HSIteratorOrderEdge* eiterator = iteratorOrderEdge(graph->edges);
75 while(hasNextOrderEdge(eiterator)){
76 OrderEdge* edge = nextOrderEdge(eiterator);
77 deleteOrderEdge(edge);
79 deleteIterOrderEdge(eiterator);