Just start working on OrderGraph + memory bug fix for hashset iterator
authorHamed <hamed.gorjiara@gmail.com>
Tue, 8 Aug 2017 23:41:00 +0000 (16:41 -0700)
committerHamed <hamed.gorjiara@gmail.com>
Tue, 8 Aug 2017 23:41:00 +0000 (16:41 -0700)
src/Backend/satfunctableencoder.c
src/Collections/structs.h
src/Encoders/orderedge.c [new file with mode: 0644]
src/Encoders/orderedge.h [new file with mode: 0644]
src/Encoders/ordergraph.c [new file with mode: 0644]
src/Encoders/ordergraph.h [new file with mode: 0644]
src/Encoders/ordernode.c [new file with mode: 0644]
src/Encoders/ordernode.h [new file with mode: 0644]
src/classlist.h

index 0609c7c018d8a24cdc67997a5423a9e47b6efd91..7e81dfdda8fbf2a407438ec6f05a8f1846a6ce48 100644 (file)
@@ -60,6 +60,7 @@ Edge encodeEnumEntriesTablePredicateSATEncoder(SATEncoder * This, BooleanPredica
                
                model_print("\n\n");
        }
+       deleteIterTableEntry(iterator);
        ASSERT(i!=0);
        Edge result= generateNegation?constraintNegate(constraintOR(This->cnf, i, constraints))
                :constraintOR(This->cnf, i, constraints);
index 97d97e5ac4c77ca6e2b47fa0a7f9c56462ce8136..0ce6ecb3617f3b4b19eba441d9ecbef62e78f809 100644 (file)
@@ -26,4 +26,6 @@ HashTableDef(OrderPair, OrderPair *, OrderPair *);
 
 HashSetDef(Void, void *);
 HashSetDef(TableEntry, TableEntry*);
+HashSetDef(OrderNode, OrderNode*);
+HashSetDef(OrderEdge, OrderEdge*);
 #endif
diff --git a/src/Encoders/orderedge.c b/src/Encoders/orderedge.c
new file mode 100644 (file)
index 0000000..a1b8d57
--- /dev/null
@@ -0,0 +1,14 @@
+
+#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);
+}
diff --git a/src/Encoders/orderedge.h b/src/Encoders/orderedge.h
new file mode 100644 (file)
index 0000000..6415728
--- /dev/null
@@ -0,0 +1,23 @@
+/* 
+ * 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 */
+
diff --git a/src/Encoders/ordergraph.c b/src/Encoders/ordergraph.c
new file mode 100644 (file)
index 0000000..7b1d613
--- /dev/null
@@ -0,0 +1,18 @@
+#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
diff --git a/src/Encoders/ordergraph.h b/src/Encoders/ordergraph.h
new file mode 100644 (file)
index 0000000..ceffe74
--- /dev/null
@@ -0,0 +1,23 @@
+/* 
+ * 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 */
+
diff --git a/src/Encoders/ordernode.c b/src/Encoders/ordernode.c
new file mode 100644 (file)
index 0000000..13c2c09
--- /dev/null
@@ -0,0 +1,26 @@
+#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
diff --git a/src/Encoders/ordernode.h b/src/Encoders/ordernode.h
new file mode 100644 (file)
index 0000000..5480d54
--- /dev/null
@@ -0,0 +1,27 @@
+
+/* 
+ * 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 */
+
index fa3e3bdb608058fb3ef3732ee6e9aa4ac260997d..2079d9b92fed4557146908af1af85b7a087273d0 100644 (file)
@@ -82,6 +82,15 @@ typedef struct OrderEncoding OrderEncoding;
 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