Correct bug in find-edge-between-vertexes that caused an infinite loop if both vertex...
authorGary King <gwking@metabang.com>
Thu, 15 Jun 2006 12:54:17 +0000 (08:54 -0400)
committerGary King <gwking@metabang.com>
Thu, 15 Jun 2006 12:54:17 +0000 (08:54 -0400)
darcs-hash:20060615125417-3cc5d-28f4a3237f91193f09fafbb117f513f90b188ec0.gz

dev/graph-container.lisp

index 2bc2504..544a0c4 100644 (file)
@@ -192,12 +192,15 @@ DISCUSSION
                                           (vertex-1 graph-container-vertex) 
                                           (vertex-2 graph-container-vertex)
                                           fn
-                                          &key error-if-not-found?)
-  (declare (ignore error-if-not-found?))
-  (search-for-match (vertex-edges vertex-1)
-                    (lambda (edge)
-                      (and (eq vertex-2 (other-vertex edge vertex-1))
-                           (funcall fn edge)))))
+                                          &key error-if-not-found?) 
+  (let ((it (search-for-match (vertex-edges vertex-1)
+                              (lambda (edge)
+                                (and (eq vertex-2 (other-vertex edge vertex-1))
+                                     (funcall fn edge))))))
+    (when (and error-if-not-found? (not it))
+      (error 'graph-edge-not-found-error 
+             :vertex-1 vertex-1 :vertex-2 vertex-1))
+    it))    
 
 ;;; ---------------------------------------------------------------------------
 
@@ -208,9 +211,10 @@ DISCUSSION
                                           &key error-if-not-found?)
   (bind ((v1 (find-vertex graph value-1 error-if-not-found?))
          (v2 (find-vertex graph value-2 error-if-not-found?)))
-    (find-edge-between-vertexes-if 
-     graph v1 v2 fn 
-     :error-if-not-found? error-if-not-found?)))
+    (aif (and v1 v2 (find-edge-between-vertexes-if graph v1 v2 fn))
+         it
+         (when error-if-not-found?
+           (error 'graph-edge-not-found-error :vertex-1 v1 :vertex-2 v2)))))
 
 ;;; ---------------------------------------------------------------------------