aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThien-Thi Nguyen2007-08-27 02:40:25 +0000
committerThien-Thi Nguyen2007-08-27 02:40:25 +0000
commit5fa11cc28db07e1ac0c06ad10fc45ed7caddb315 (patch)
treeb96a784e7f4015691ac9a1efa0875a1de1e64678
parentbdf0a828423d27d8a0ea956da4eda1754631dc3b (diff)
downloademacs-5fa11cc28db07e1ac0c06ad10fc45ed7caddb315.tar.gz
emacs-5fa11cc28db07e1ac0c06ad10fc45ed7caddb315.zip
Move things around; munge whitespace, indentation; nfc.
-rw-r--r--lisp/emacs-lisp/avl-tree.el89
1 files changed, 36 insertions, 53 deletions
diff --git a/lisp/emacs-lisp/avl-tree.el b/lisp/emacs-lisp/avl-tree.el
index 0e37e718250..7dd4d18da7c 100644
--- a/lisp/emacs-lisp/avl-tree.el
+++ b/lisp/emacs-lisp/avl-tree.el
@@ -54,6 +54,13 @@
54 54
55;;; Code: 55;;; Code:
56 56
57;;; ================================================================
58;;; Functions and macros handling an AVL tree node.
59
60(defmacro avl-tree-node-create (left right data balance)
61 ;; Create and return an avl-tree node.
62 `(vector ,left ,right ,data ,balance))
63
57(defmacro avl-tree-node-left (node) 64(defmacro avl-tree-node-left (node)
58 ;; Return the left pointer of NODE. 65 ;; Return the left pointer of NODE.
59 `(aref ,node 0)) 66 `(aref ,node 0))
@@ -93,13 +100,6 @@
93 ;; NEWVAL is new value of the branch." 100 ;; NEWVAL is new value of the branch."
94 `(aset ,node ,branch ,newval)) 101 `(aset ,node ,branch ,newval))
95 102
96;;; ================================================================
97;;; Functions and macros handling an AVL tree node.
98
99(defmacro avl-tree-node-create (left right data balance)
100 ;; Create and return an avl-tree node.
101 `(vector ,left ,right ,data ,balance))
102
103(defmacro avl-tree-node-balance (node) 103(defmacro avl-tree-node-balance (node)
104 ;; Return the balance field of a node. 104 ;; Return the balance field of a node.
105 `(aref ,node 3)) 105 `(aref ,node 3))
@@ -130,11 +130,7 @@
130(defun avl-tree-del-balance1 (node branch) 130(defun avl-tree-del-balance1 (node branch)
131 ;; Rebalance a tree and return t if the height of the tree has shrunk. 131 ;; Rebalance a tree and return t if the height of the tree has shrunk.
132 (let* ((br (avl-tree-node-branch node branch)) 132 (let* ((br (avl-tree-node-branch node branch))
133 p1 133 p1 b1 p2 b2 result)
134 b1
135 p2
136 b2
137 result)
138 (cond 134 (cond
139 ((< (avl-tree-node-balance br) 0) 135 ((< (avl-tree-node-balance br) 0)
140 (avl-tree-node-set-balance br 0) 136 (avl-tree-node-set-balance br 0)
@@ -183,11 +179,7 @@
183 179
184(defun avl-tree-del-balance2 (node branch) 180(defun avl-tree-del-balance2 (node branch)
185 (let* ((br (avl-tree-node-branch node branch)) 181 (let* ((br (avl-tree-node-branch node branch))
186 p1 182 p1 b1 p2 b2 result)
187 b1
188 p2
189 b2
190 result)
191 (cond 183 (cond
192 ((> (avl-tree-node-balance br) 0) 184 ((> (avl-tree-node-balance br) 0)
193 (avl-tree-node-set-balance br 0) 185 (avl-tree-node-set-balance br 0)
@@ -235,14 +227,13 @@
235 t))))) 227 t)))))
236 228
237(defun avl-tree-do-del-internal (node branch q) 229(defun avl-tree-do-del-internal (node branch q)
238
239 (let* ((br (avl-tree-node-branch node branch))) 230 (let* ((br (avl-tree-node-branch node branch)))
240 (if (avl-tree-node-right br) 231 (if (avl-tree-node-right br)
241 (if (avl-tree-do-del-internal br +1 q) 232 (if (avl-tree-do-del-internal br +1 q)
242 (avl-tree-del-balance2 node branch)) 233 (avl-tree-del-balance2 node branch))
243 (avl-tree-node-set-data q (avl-tree-node-data br)) 234 (avl-tree-node-set-data q (avl-tree-node-data br))
244 (avl-tree-node-set-branch node branch 235 (avl-tree-node-set-branch node branch
245 (avl-tree-node-left br)) 236 (avl-tree-node-left br))
246 t))) 237 t)))
247 238
248(defun avl-tree-do-delete (cmpfun root branch data) 239(defun avl-tree-do-delete (cmpfun root branch data)
@@ -281,10 +272,7 @@
281(defun avl-tree-enter-balance1 (node branch) 272(defun avl-tree-enter-balance1 (node branch)
282 ;; Rebalance a tree and return t if the height of the tree has grown. 273 ;; Rebalance a tree and return t if the height of the tree has grown.
283 (let* ((br (avl-tree-node-branch node branch)) 274 (let* ((br (avl-tree-node-branch node branch))
284 p1 275 p1 p2 b2 result)
285 p2
286 b2
287 result)
288 (cond 276 (cond
289 ((< (avl-tree-node-balance br) 0) 277 ((< (avl-tree-node-balance br) 0)
290 (avl-tree-node-set-balance br 0) 278 (avl-tree-node-set-balance br 0)
@@ -325,9 +313,7 @@
325(defun avl-tree-enter-balance2 (node branch) 313(defun avl-tree-enter-balance2 (node branch)
326 ;; Return t if the tree has grown. 314 ;; Return t if the tree has grown.
327 (let* ((br (avl-tree-node-branch node branch)) 315 (let* ((br (avl-tree-node-branch node branch))
328 p1 316 p1 p2 b2)
329 p2
330 b2)
331 (cond 317 (cond
332 ((> (avl-tree-node-balance br) 0) 318 ((> (avl-tree-node-balance br) 0)
333 (avl-tree-node-set-balance br 0) 319 (avl-tree-node-set-balance br 0)
@@ -371,20 +357,16 @@
371 (cond 357 (cond
372 ((null br) 358 ((null br)
373 ;; Data not in tree, insert it. 359 ;; Data not in tree, insert it.
374 (avl-tree-node-set-branch root branch 360 (avl-tree-node-set-branch
375 (avl-tree-node-create nil nil data 0)) 361 root branch (avl-tree-node-create nil nil data 0))
376 t) 362 t)
377 363
378 ((funcall cmpfun data (avl-tree-node-data br)) 364 ((funcall cmpfun data (avl-tree-node-data br))
379 (and (avl-tree-do-enter cmpfun 365 (and (avl-tree-do-enter cmpfun br 0 data)
380 br
381 0 data)
382 (avl-tree-enter-balance2 root branch))) 366 (avl-tree-enter-balance2 root branch)))
383 367
384 ((funcall cmpfun (avl-tree-node-data br) data) 368 ((funcall cmpfun (avl-tree-node-data br) data)
385 (and (avl-tree-do-enter cmpfun 369 (and (avl-tree-do-enter cmpfun br 1 data)
386 br
387 1 data)
388 (avl-tree-enter-balance1 root branch))) 370 (avl-tree-enter-balance1 root branch)))
389 371
390 (t 372 (t
@@ -424,10 +406,11 @@
424 ;; Highly recursive. INTERNAL USE ONLY. 406 ;; Highly recursive. INTERNAL USE ONLY.
425 (if (null root) 407 (if (null root)
426 nil 408 nil
427 (avl-tree-node-create (avl-tree-do-copy (avl-tree-node-left root)) 409 (avl-tree-node-create
428 (avl-tree-do-copy (avl-tree-node-right root)) 410 (avl-tree-do-copy (avl-tree-node-left root))
429 (avl-tree-node-data root) 411 (avl-tree-do-copy (avl-tree-node-right root))
430 (avl-tree-node-balance root)))) 412 (avl-tree-node-data root)
413 (avl-tree-node-balance root))))
431 414
432 415
433;;; ================================================================ 416;;; ================================================================
@@ -488,7 +471,6 @@ If there is no such element in the tree, the value is nil."
488 (setq node (avl-tree-node-right node))) 471 (setq node (avl-tree-node-right node)))
489 (t 472 (t
490 (setq found t)))) 473 (setq found t))))
491
492 (if node 474 (if node
493 (avl-tree-node-data node) 475 (avl-tree-node-data node)
494 nil))) 476 nil)))
@@ -497,9 +479,9 @@ If there is no such element in the tree, the value is nil."
497 "Apply MAP-FUNCTION to all elements in the avl tree TREE." 479 "Apply MAP-FUNCTION to all elements in the avl tree TREE."
498 (avl-tree-mapc 480 (avl-tree-mapc
499 (function (lambda (node) 481 (function (lambda (node)
500 (avl-tree-node-set-data node 482 (avl-tree-node-set-data
501 (funcall __map-function__ 483 node (funcall __map-function__
502 (avl-tree-node-data node))))) 484 (avl-tree-node-data node)))))
503 (avl-tree-root tree))) 485 (avl-tree-root tree)))
504 486
505(defun avl-tree-first (tree) 487(defun avl-tree-first (tree)
@@ -524,29 +506,30 @@ If there is no such element in the tree, the value is nil."
524 506
525(defun avl-tree-copy (tree) 507(defun avl-tree-copy (tree)
526 "Return a copy of the avl tree TREE." 508 "Return a copy of the avl tree TREE."
527 (let ((new-tree (avl-tree-create 509 (let ((new-tree (avl-tree-create (avl-tree-cmpfun tree))))
528 (avl-tree-cmpfun tree))))
529 (avl-tree-node-set-left (avl-tree-dummyroot new-tree) 510 (avl-tree-node-set-left (avl-tree-dummyroot new-tree)
530 (avl-tree-do-copy (avl-tree-root tree))) 511 (avl-tree-do-copy (avl-tree-root tree)))
531 new-tree)) 512 new-tree))
532 513
533(defun avl-tree-flatten (tree) 514(defun avl-tree-flatten (tree)
534 "Return a sorted list containing all elements of TREE." 515 "Return a sorted list containing all elements of TREE."
535 (nreverse 516 (nreverse
536 (let ((treelist nil)) 517 (let ((treelist nil))
537 (avl-tree-mapc (function (lambda (node) 518 (avl-tree-mapc
538 (setq treelist (cons (avl-tree-node-data node) 519 (function (lambda (node)
539 treelist)))) 520 (setq treelist (cons (avl-tree-node-data node)
540 (avl-tree-root tree)) 521 treelist))))
522 (avl-tree-root tree))
541 treelist))) 523 treelist)))
542 524
543(defun avl-tree-size (tree) 525(defun avl-tree-size (tree)
544 "Return the number of elements in TREE." 526 "Return the number of elements in TREE."
545 (let ((treesize 0)) 527 (let ((treesize 0))
546 (avl-tree-mapc (function (lambda (data) 528 (avl-tree-mapc
547 (setq treesize (1+ treesize)) 529 (function (lambda (data)
548 data)) 530 (setq treesize (1+ treesize))
549 (avl-tree-root tree)) 531 data))
532 (avl-tree-root tree))
550 treesize)) 533 treesize))
551 534
552(defun avl-tree-clear (tree) 535(defun avl-tree-clear (tree)