1 #include "ordergraph.h"
6 OrderGraph* allocOrderGraph(){
7 OrderGraph* This = (OrderGraph*) ourmalloc(sizeof(OrderGraph));
8 This->nodes = allocHashSetOrderNode(HT_INITIAL_CAPACITY, HT_DEFAULT_FACTOR);
12 void addOrderEdge(OrderGraph* graph, OrderNode* node1, OrderNode* node2, Boolean* constr){
13 switch(constr->polarity){
16 OrderEdge* _1to2 = getOrderEdgeFromOrderGraph(graph, constr, node1, node2);
17 addNewOutgoingEdge(node1, _1to2);
18 addNewIncomingEdge(node2, _1to2);
19 if(constr->polarity == P_TRUE)
23 OrderEdge* _2to1 = getOrderEdgeFromOrderGraph(graph, constr, node2, node1);
24 addNewOutgoingEdge(node2, _2to1);
25 addNewIncomingEdge(node1, _2to1);
34 OrderNode* getOrderNodeFromOrderGraph(OrderGraph* graph, uint64_t id, Order* order){
35 OrderNode* node = allocOrderNode(id, order);
36 OrderNode* tmp = getHashSetOrderNode(graph->nodes, node);
38 deleteOrderNode(node);
41 addHashSetOrderNode(graph->nodes, node);
46 OrderEdge* getOrderEdgeFromOrderGraph(OrderGraph* graph, Boolean* order, OrderNode* begin, OrderNode* end){
47 OrderEdge* edge = allocOrderEdge(order, begin, end);
48 OrderEdge* tmp = getHashSetOrderEdge(graph->edges, edge);
50 deleteOrderEdge(edge);
53 addHashSetOrderEdge(graph->edges, edge);
58 void addOrderConstraintToOrderGraph(OrderGraph* graph, Boolean* constr){
59 BooleanOrder* bOrder = (BooleanOrder*) constr;
60 OrderNode* from = getOrderNodeFromOrderGraph(graph, bOrder->first, bOrder->order);
61 OrderNode* to = getOrderNodeFromOrderGraph(graph, bOrder->second, bOrder->order);
62 addOrderEdge(graph, from, to, constr);
67 void deleteOrderGraph(OrderGraph* graph){
68 HSIteratorOrderNode* iterator = iteratorOrderNode(graph->nodes);
69 while(hasNextOrderNode(iterator)){
70 OrderNode* node = nextOrderNode(iterator);
71 deleteOrderNode(node);
73 deleteIterOrderNode(iterator);
75 HSIteratorOrderEdge* eiterator = iteratorOrderEdge(graph->edges);
76 while(hasNextOrderEdge(eiterator)){
77 OrderEdge* edge = nextOrderEdge(eiterator);
78 deleteOrderEdge(edge);
80 deleteIterOrderEdge(eiterator);