From 529a8f60bae410ef4c1f90a2f3f4c1a44a66df5b Mon Sep 17 00:00:00 2001 From: Gary King Date: Thu, 15 Jun 2006 08:54:17 -0400 Subject: [PATCH] Correct bug in find-edge-between-vertexes that caused an infinite loop if both vertexes were not in the graph (Thanks for Joshua Moody) darcs-hash:20060615125417-3cc5d-28f4a3237f91193f09fafbb117f513f90b188ec0.gz --- dev/graph-container.lisp | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/dev/graph-container.lisp b/dev/graph-container.lisp index 2bc2504..544a0c4 100644 --- a/dev/graph-container.lisp +++ b/dev/graph-container.lisp @@ -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))))) ;;; --------------------------------------------------------------------------- -- 1.7.10.4