OrderGraph *buildOrderGraph(Order *order) {
ASSERT(order->graph == NULL);
OrderGraph *orderGraph = new OrderGraph(order);
- order->graph = orderGraph;
- uint constrSize = order->constraints.getSize();
+ Vector<BooleanOrder *> *constraints = order->getConstraints();
+ uint constrSize = constraints->getSize();
for (uint j = 0; j < constrSize; j++) {
- orderGraph->addOrderConstraintToOrderGraph(order->constraints.get(j));
+ orderGraph->addOrderConstraintToOrderGraph(constraints->get(j));
}
return orderGraph;
}
OrderGraph *buildMustOrderGraph(Order *order) {
ASSERT(order->graph == NULL);
OrderGraph *orderGraph = new OrderGraph(order);
- uint constrSize = order->constraints.getSize();
+ Vector<BooleanOrder *> *constraints = order->getConstraints();
+ uint constrSize = constraints->getSize();
for (uint j = 0; j < constrSize; j++) {
- orderGraph->addMustOrderConstraintToOrderGraph(order->constraints.get(j));
+ orderGraph->addMustOrderConstraintToOrderGraph(constraints->get(j));
}
return orderGraph;
}
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;
} else {
nodes.add(node);
- allNodes.push(node);
}
return node;
}
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;
}
}
OrderGraph::~OrderGraph() {
- uint size=allNodes.getSize();
- for(uint i=0;i<size;i++)
- delete allNodes.get(i);
-
- SetIteratorOrderEdge *eiterator = edges.iterator();
- while (eiterator->hasNext()) {
- OrderEdge *edge = eiterator->next();
- delete edge;
- }
- delete eiterator;
+ nodes.resetAndDelete();
+ edges.resetAndDelete();
}
bool OrderGraph::isTherePath(OrderNode *source, OrderNode *destination) {
void OrderGraph::DFS(Vector<OrderNode *> *finishNodes) {
SetIteratorOrderNode *iterator = getNodes();
while (iterator->hasNext()) {
- OrderNode *node = iterator->next();
- if (node->status == NOTVISITED) {
+ OrderNode *node = (OrderNode *)iterator->next();
+ if (node->status == NOTVISITED && !node->removed) {
node->status = VISITED;
DFSNodeVisit(node, finishNodes, false, false, 0);
node->status = FINISHED;
void OrderGraph::DFSMust(Vector<OrderNode *> *finishNodes) {
SetIteratorOrderNode *iterator = getNodes();
while (iterator->hasNext()) {
- OrderNode *node = iterator->next();
- if (node->status == NOTVISITED) {
+ OrderNode *node = (OrderNode *)iterator->next();
+ if (node->status == NOTVISITED && !node->removed) {
node->status = VISITED;
DFSNodeVisit(node, finishNodes, false, true, 0);
node->status = FINISHED;
void OrderGraph::resetNodeInfoStatusSCC() {
SetIteratorOrderNode *iterator = getNodes();
while (iterator->hasNext()) {
- iterator->next()->status = NOTVISITED;
+ ((OrderNode *)iterator->next())->status = NOTVISITED;
}
delete iterator;
}