X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=dev%2Fgraph-container.lisp;h=91fde47f25b8d4e791c846664ca613a03a2bd36d;hb=587b8dda5f8e389cd8a770bb280364369cfe4ec2;hp=c856db0c918e46278c0932633f5923ad71e1e668;hpb=1fe64e8b966450697100fae6ec35cc5688a88bd6;p=cl-graph.git diff --git a/dev/graph-container.lisp b/dev/graph-container.lisp index c856db0..91fde47 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,9 @@ 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?))) + (or (and v1 v2 (find-edge-between-vertexes-if graph v1 v2 fn)) + (when error-if-not-found? + (error 'graph-edge-not-found-error :vertex-1 v1 :vertex-2 v2))))) ;;; --------------------------------------------------------------------------- @@ -228,11 +231,19 @@ DISCUSSION (delete-item (vertex-edges vertex-1) edge) (delete-item (vertex-edges vertex-2) edge) (setf (item-at-1 (vertex-pair->edge graph) (cons vertex-1 vertex-2)) - (delete (cons vertex-1 vertex-2) + (delete edge (item-at-1 (vertex-pair->edge graph) (cons vertex-1 vertex-2)) - :test #'equal))) + :test #'eq))) edge) +(defmethod delete-all-edges ((graph graph-container)) + (iterate-vertexes + graph + (lambda (vertex) + (empty! (vertex-edges vertex)))) + (empty! (vertex-pair->edge graph)) + graph) + ;;; --------------------------------------------------------------------------- (defmethod empty! :after ((graph graph-container)) @@ -257,7 +268,7 @@ DISCUSSION (iterate-elements (vertex-edges vertex) (lambda (edge) (when (or (undirected-edge-p edge) - (eq vertex (target-vertex edge))) + (eq vertex (source-vertex edge))) (funcall fn edge))))) ;;; --------------------------------------------------------------------------- @@ -266,7 +277,7 @@ DISCUSSION (iterate-elements (vertex-edges vertex) (lambda (edge) (when (or (undirected-edge-p edge) - (eq vertex (source-vertex edge))) + (eq vertex (target-vertex edge))) (funcall fn edge))))) ;;; ---------------------------------------------------------------------------