Some edits
[c11tester.git] / funcnode.cc
index 18d7771bfba63ff6460a29039a564be1cd4e4000..5333bce757eb2f863930e6ad03687c95fd175a21 100644 (file)
@@ -646,30 +646,37 @@ void FuncNode::add_out_edge(FuncNode * other)
  */
 int FuncNode::compute_distance(FuncNode * target, int max_step)
 {
+       if (target == NULL)
+               return -1;
+       else if (target == this)
+               return 0;
+
        SnapList<FuncNode *> queue;
-       HashTable<FuncNode *, int, uintptr_t, 0> distances;
+       HashTable<FuncNode *, int, uintptr_t, 0> distances(128);
 
-       int dist = 0;
        queue.push_back(this);
-       distances.put(this, dist);
+       distances.put(this, 0);
 
        while (!queue.empty()) {
                FuncNode * curr = queue.front();
                queue.pop_front();
+               int dist = distances.get(curr);
 
-               if (curr == target)
-                       return dist;
-               else if (max_step < dist)
+               if (max_step <= dist)
                        return -1;
 
-               dist++;
                ModelList<FuncNode *> * outEdges = curr->get_out_edges();
                mllnode<FuncNode *> * it;
                for (it = outEdges->begin(); it != NULL; it = it->getNext()) {
                        FuncNode * out_node = it->getVal();
+
+                       /* This node has not been visited before */
                        if ( !distances.contains(out_node) ) {
+                               if (out_node == target)
+                                       return dist + 1;
+
                                queue.push_back(out_node);
-                               distances.put(out_node, dist);
+                               distances.put(out_node, dist + 1);
                        }
                }
        }