summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp/avl-tree.el
diff options
context:
space:
mode:
authorMichael R. Mauger <michael@mauger.com>2017-08-06 20:58:08 -0400
committerMichael R. Mauger <michael@mauger.com>2017-08-06 20:58:08 -0400
commit6e2c0929bac8d3896d0472222cd3e6b77cb24c35 (patch)
tree62668da72d88140958ed22273a6ed6557bc61a4a /lisp/emacs-lisp/avl-tree.el
parentdf1a71272e5cdd10b511e2ffd702ca50ddd8a773 (diff)
parentc2f1830d69f5a5e20dac6fcbf3af4d51afba92bd (diff)
downloademacs-6e2c0929bac8d3896d0472222cd3e6b77cb24c35.tar.gz
emacs-6e2c0929bac8d3896d0472222cd3e6b77cb24c35.tar.bz2
emacs-6e2c0929bac8d3896d0472222cd3e6b77cb24c35.zip
Merge branch 'master' of git.sv.gnu.org:/srv/git/emacs
Diffstat (limited to 'lisp/emacs-lisp/avl-tree.el')
-rw-r--r--lisp/emacs-lisp/avl-tree.el17
1 files changed, 16 insertions, 1 deletions
diff --git a/lisp/emacs-lisp/avl-tree.el b/lisp/emacs-lisp/avl-tree.el
index 17f1ffa9f61..32f7d2c6d8d 100644
--- a/lisp/emacs-lisp/avl-tree.el
+++ b/lisp/emacs-lisp/avl-tree.el
@@ -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