Function: avl-tree--do-enter
avl-tree--do-enter is a byte-compiled function defined in
avl-tree.el.gz.
Signature
(avl-tree--do-enter CMPFUN ROOT BRANCH DATA &optional UPDATEFUN)
Documentation
Enter DATA in BRANCH of ROOT node.
(See avl-tree-enter for UPDATEFUN).
Return cons cell (GREW . DATA), where GREW is t if height of tree ROOT has grown and nil otherwise, and DATA is the inserted data.
Source Code
;; Defined in /usr/src/emacs/lisp/emacs-lisp/avl-tree.el.gz
(defun avl-tree--do-enter (cmpfun root branch data &optional updatefun)
"Enter DATA in BRANCH of ROOT node.
\(See `avl-tree-enter' for UPDATEFUN).
Return cons cell (GREW . DATA), where GREW is t if height
of tree ROOT has grown and nil otherwise, and DATA is the
inserted data."
(let ((br (avl-tree--node-branch root branch)))
(cond
((null br)
;; Data not in tree, insert it.
(setf (avl-tree--node-branch root branch)
(avl-tree--node-create nil nil data 0))
(cons t data))
((funcall cmpfun data (avl-tree--node-data br))
(let ((ret (avl-tree--do-enter cmpfun br 0 data updatefun)))
(cons (and (car ret) (avl-tree--enter-balance root branch 0))
(cdr ret))))
((funcall cmpfun (avl-tree--node-data br) data)
(let ((ret (avl-tree--do-enter cmpfun br 1 data updatefun)))
(cons (and (car ret) (avl-tree--enter-balance root branch 1))
(cdr ret))))
;; Data already in tree, update it.
(t
(let ((newdata
(if updatefun
(funcall updatefun data (avl-tree--node-data br))
data)))
(if (or (funcall cmpfun newdata data)
(funcall cmpfun data newdata))
(error "avl-tree-enter: Updated data does not match existing data"))
(setf (avl-tree--node-data br) newdata)
(cons nil newdata)) ; return value
))))