-bool CycleGraph::checkReachable(CycleNode *from, CycleNode *to) {
- std::vector<CycleNode *, ModelAlloc<CycleNode *> > queue;
- HashTable<CycleNode *, CycleNode *, uintptr_t, 4, model_malloc, model_calloc, model_free> discovered(64);
+bool CycleGraph::checkReachable(const CycleNode *from, const CycleNode *to) const
+{
+ std::vector< const CycleNode *, ModelAlloc<const CycleNode *> > queue;
+ discovered->reset();
+
+ queue.push_back(from);
+ discovered->put(from, from);
+ while (!queue.empty()) {
+ const CycleNode *node = queue.back();
+ queue.pop_back();
+ if (node == to)
+ return true;
+
+ for (unsigned int i = 0; i < node->getNumEdges(); i++) {
+ CycleNode *next = node->getEdge(i);
+ if (!discovered->contains(next)) {
+ discovered->put(next, next);
+ queue.push_back(next);
+ }
+ }
+ }
+ return false;
+}
+
+bool CycleGraph::checkPromise(const ModelAction *fromact, Promise *promise) const
+{
+ std::vector< CycleNode *, ModelAlloc<CycleNode *> > queue;
+ discovered->reset();
+ CycleNode *from = actionToNode.get(fromact);