//Compute full transitive closure for nodes
SetIteratorOrderNode *srciterator = sources->iterator();
while (srciterator->hasNext()) {
- OrderNode *srcnode = srciterator->next();
+ OrderNode *srcnode = (OrderNode*)srciterator->next();
OrderEdge *newedge = graph->getOrderEdgeFromOrderGraph(srcnode, node);
newedge->mustPos = true;
newedge->polPos = true;
OrderNode *OrderGraph::getOrderNodeFromOrderGraph(uint64_t id) {
OrderNode *node = new OrderNode(id);
- OrderNode *tmp = nodes.get(node);
+ OrderNode *tmp = (OrderNode*)nodes.get(node);
if ( tmp != NULL) {
delete node;
node = tmp;
}
OrderNode *OrderGraph::lookupOrderNodeFromOrderGraph(uint64_t id) {
- OrderNode node(id);
- OrderNode *tmp = nodes.get(&node);
+ OrderNodeKey node(id);
+ OrderNode *tmp = (OrderNode*)nodes.get(&node);
return tmp;
}
void OrderGraph::DFS(Vector<OrderNode *> *finishNodes) {
SetIteratorOrderNode *iterator = getNodes();
while (iterator->hasNext()) {
- OrderNode *node = iterator->next();
+ OrderNode *node = (OrderNode*)iterator->next();
if (node->status == NOTVISITED && !node->removed) {
node->status = VISITED;
DFSNodeVisit(node, finishNodes, false, false, 0);
void OrderGraph::DFSMust(Vector<OrderNode *> *finishNodes) {
SetIteratorOrderNode *iterator = getNodes();
while (iterator->hasNext()) {
- OrderNode *node = iterator->next();
+ OrderNode *node = (OrderNode*)iterator->next();
if (node->status == NOTVISITED && !node->removed) {
node->status = VISITED;
DFSNodeVisit(node, finishNodes, false, true, 0);
void OrderGraph::resetNodeInfoStatusSCC() {
SetIteratorOrderNode *iterator = getNodes();
while (iterator->hasNext()) {
- iterator->next()->status = NOTVISITED;
+ ((OrderNode*)iterator->next())->status = NOTVISITED;
}
delete iterator;
}
#include "orderedge.h"
OrderNode::OrderNode(uint64_t _id) :
- id(_id),
+ OrderNodeKey(_id),
status(NOTVISITED),
removed(false),
sccNum(0),
enum NodeStatus {NOTVISITED, VISITED, FINISHED, ADDEDTOSET};
typedef enum NodeStatus NodeStatus;
-class OrderNode {
+class OrderNodeKey{
+public:
+ OrderNodeKey(uint64_t id) : id(id){}
+ virtual ~OrderNodeKey(){}
+ uint64_t getID() {return id;}
+ uint64_t id;
+};
+
+class OrderNode : public OrderNodeKey {
public:
OrderNode(uint64_t id);
+ virtual ~OrderNode(){}
void addNewIncomingEdge(OrderEdge *edge);
void addNewOutgoingEdge(OrderEdge *edge);
- uint64_t getID() {return id;}
- uint64_t id;
NodeStatus status;
bool removed;
uint sccNum;
void DecomposeOrderTransform::removeMustBeTrueNodes(OrderGraph *graph, DecomposeOrderResolver *dor) {
SetIteratorOrderNode *iterator = graph->getNodes();
while (iterator->hasNext()) {
- OrderNode *node = iterator->next();
+ OrderNode *node = (OrderNode*)iterator->next();
if (node->removed)
continue;
if (isMustBeTrueNode(node)) {
void DecomposeOrderTransform::mustEdgePrune(OrderGraph *graph, DecomposeOrderResolver *dor) {
SetIteratorOrderNode *iterator = graph->getNodes();
while (iterator->hasNext()) {
- OrderNode *node = iterator->next();
+ OrderNode *node = (OrderNode*)iterator->next();
if (node->removed)
continue;
attemptNodeMerge(graph, node, dor);
int result = solve(cnf->solver);
long long finishTime = getTimeNano();
cnf->encodeTime = startSolve - startTime;
+ model_print("CNF Encode time: %f\n", cnf->encodeTime/1000000000.0);
cnf->solveTime = finishTime - startSolve;
- model_print("CNF Encode time: %f\n Solve time: %f\n", cnf->encodeTime/1000000000.0, cnf->solveTime/ 1000000000.0);
+ model_print("Solve time: %f\n", cnf->solveTime/ 1000000000.0);
return result;
}
return true;
}
-unsigned int order_node_hash_function(OrderNode *This) {
+unsigned int order_node_hash_function(OrderNodeKey *This) {
return (uint) This->id;
}
-bool order_node_equals(OrderNode *key1, OrderNode *key2) {
+bool order_node_equals(OrderNodeKey *key1, OrderNodeKey *key2) {
return key1->id == key2->id;
}
unsigned int table_entry_hash_function(TableEntry *This);
bool table_entry_equals(TableEntry *key1, TableEntry *key2);
-unsigned int order_node_hash_function(OrderNode *This);
-bool order_node_equals(OrderNode *key1, OrderNode *key2);
+unsigned int order_node_hash_function(OrderNodeKey *This);
+bool order_node_equals(OrderNodeKey *key1, OrderNodeKey *key2);
unsigned int order_edge_hash_function(OrderEdge *This);
bool order_edge_equals(OrderEdge *key1, OrderEdge *key2);
unsigned int order_element_hash_function(OrderElement *This);
typedef Hashset<TableEntry *, uintptr_t, PTRSHIFT, table_entry_hash_function, table_entry_equals> HashsetTableEntry;
-typedef Hashset<OrderNode *, uintptr_t, PTRSHIFT, order_node_hash_function, order_node_equals> HashsetOrderNode;
+typedef Hashset<OrderNodeKey *, uintptr_t, PTRSHIFT, order_node_hash_function, order_node_equals> HashsetOrderNode;
typedef Hashset<OrderEdge *, uintptr_t, PTRSHIFT, order_edge_hash_function, order_edge_equals> HashsetOrderEdge;
typedef Hashset<OrderElement *, uintptr_t, PTRSHIFT, order_element_hash_function, order_element_equals> HashsetOrderElement;
typedef Hashset<DOREdge *, uintptr_t, PTRSHIFT, doredge_hash_function, doredge_equals> HashsetDOREdge;
typedef SetIterator<uint64_t, uint64_t, 0> SetIterator64Int;
-typedef Hashtable<OrderNode *, HashsetOrderNode *, uintptr_t, PTRSHIFT> HashtableNodeToNodeSet;
+typedef Hashtable<OrderNodeKey *, HashsetOrderNode *, uintptr_t, PTRSHIFT> HashtableNodeToNodeSet;
typedef Hashtable<OrderPair *, OrderPair *, uintptr_t, PTRSHIFT, order_pair_hash_function, order_pair_equals> HashtableOrderPair;
typedef Hashtable<void *, void *, uintptr_t, PTRSHIFT> CloneMap;
typedef SetIterator<TableEntry *, uintptr_t, PTRSHIFT, table_entry_hash_function, table_entry_equals> SetIteratorTableEntry;
typedef SetIterator<OrderEdge *, uintptr_t, PTRSHIFT, order_edge_hash_function, order_edge_equals> SetIteratorOrderEdge;
-typedef SetIterator<OrderNode *, uintptr_t, PTRSHIFT, order_node_hash_function, order_node_equals> SetIteratorOrderNode;
+typedef SetIterator<OrderNodeKey *, uintptr_t, PTRSHIFT, order_node_hash_function, order_node_equals> SetIteratorOrderNode;
typedef SetIterator<OrderElement *, uintptr_t, PTRSHIFT, order_element_hash_function, order_element_equals> SetIteratorOrderElement;
typedef SetIterator<DOREdge *, uintptr_t, PTRSHIFT, doredge_hash_function, doredge_equals> SetIteratorDOREdge;
#endif
class OrderEncoding;
class OrderGraph;
+class OrderNodeKey;
class OrderNode;
class OrderEdge;
class DOREdge;