Mercurial > emacs
changeset 82901:18391b91e11f
Move things around; munge whitespace, indentation; nfc.
author | Thien-Thi Nguyen <ttn@gnuvola.org> |
---|---|
date | Mon, 27 Aug 2007 02:40:25 +0000 |
parents | 0ff5cfe89663 |
children | c27b2ab395b6 |
files | lisp/emacs-lisp/avl-tree.el |
diffstat | 1 files changed, 36 insertions(+), 53 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/emacs-lisp/avl-tree.el Mon Aug 27 02:31:23 2007 +0000 +++ b/lisp/emacs-lisp/avl-tree.el Mon Aug 27 02:40:25 2007 +0000 @@ -54,6 +54,13 @@ ;;; Code: +;;; ================================================================ +;;; Functions and macros handling an AVL tree node. + +(defmacro avl-tree-node-create (left right data balance) + ;; Create and return an avl-tree node. + `(vector ,left ,right ,data ,balance)) + (defmacro avl-tree-node-left (node) ;; Return the left pointer of NODE. `(aref ,node 0)) @@ -93,13 +100,6 @@ ;; NEWVAL is new value of the branch." `(aset ,node ,branch ,newval)) -;;; ================================================================ -;;; Functions and macros handling an AVL tree node. - -(defmacro avl-tree-node-create (left right data balance) - ;; Create and return an avl-tree node. - `(vector ,left ,right ,data ,balance)) - (defmacro avl-tree-node-balance (node) ;; Return the balance field of a node. `(aref ,node 3)) @@ -130,11 +130,7 @@ (defun avl-tree-del-balance1 (node branch) ;; Rebalance a tree and return t if the height of the tree has shrunk. (let* ((br (avl-tree-node-branch node branch)) - p1 - b1 - p2 - b2 - result) + p1 b1 p2 b2 result) (cond ((< (avl-tree-node-balance br) 0) (avl-tree-node-set-balance br 0) @@ -183,11 +179,7 @@ (defun avl-tree-del-balance2 (node branch) (let* ((br (avl-tree-node-branch node branch)) - p1 - b1 - p2 - b2 - result) + p1 b1 p2 b2 result) (cond ((> (avl-tree-node-balance br) 0) (avl-tree-node-set-balance br 0) @@ -235,14 +227,13 @@ t))))) (defun avl-tree-do-del-internal (node branch q) - (let* ((br (avl-tree-node-branch node branch))) (if (avl-tree-node-right br) (if (avl-tree-do-del-internal br +1 q) (avl-tree-del-balance2 node branch)) (avl-tree-node-set-data q (avl-tree-node-data br)) (avl-tree-node-set-branch node branch - (avl-tree-node-left br)) + (avl-tree-node-left br)) t))) (defun avl-tree-do-delete (cmpfun root branch data) @@ -281,10 +272,7 @@ (defun avl-tree-enter-balance1 (node branch) ;; Rebalance a tree and return t if the height of the tree has grown. (let* ((br (avl-tree-node-branch node branch)) - p1 - p2 - b2 - result) + p1 p2 b2 result) (cond ((< (avl-tree-node-balance br) 0) (avl-tree-node-set-balance br 0) @@ -325,9 +313,7 @@ (defun avl-tree-enter-balance2 (node branch) ;; Return t if the tree has grown. (let* ((br (avl-tree-node-branch node branch)) - p1 - p2 - b2) + p1 p2 b2) (cond ((> (avl-tree-node-balance br) 0) (avl-tree-node-set-balance br 0) @@ -371,20 +357,16 @@ (cond ((null br) ;; Data not in tree, insert it. - (avl-tree-node-set-branch root branch - (avl-tree-node-create nil nil data 0)) + (avl-tree-node-set-branch + root branch (avl-tree-node-create nil nil data 0)) t) ((funcall cmpfun data (avl-tree-node-data br)) - (and (avl-tree-do-enter cmpfun - br - 0 data) + (and (avl-tree-do-enter cmpfun br 0 data) (avl-tree-enter-balance2 root branch))) ((funcall cmpfun (avl-tree-node-data br) data) - (and (avl-tree-do-enter cmpfun - br - 1 data) + (and (avl-tree-do-enter cmpfun br 1 data) (avl-tree-enter-balance1 root branch))) (t @@ -424,10 +406,11 @@ ;; Highly recursive. INTERNAL USE ONLY. (if (null root) nil - (avl-tree-node-create (avl-tree-do-copy (avl-tree-node-left root)) - (avl-tree-do-copy (avl-tree-node-right root)) - (avl-tree-node-data root) - (avl-tree-node-balance root)))) + (avl-tree-node-create + (avl-tree-do-copy (avl-tree-node-left root)) + (avl-tree-do-copy (avl-tree-node-right root)) + (avl-tree-node-data root) + (avl-tree-node-balance root)))) ;;; ================================================================ @@ -488,7 +471,6 @@ (setq node (avl-tree-node-right node))) (t (setq found t)))) - (if node (avl-tree-node-data node) nil))) @@ -497,9 +479,9 @@ "Apply MAP-FUNCTION to all elements in the avl tree TREE." (avl-tree-mapc (function (lambda (node) - (avl-tree-node-set-data node - (funcall __map-function__ - (avl-tree-node-data node))))) + (avl-tree-node-set-data + node (funcall __map-function__ + (avl-tree-node-data node))))) (avl-tree-root tree))) (defun avl-tree-first (tree) @@ -524,29 +506,30 @@ (defun avl-tree-copy (tree) "Return a copy of the avl tree TREE." - (let ((new-tree (avl-tree-create - (avl-tree-cmpfun tree)))) + (let ((new-tree (avl-tree-create (avl-tree-cmpfun tree)))) (avl-tree-node-set-left (avl-tree-dummyroot new-tree) - (avl-tree-do-copy (avl-tree-root tree))) + (avl-tree-do-copy (avl-tree-root tree))) new-tree)) (defun avl-tree-flatten (tree) "Return a sorted list containing all elements of TREE." (nreverse (let ((treelist nil)) - (avl-tree-mapc (function (lambda (node) - (setq treelist (cons (avl-tree-node-data node) - treelist)))) - (avl-tree-root tree)) + (avl-tree-mapc + (function (lambda (node) + (setq treelist (cons (avl-tree-node-data node) + treelist)))) + (avl-tree-root tree)) treelist))) (defun avl-tree-size (tree) "Return the number of elements in TREE." (let ((treesize 0)) - (avl-tree-mapc (function (lambda (data) - (setq treesize (1+ treesize)) - data)) - (avl-tree-root tree)) + (avl-tree-mapc + (function (lambda (data) + (setq treesize (1+ treesize)) + data)) + (avl-tree-root tree)) treesize)) (defun avl-tree-clear (tree)