mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2025-01-31 20:02:42 +00:00
Implement iterator generator for avl-trees.
* lisp/emacs-lisp/avl-tree.el (avl-tree-iter): New iter-defun.
This commit is contained in:
parent
929c60603c
commit
4b7f822cd5
@ -52,7 +52,7 @@
|
||||
;;; Code:
|
||||
|
||||
(eval-when-compile (require 'cl-lib))
|
||||
|
||||
(require 'generator)
|
||||
|
||||
|
||||
;; ================================================================
|
||||
@ -670,6 +670,21 @@ a null element stored in the AVL tree.)"
|
||||
(null (avl-tree--stack-store avl-tree-stack)))
|
||||
|
||||
|
||||
(iter-defun avl-tree-iter (tree &optional reverse)
|
||||
"Return an AVL tree iterator object.
|
||||
|
||||
Calling `iter-next' on this object will retrieve the next element
|
||||
from TREE. If REVERSE is non-nil, elements are returned in
|
||||
reverse order.
|
||||
|
||||
Note that any modification to TREE *immediately* invalidates all
|
||||
iterators created from TREE before the modification (in
|
||||
particular, calling `iter-next' will give unpredictable results)."
|
||||
(let ((stack (avl-tree-stack tree reverse)))
|
||||
(while (not (avl-tree-stack-empty-p stack))
|
||||
(iter-yield (avl-tree-stack-pop stack)))))
|
||||
|
||||
|
||||
(provide 'avl-tree)
|
||||
|
||||
;;; avl-tree.el ends here
|
||||
|
Loading…
Reference in New Issue
Block a user