[funds-cvs] r80 - trunk/funds/src/trees
abaine at common-lisp.net
abaine at common-lisp.net
Wed Jul 11 03:18:01 UTC 2007
Author: abaine
Date: Tue Jul 10 23:18:01 2007
New Revision: 80
Modified:
trunk/funds/src/trees/tree-insert.lisp
Log:
Greatly simplified tree-insert.
Modified: trunk/funds/src/trees/tree-insert.lisp
==============================================================================
--- trunk/funds/src/trees/tree-insert.lisp (original)
+++ trunk/funds/src/trees/tree-insert.lisp Tue Jul 10 23:18:01 2007
@@ -38,31 +38,34 @@
(defmethod tree-insert ((tree binary-tree) key value
&key (test #'eql) (order #'<))
- (cond ((funcall test key (bt-key tree))
- (make-instance 'binary-tree
- :key key
- :value value
- :left (bt-left tree)
- :right (bt-right tree)))
- ((funcall order key (bt-key tree))
- (insert tree key value
- :test test :order order :side :left))
- (t (insert tree key value
- :test test :order order :side :right))))
+ (if (funcall test key (bt-key tree))
+ (make-instance 'binary-tree
+ :key key
+ :value value
+ :left (bt-left tree)
+ :right (bt-right tree))
+ (let* ((side (if (funcall order key (bt-key tree))
+ :left
+ :right))
+ (other-side (other-side side)))
+ (attach-bt tree
+ side (tree-insert (tree-child tree :side side) key value
+ :test test
+ :order order)
+ other-side (tree-child tree :side other-side)))))
-(defmethod insert ((tree binary-tree) key value &key test order side)
- (make-instance 'binary-tree
- :key (bt-key tree)
- :value (bt-value tree)
- side (tree-insert (tree-child tree :side side)
- key value
- :test test
- :order order)
- (other-side side) (tree-child tree :side (other-side side))))
-
-(defmethod insert ((tree avl-tree) key value &key test order side)
- (declare (ignore test order))
- (let* ((temp (call-next-method)) ; the temp object will be a bt, not an avl tree.
- (outside (tree-child temp :side side))
- (inside (tree-child temp :side (other-side side))))
- (balance inside temp outside :heavy-side side)))
+(defmethod tree-insert ((tree avl-tree) key value
+ &key (test #'eql) (order #'<))
+ (if (funcall test key (bt-key tree))
+ (make-avl-tree :key key
+ :value value
+ :left (bt-left tree)
+ :right (bt-right tree))
+ (let* ((temp (call-next-method))
+ (side (if (funcall order key (bt-key tree))
+ :left
+ :right))
+ (outside (tree-child temp :side side))
+ (inside (tree-child temp :side (other-side side))))
+ (balance inside temp outside :heavy-side side))))
+
More information about the Funds-cvs
mailing list