aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lisp/emacs-lisp/avl-tree.el190
1 files changed, 95 insertions, 95 deletions
diff --git a/lisp/emacs-lisp/avl-tree.el b/lisp/emacs-lisp/avl-tree.el
index 63e88ac21f9..0e37e718250 100644
--- a/lisp/emacs-lisp/avl-tree.el
+++ b/lisp/emacs-lisp/avl-tree.el
@@ -54,38 +54,38 @@
54 54
55;;; Code: 55;;; Code:
56 56
57(defmacro elib-node-left (node) 57(defmacro avl-tree-node-left (node)
58 ;; Return the left pointer of NODE. 58 ;; Return the left pointer of NODE.
59 `(aref ,node 0)) 59 `(aref ,node 0))
60 60
61(defmacro elib-node-right (node) 61(defmacro avl-tree-node-right (node)
62 ;; Return the right pointer of NODE. 62 ;; Return the right pointer of NODE.
63 `(aref ,node 1)) 63 `(aref ,node 1))
64 64
65(defmacro elib-node-data (node) 65(defmacro avl-tree-node-data (node)
66 ;; Return the data of NODE. 66 ;; Return the data of NODE.
67 `(aref ,node 2)) 67 `(aref ,node 2))
68 68
69(defmacro elib-node-set-left (node newleft) 69(defmacro avl-tree-node-set-left (node newleft)
70 ;; Set the left pointer of NODE to NEWLEFT. 70 ;; Set the left pointer of NODE to NEWLEFT.
71 `(aset ,node 0 ,newleft)) 71 `(aset ,node 0 ,newleft))
72 72
73(defmacro elib-node-set-right (node newright) 73(defmacro avl-tree-node-set-right (node newright)
74 ;; Set the right pointer of NODE to NEWRIGHT. 74 ;; Set the right pointer of NODE to NEWRIGHT.
75 `(aset ,node 1 ,newright)) 75 `(aset ,node 1 ,newright))
76 76
77(defmacro elib-node-set-data (node newdata) 77(defmacro avl-tree-node-set-data (node newdata)
78 ;; Set the data of NODE to NEWDATA. 78 ;; Set the data of NODE to NEWDATA.
79 `(aset ,node 2 ,newdata)) 79 `(aset ,node 2 ,newdata))
80 80
81(defmacro elib-node-branch (node branch) 81(defmacro avl-tree-node-branch (node branch)
82 ;; Get value of a branch of a node. 82 ;; Get value of a branch of a node.
83 ;; 83 ;;
84 ;; NODE is the node, and BRANCH is the branch. 84 ;; NODE is the node, and BRANCH is the branch.
85 ;; 0 for left pointer, 1 for right pointer and 2 for the data." 85 ;; 0 for left pointer, 1 for right pointer and 2 for the data."
86 `(aref ,node ,branch)) 86 `(aref ,node ,branch))
87 87
88(defmacro elib-node-set-branch (node branch newval) 88(defmacro avl-tree-node-set-branch (node branch newval)
89 ;; Set value of a branch of a node. 89 ;; Set value of a branch of a node.
90 ;; 90 ;;
91 ;; NODE is the node, and BRANCH is the branch. 91 ;; NODE is the node, and BRANCH is the branch.
@@ -114,7 +114,7 @@
114 114
115(defmacro avl-tree-root (tree) 115(defmacro avl-tree-root (tree)
116 ;; Return the root node for an avl-tree. INTERNAL USE ONLY. 116 ;; Return the root node for an avl-tree. INTERNAL USE ONLY.
117 `(elib-node-left (car (cdr ,tree)))) 117 `(avl-tree-node-left (car (cdr ,tree))))
118 118
119(defmacro avl-tree-dummyroot (tree) 119(defmacro avl-tree-dummyroot (tree)
120 ;; Return the dummy node of an avl-tree. INTERNAL USE ONLY. 120 ;; Return the dummy node of an avl-tree. INTERNAL USE ONLY.
@@ -129,7 +129,7 @@
129 129
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 (elib-node-branch node branch)) 132 (let* ((br (avl-tree-node-branch node branch))
133 p1 133 p1
134 b1 134 b1
135 p2 135 p2
@@ -146,13 +146,13 @@
146 146
147 (t 147 (t
148 ;; Rebalance. 148 ;; Rebalance.
149 (setq p1 (elib-node-right br) 149 (setq p1 (avl-tree-node-right br)
150 b1 (avl-tree-node-balance p1)) 150 b1 (avl-tree-node-balance p1))
151 (if (>= b1 0) 151 (if (>= b1 0)
152 ;; Single RR rotation. 152 ;; Single RR rotation.
153 (progn 153 (progn
154 (elib-node-set-right br (elib-node-left p1)) 154 (avl-tree-node-set-right br (avl-tree-node-left p1))
155 (elib-node-set-left p1 br) 155 (avl-tree-node-set-left p1 br)
156 (if (= 0 b1) 156 (if (= 0 b1)
157 (progn 157 (progn
158 (avl-tree-node-set-balance br +1) 158 (avl-tree-node-set-balance br +1)
@@ -161,28 +161,28 @@
161 (avl-tree-node-set-balance br 0) 161 (avl-tree-node-set-balance br 0)
162 (avl-tree-node-set-balance p1 0) 162 (avl-tree-node-set-balance p1 0)
163 (setq result t)) 163 (setq result t))
164 (elib-node-set-branch node branch p1) 164 (avl-tree-node-set-branch node branch p1)
165 result) 165 result)
166 166
167 ;; Double RL rotation. 167 ;; Double RL rotation.
168 (setq p2 (elib-node-left p1) 168 (setq p2 (avl-tree-node-left p1)
169 b2 (avl-tree-node-balance p2)) 169 b2 (avl-tree-node-balance p2))
170 (elib-node-set-left p1 (elib-node-right p2)) 170 (avl-tree-node-set-left p1 (avl-tree-node-right p2))
171 (elib-node-set-right p2 p1) 171 (avl-tree-node-set-right p2 p1)
172 (elib-node-set-right br (elib-node-left p2)) 172 (avl-tree-node-set-right br (avl-tree-node-left p2))
173 (elib-node-set-left p2 br) 173 (avl-tree-node-set-left p2 br)
174 (if (> b2 0) 174 (if (> b2 0)
175 (avl-tree-node-set-balance br -1) 175 (avl-tree-node-set-balance br -1)
176 (avl-tree-node-set-balance br 0)) 176 (avl-tree-node-set-balance br 0))
177 (if (< b2 0) 177 (if (< b2 0)
178 (avl-tree-node-set-balance p1 +1) 178 (avl-tree-node-set-balance p1 +1)
179 (avl-tree-node-set-balance p1 0)) 179 (avl-tree-node-set-balance p1 0))
180 (elib-node-set-branch node branch p2) 180 (avl-tree-node-set-branch node branch p2)
181 (avl-tree-node-set-balance p2 0) 181 (avl-tree-node-set-balance p2 0)
182 t))))) 182 t)))))
183 183
184(defun avl-tree-del-balance2 (node branch) 184(defun avl-tree-del-balance2 (node branch)
185 (let* ((br (elib-node-branch node branch)) 185 (let* ((br (avl-tree-node-branch node branch))
186 p1 186 p1
187 b1 187 b1
188 p2 188 p2
@@ -199,13 +199,13 @@
199 199
200 (t 200 (t
201 ;; Rebalance. 201 ;; Rebalance.
202 (setq p1 (elib-node-left br) 202 (setq p1 (avl-tree-node-left br)
203 b1 (avl-tree-node-balance p1)) 203 b1 (avl-tree-node-balance p1))
204 (if (<= b1 0) 204 (if (<= b1 0)
205 ;; Single LL rotation. 205 ;; Single LL rotation.
206 (progn 206 (progn
207 (elib-node-set-left br (elib-node-right p1)) 207 (avl-tree-node-set-left br (avl-tree-node-right p1))
208 (elib-node-set-right p1 br) 208 (avl-tree-node-set-right p1 br)
209 (if (= 0 b1) 209 (if (= 0 b1)
210 (progn 210 (progn
211 (avl-tree-node-set-balance br -1) 211 (avl-tree-node-set-balance br -1)
@@ -214,61 +214,61 @@
214 (avl-tree-node-set-balance br 0) 214 (avl-tree-node-set-balance br 0)
215 (avl-tree-node-set-balance p1 0) 215 (avl-tree-node-set-balance p1 0)
216 (setq result t)) 216 (setq result t))
217 (elib-node-set-branch node branch p1) 217 (avl-tree-node-set-branch node branch p1)
218 result) 218 result)
219 219
220 ;; Double LR rotation. 220 ;; Double LR rotation.
221 (setq p2 (elib-node-right p1) 221 (setq p2 (avl-tree-node-right p1)
222 b2 (avl-tree-node-balance p2)) 222 b2 (avl-tree-node-balance p2))
223 (elib-node-set-right p1 (elib-node-left p2)) 223 (avl-tree-node-set-right p1 (avl-tree-node-left p2))
224 (elib-node-set-left p2 p1) 224 (avl-tree-node-set-left p2 p1)
225 (elib-node-set-left br (elib-node-right p2)) 225 (avl-tree-node-set-left br (avl-tree-node-right p2))
226 (elib-node-set-right p2 br) 226 (avl-tree-node-set-right p2 br)
227 (if (< b2 0) 227 (if (< b2 0)
228 (avl-tree-node-set-balance br +1) 228 (avl-tree-node-set-balance br +1)
229 (avl-tree-node-set-balance br 0)) 229 (avl-tree-node-set-balance br 0))
230 (if (> b2 0) 230 (if (> b2 0)
231 (avl-tree-node-set-balance p1 -1) 231 (avl-tree-node-set-balance p1 -1)
232 (avl-tree-node-set-balance p1 0)) 232 (avl-tree-node-set-balance p1 0))
233 (elib-node-set-branch node branch p2) 233 (avl-tree-node-set-branch node branch p2)
234 (avl-tree-node-set-balance p2 0) 234 (avl-tree-node-set-balance p2 0)
235 t))))) 235 t)))))
236 236
237(defun avl-tree-do-del-internal (node branch q) 237(defun avl-tree-do-del-internal (node branch q)
238 238
239 (let* ((br (elib-node-branch node branch))) 239 (let* ((br (avl-tree-node-branch node branch)))
240 (if (elib-node-right br) 240 (if (avl-tree-node-right br)
241 (if (avl-tree-do-del-internal br +1 q) 241 (if (avl-tree-do-del-internal br +1 q)
242 (avl-tree-del-balance2 node branch)) 242 (avl-tree-del-balance2 node branch))
243 (elib-node-set-data q (elib-node-data br)) 243 (avl-tree-node-set-data q (avl-tree-node-data br))
244 (elib-node-set-branch node branch 244 (avl-tree-node-set-branch node branch
245 (elib-node-left br)) 245 (avl-tree-node-left br))
246 t))) 246 t)))
247 247
248(defun avl-tree-do-delete (cmpfun root branch data) 248(defun avl-tree-do-delete (cmpfun root branch data)
249 ;; Return t if the height of the tree has shrunk. 249 ;; Return t if the height of the tree has shrunk.
250 (let* ((br (elib-node-branch root branch))) 250 (let* ((br (avl-tree-node-branch root branch)))
251 (cond 251 (cond
252 ((null br) 252 ((null br)
253 nil) 253 nil)
254 254
255 ((funcall cmpfun data (elib-node-data br)) 255 ((funcall cmpfun data (avl-tree-node-data br))
256 (if (avl-tree-do-delete cmpfun br 0 data) 256 (if (avl-tree-do-delete cmpfun br 0 data)
257 (avl-tree-del-balance1 root branch))) 257 (avl-tree-del-balance1 root branch)))
258 258
259 ((funcall cmpfun (elib-node-data br) data) 259 ((funcall cmpfun (avl-tree-node-data br) data)
260 (if (avl-tree-do-delete cmpfun br 1 data) 260 (if (avl-tree-do-delete cmpfun br 1 data)
261 (avl-tree-del-balance2 root branch))) 261 (avl-tree-del-balance2 root branch)))
262 262
263 (t 263 (t
264 ;; Found it. Let's delete it. 264 ;; Found it. Let's delete it.
265 (cond 265 (cond
266 ((null (elib-node-right br)) 266 ((null (avl-tree-node-right br))
267 (elib-node-set-branch root branch (elib-node-left br)) 267 (avl-tree-node-set-branch root branch (avl-tree-node-left br))
268 t) 268 t)
269 269
270 ((null (elib-node-left br)) 270 ((null (avl-tree-node-left br))
271 (elib-node-set-branch root branch (elib-node-right br)) 271 (avl-tree-node-set-branch root branch (avl-tree-node-right br))
272 t) 272 t)
273 273
274 (t 274 (t
@@ -280,7 +280,7 @@
280 280
281(defun avl-tree-enter-balance1 (node branch) 281(defun avl-tree-enter-balance1 (node branch)
282 ;; Rebalance a tree and return t if the height of the tree has grown. 282 ;; Rebalance a tree and return t if the height of the tree has grown.
283 (let* ((br (elib-node-branch node branch)) 283 (let* ((br (avl-tree-node-branch node branch))
284 p1 284 p1
285 p2 285 p2
286 b2 286 b2
@@ -296,35 +296,35 @@
296 296
297 (t 297 (t
298 ;; Tree has grown => Rebalance. 298 ;; Tree has grown => Rebalance.
299 (setq p1 (elib-node-right br)) 299 (setq p1 (avl-tree-node-right br))
300 (if (> (avl-tree-node-balance p1) 0) 300 (if (> (avl-tree-node-balance p1) 0)
301 ;; Single RR rotation. 301 ;; Single RR rotation.
302 (progn 302 (progn
303 (elib-node-set-right br (elib-node-left p1)) 303 (avl-tree-node-set-right br (avl-tree-node-left p1))
304 (elib-node-set-left p1 br) 304 (avl-tree-node-set-left p1 br)
305 (avl-tree-node-set-balance br 0) 305 (avl-tree-node-set-balance br 0)
306 (elib-node-set-branch node branch p1)) 306 (avl-tree-node-set-branch node branch p1))
307 307
308 ;; Double RL rotation. 308 ;; Double RL rotation.
309 (setq p2 (elib-node-left p1) 309 (setq p2 (avl-tree-node-left p1)
310 b2 (avl-tree-node-balance p2)) 310 b2 (avl-tree-node-balance p2))
311 (elib-node-set-left p1 (elib-node-right p2)) 311 (avl-tree-node-set-left p1 (avl-tree-node-right p2))
312 (elib-node-set-right p2 p1) 312 (avl-tree-node-set-right p2 p1)
313 (elib-node-set-right br (elib-node-left p2)) 313 (avl-tree-node-set-right br (avl-tree-node-left p2))
314 (elib-node-set-left p2 br) 314 (avl-tree-node-set-left p2 br)
315 (if (> b2 0) 315 (if (> b2 0)
316 (avl-tree-node-set-balance br -1) 316 (avl-tree-node-set-balance br -1)
317 (avl-tree-node-set-balance br 0)) 317 (avl-tree-node-set-balance br 0))
318 (if (< b2 0) 318 (if (< b2 0)
319 (avl-tree-node-set-balance p1 +1) 319 (avl-tree-node-set-balance p1 +1)
320 (avl-tree-node-set-balance p1 0)) 320 (avl-tree-node-set-balance p1 0))
321 (elib-node-set-branch node branch p2)) 321 (avl-tree-node-set-branch node branch p2))
322 (avl-tree-node-set-balance (elib-node-branch node branch) 0) 322 (avl-tree-node-set-balance (avl-tree-node-branch node branch) 0)
323 nil)))) 323 nil))))
324 324
325(defun avl-tree-enter-balance2 (node branch) 325(defun avl-tree-enter-balance2 (node branch)
326 ;; Return t if the tree has grown. 326 ;; Return t if the tree has grown.
327 (let* ((br (elib-node-branch node branch)) 327 (let* ((br (avl-tree-node-branch node branch))
328 p1 328 p1
329 p2 329 p2
330 b2) 330 b2)
@@ -339,56 +339,56 @@
339 339
340 (t 340 (t
341 ;; Balance was -1 => Rebalance. 341 ;; Balance was -1 => Rebalance.
342 (setq p1 (elib-node-left br)) 342 (setq p1 (avl-tree-node-left br))
343 (if (< (avl-tree-node-balance p1) 0) 343 (if (< (avl-tree-node-balance p1) 0)
344 ;; Single LL rotation. 344 ;; Single LL rotation.
345 (progn 345 (progn
346 (elib-node-set-left br (elib-node-right p1)) 346 (avl-tree-node-set-left br (avl-tree-node-right p1))
347 (elib-node-set-right p1 br) 347 (avl-tree-node-set-right p1 br)
348 (avl-tree-node-set-balance br 0) 348 (avl-tree-node-set-balance br 0)
349 (elib-node-set-branch node branch p1)) 349 (avl-tree-node-set-branch node branch p1))
350 350
351 ;; Double LR rotation. 351 ;; Double LR rotation.
352 (setq p2 (elib-node-right p1) 352 (setq p2 (avl-tree-node-right p1)
353 b2 (avl-tree-node-balance p2)) 353 b2 (avl-tree-node-balance p2))
354 (elib-node-set-right p1 (elib-node-left p2)) 354 (avl-tree-node-set-right p1 (avl-tree-node-left p2))
355 (elib-node-set-left p2 p1) 355 (avl-tree-node-set-left p2 p1)
356 (elib-node-set-left br (elib-node-right p2)) 356 (avl-tree-node-set-left br (avl-tree-node-right p2))
357 (elib-node-set-right p2 br) 357 (avl-tree-node-set-right p2 br)
358 (if (< b2 0) 358 (if (< b2 0)
359 (avl-tree-node-set-balance br +1) 359 (avl-tree-node-set-balance br +1)
360 (avl-tree-node-set-balance br 0)) 360 (avl-tree-node-set-balance br 0))
361 (if (> b2 0) 361 (if (> b2 0)
362 (avl-tree-node-set-balance p1 -1) 362 (avl-tree-node-set-balance p1 -1)
363 (avl-tree-node-set-balance p1 0)) 363 (avl-tree-node-set-balance p1 0))
364 (elib-node-set-branch node branch p2)) 364 (avl-tree-node-set-branch node branch p2))
365 (avl-tree-node-set-balance (elib-node-branch node branch) 0) 365 (avl-tree-node-set-balance (avl-tree-node-branch node branch) 0)
366 nil)))) 366 nil))))
367 367
368(defun avl-tree-do-enter (cmpfun root branch data) 368(defun avl-tree-do-enter (cmpfun root branch data)
369 ;; Return t if height of tree ROOT has grown. INTERNAL USE ONLY. 369 ;; Return t if height of tree ROOT has grown. INTERNAL USE ONLY.
370 (let ((br (elib-node-branch root branch))) 370 (let ((br (avl-tree-node-branch root branch)))
371 (cond 371 (cond
372 ((null br) 372 ((null br)
373 ;; Data not in tree, insert it. 373 ;; Data not in tree, insert it.
374 (elib-node-set-branch root branch 374 (avl-tree-node-set-branch root branch
375 (avl-tree-node-create nil nil data 0)) 375 (avl-tree-node-create nil nil data 0))
376 t) 376 t)
377 377
378 ((funcall cmpfun data (elib-node-data br)) 378 ((funcall cmpfun data (avl-tree-node-data br))
379 (and (avl-tree-do-enter cmpfun 379 (and (avl-tree-do-enter cmpfun
380 br 380 br
381 0 data) 381 0 data)
382 (avl-tree-enter-balance2 root branch))) 382 (avl-tree-enter-balance2 root branch)))
383 383
384 ((funcall cmpfun (elib-node-data br) data) 384 ((funcall cmpfun (avl-tree-node-data br) data)
385 (and (avl-tree-do-enter cmpfun 385 (and (avl-tree-do-enter cmpfun
386 br 386 br
387 1 data) 387 1 data)
388 (avl-tree-enter-balance1 root branch))) 388 (avl-tree-enter-balance1 root branch)))
389 389
390 (t 390 (t
391 (elib-node-set-data br data) 391 (avl-tree-node-set-data br data)
392 nil)))) 392 nil))))
393 393
394;; ---------------------------------------------------------------- 394;; ----------------------------------------------------------------
@@ -405,16 +405,16 @@
405 (push nil stack) 405 (push nil stack)
406 (while node 406 (while node
407 (if (and go-left 407 (if (and go-left
408 (elib-node-left node)) 408 (avl-tree-node-left node))
409 ;; Do the left subtree first. 409 ;; Do the left subtree first.
410 (progn 410 (progn
411 (push node stack) 411 (push node stack)
412 (setq node (elib-node-left node))) 412 (setq node (avl-tree-node-left node)))
413 ;; Apply the function... 413 ;; Apply the function...
414 (funcall map-function node) 414 (funcall map-function node)
415 ;; and do the right subtree. 415 ;; and do the right subtree.
416 (if (elib-node-right node) 416 (if (avl-tree-node-right node)
417 (setq node (elib-node-right node) 417 (setq node (avl-tree-node-right node)
418 go-left t) 418 go-left t)
419 (setq node (pop stack) 419 (setq node (pop stack)
420 go-left nil)))))) 420 go-left nil))))))
@@ -424,9 +424,9 @@
424 ;; Highly recursive. INTERNAL USE ONLY. 424 ;; Highly recursive. INTERNAL USE ONLY.
425 (if (null root) 425 (if (null root)
426 nil 426 nil
427 (avl-tree-node-create (avl-tree-do-copy (elib-node-left root)) 427 (avl-tree-node-create (avl-tree-do-copy (avl-tree-node-left root))
428 (avl-tree-do-copy (elib-node-right root)) 428 (avl-tree-do-copy (avl-tree-node-right root))
429 (elib-node-data root) 429 (avl-tree-node-data root)
430 (avl-tree-node-balance root)))) 430 (avl-tree-node-balance root))))
431 431
432 432
@@ -482,24 +482,24 @@ If there is no such element in the tree, the value is nil."
482 (while (and node 482 (while (and node
483 (not found)) 483 (not found))
484 (cond 484 (cond
485 ((funcall compare-function data (elib-node-data node)) 485 ((funcall compare-function data (avl-tree-node-data node))
486 (setq node (elib-node-left node))) 486 (setq node (avl-tree-node-left node)))
487 ((funcall compare-function (elib-node-data node) data) 487 ((funcall compare-function (avl-tree-node-data node) data)
488 (setq node (elib-node-right node))) 488 (setq node (avl-tree-node-right node)))
489 (t 489 (t
490 (setq found t)))) 490 (setq found t))))
491 491
492 (if node 492 (if node
493 (elib-node-data node) 493 (avl-tree-node-data node)
494 nil))) 494 nil)))
495 495
496(defun avl-tree-map (__map-function__ tree) 496(defun avl-tree-map (__map-function__ tree)
497 "Apply MAP-FUNCTION to all elements in the avl tree TREE." 497 "Apply MAP-FUNCTION to all elements in the avl tree TREE."
498 (avl-tree-mapc 498 (avl-tree-mapc
499 (function (lambda (node) 499 (function (lambda (node)
500 (elib-node-set-data node 500 (avl-tree-node-set-data node
501 (funcall __map-function__ 501 (funcall __map-function__
502 (elib-node-data node))))) 502 (avl-tree-node-data node)))))
503 (avl-tree-root tree))) 503 (avl-tree-root tree)))
504 504
505(defun avl-tree-first (tree) 505(defun avl-tree-first (tree)
@@ -507,9 +507,9 @@ If there is no such element in the tree, the value is nil."
507 (let ((node (avl-tree-root tree))) 507 (let ((node (avl-tree-root tree)))
508 (if node 508 (if node
509 (progn 509 (progn
510 (while (elib-node-left node) 510 (while (avl-tree-node-left node)
511 (setq node (elib-node-left node))) 511 (setq node (avl-tree-node-left node)))
512 (elib-node-data node)) 512 (avl-tree-node-data node))
513 nil))) 513 nil)))
514 514
515(defun avl-tree-last (tree) 515(defun avl-tree-last (tree)
@@ -517,16 +517,16 @@ If there is no such element in the tree, the value is nil."
517 (let ((node (avl-tree-root tree))) 517 (let ((node (avl-tree-root tree)))
518 (if node 518 (if node
519 (progn 519 (progn
520 (while (elib-node-right node) 520 (while (avl-tree-node-right node)
521 (setq node (elib-node-right node))) 521 (setq node (avl-tree-node-right node)))
522 (elib-node-data node)) 522 (avl-tree-node-data node))
523 nil))) 523 nil)))
524 524
525(defun avl-tree-copy (tree) 525(defun avl-tree-copy (tree)
526 "Return a copy of the avl tree TREE." 526 "Return a copy of the avl tree TREE."
527 (let ((new-tree (avl-tree-create 527 (let ((new-tree (avl-tree-create
528 (avl-tree-cmpfun tree)))) 528 (avl-tree-cmpfun tree))))
529 (elib-node-set-left (avl-tree-dummyroot new-tree) 529 (avl-tree-node-set-left (avl-tree-dummyroot new-tree)
530 (avl-tree-do-copy (avl-tree-root tree))) 530 (avl-tree-do-copy (avl-tree-root tree)))
531 new-tree)) 531 new-tree))
532 532
@@ -535,7 +535,7 @@ If there is no such element in the tree, the value is nil."
535 (nreverse 535 (nreverse
536 (let ((treelist nil)) 536 (let ((treelist nil))
537 (avl-tree-mapc (function (lambda (node) 537 (avl-tree-mapc (function (lambda (node)
538 (setq treelist (cons (elib-node-data node) 538 (setq treelist (cons (avl-tree-node-data node)
539 treelist)))) 539 treelist))))
540 (avl-tree-root tree)) 540 (avl-tree-root tree))
541 treelist))) 541 treelist)))
@@ -551,7 +551,7 @@ If there is no such element in the tree, the value is nil."
551 551
552(defun avl-tree-clear (tree) 552(defun avl-tree-clear (tree)
553 "Clear the avl tree TREE." 553 "Clear the avl tree TREE."
554 (elib-node-set-left (avl-tree-dummyroot tree) nil)) 554 (avl-tree-node-set-left (avl-tree-dummyroot tree) nil))
555 555
556(provide 'avl-tree) 556(provide 'avl-tree)
557 557