model_print("\n\n");
}
+ deleteIterTableEntry(iterator);
ASSERT(i!=0);
Edge result= generateNegation?constraintNegate(constraintOR(This->cnf, i, constraints))
:constraintOR(This->cnf, i, constraints);
HashSetDef(Void, void *);
HashSetDef(TableEntry, TableEntry*);
+HashSetDef(OrderNode, OrderNode*);
+HashSetDef(OrderEdge, OrderEdge*);
#endif
--- /dev/null
+
+#include "orderedge.h"
+
+OrderEdge* allocOrderEdge(Boolean* order, OrderNode* begin, OrderNode* end){
+ OrderEdge* This = (OrderEdge*) ourmalloc(sizeof(OrderEdge));
+ This->source = begin;
+ This->sink = end;
+ This->order = order;
+ return This;
+}
+
+void deleteOrderEdge(OrderEdge* This){
+ ourfree(This);
+}
--- /dev/null
+/*
+ * File: orderedge.h
+ * Author: hamed
+ *
+ * Created on August 7, 2017, 3:44 PM
+ */
+
+#ifndef ORDEREDGE_H
+#define ORDEREDGE_H
+#include "classlist.h"
+#include "mymemory.h"
+#include "ordernode.h"
+
+struct OrderEdge{
+ Boolean* order;
+ OrderNode* source;
+ OrderNode* sink;
+};
+
+OrderEdge* allocOrderEdge(Boolean* order, OrderNode* begin, OrderNode* end);
+void deleteOrderEdge(OrderEdge* This);
+#endif /* ORDEREDGE_H */
+
--- /dev/null
+#include "ordergraph.h"
+#include "ordernode.h"
+
+OrderGraph* allocOrderGraph(){
+ OrderGraph* This = (OrderGraph*) ourmalloc(sizeof(OrderGraph));
+ This->nodes = allocHashSetOrderNode(HT_INITIAL_CAPACITY, HT_DEFAULT_FACTOR);
+ return This;
+}
+
+void deleteOrderGraph(OrderGraph* graph){
+ HSIteratorOrderNode* iterator = iteratorOrderNode(graph->nodes);
+ while(hasNextOrderNode(iterator)){
+ OrderNode* node = nextOrderNode(iterator);
+ deleteOrderNode(node);
+ }
+ deleteIterOrderNode(iterator);
+ ourfree(graph);
+}
\ No newline at end of file
--- /dev/null
+/*
+ * File: ordergraph.h
+ * Author: hamed
+ *
+ * Created on August 7, 2017, 3:42 PM
+ */
+
+#ifndef ORDERGRAPH_H
+#define ORDERGRAPH_H
+#include "classlist.h"
+#include "structs.h"
+#include "mymemory.h"
+
+struct OrderGraph{
+ HashSetOrderNode* nodes;
+};
+
+OrderGraph* allocOrderGraph();
+
+void deleteOrderGraph(OrderGraph* graph);
+
+#endif /* ORDERGRAPH_H */
+
--- /dev/null
+#include "ordernode.h"
+#include "orderedge.h"
+
+OrderNode* allocOrderNode(uint64_t id, Order* order){
+ OrderNode* This = (OrderNode*) ourmalloc(sizeof(OrderNode));
+ This->id = id;
+ This->order = order;
+ This->inEdges = allocHashSetOrderEdge(HT_INITIAL_CAPACITY, HT_DEFAULT_FACTOR);
+ This->outEdges = allocHashSetOrderEdge(HT_INITIAL_CAPACITY, HT_DEFAULT_FACTOR);
+ return This;
+}
+
+void deleteOrderNode(OrderNode* node){
+ //NOTE: each node only responsible to delete its outgoing edges and
+ // only delete the set for incoming edges (incoming edges are going
+ // to be deleted by other OrderNodes that they go out from them ...
+ deleteHashSetOrderEdge(node->inEdges);
+ HSIteratorOrderEdge* iterator = iteratorOrderEdge(node->outEdges);
+ while(hasNextOrderEdge(iterator)){
+ OrderEdge* edge = nextOrderEdge(iterator);
+ deleteOrderEdge(edge);
+ }
+ deleteIterOrderEdge(iterator);
+ deleteHashSetOrderEdge(node->outEdges);
+ ourfree(node);
+}
\ No newline at end of file
--- /dev/null
+
+/*
+ * File: ordernode.h
+ * Author: hamed
+ *
+ * Created on August 7, 2017, 3:43 PM
+ */
+
+#ifndef ORDERNODE_H
+#define ORDERNODE_H
+
+#include "classlist.h"
+#include "mymemory.h"
+#include "structs.h"
+struct OrderNode{
+ uint64_t id;
+ Order* order;
+ HashSetOrderEdge* inEdges;
+ HashSetOrderEdge* outEdges;
+};
+
+OrderNode* allocOrderNode(uint64_t id, Order* order);
+
+void deleteOrderNode(OrderNode* node);
+
+#endif /* ORDERNODE_H */
+
struct TableEntry;
typedef struct TableEntry TableEntry;
+struct OrderGraph;
+typedef struct OrderGraph OrderGraph;
+
+struct OrderNode;
+typedef struct OrderNode OrderNode;
+
+struct OrderEdge;
+typedef struct OrderEdge OrderEdge;
+
typedef unsigned int uint;
typedef uint64_t VarType;
#endif