From b8a716a937ff6459f00ae920b5d51121f33669bc Mon Sep 17 00:00:00 2001 From: Hamed Date: Tue, 8 Aug 2017 16:41:00 -0700 Subject: [PATCH] Just start working on OrderGraph + memory bug fix for hashset iterator --- src/Backend/satfunctableencoder.c | 1 + src/Collections/structs.h | 2 ++ src/Encoders/orderedge.c | 14 ++++++++++++++ src/Encoders/orderedge.h | 23 +++++++++++++++++++++++ src/Encoders/ordergraph.c | 18 ++++++++++++++++++ src/Encoders/ordergraph.h | 23 +++++++++++++++++++++++ src/Encoders/ordernode.c | 26 ++++++++++++++++++++++++++ src/Encoders/ordernode.h | 27 +++++++++++++++++++++++++++ src/classlist.h | 9 +++++++++ 9 files changed, 143 insertions(+) create mode 100644 src/Encoders/orderedge.c create mode 100644 src/Encoders/orderedge.h create mode 100644 src/Encoders/ordergraph.c create mode 100644 src/Encoders/ordergraph.h create mode 100644 src/Encoders/ordernode.c create mode 100644 src/Encoders/ordernode.h diff --git a/src/Backend/satfunctableencoder.c b/src/Backend/satfunctableencoder.c index 0609c7c..7e81dfd 100644 --- a/src/Backend/satfunctableencoder.c +++ b/src/Backend/satfunctableencoder.c @@ -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); diff --git a/src/Collections/structs.h b/src/Collections/structs.h index 97d97e5..0ce6ecb 100644 --- a/src/Collections/structs.h +++ b/src/Collections/structs.h @@ -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 index 0000000..a1b8d57 --- /dev/null +++ b/src/Encoders/orderedge.c @@ -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 index 0000000..6415728 --- /dev/null +++ b/src/Encoders/orderedge.h @@ -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 index 0000000..7b1d613 --- /dev/null +++ b/src/Encoders/ordergraph.c @@ -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 index 0000000..ceffe74 --- /dev/null +++ b/src/Encoders/ordergraph.h @@ -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 index 0000000..13c2c09 --- /dev/null +++ b/src/Encoders/ordernode.c @@ -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 index 0000000..5480d54 --- /dev/null +++ b/src/Encoders/ordernode.h @@ -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 */ + diff --git a/src/classlist.h b/src/classlist.h index fa3e3bd..2079d9b 100644 --- a/src/classlist.h +++ b/src/classlist.h @@ -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 -- 2.34.1