]> git.eshelyaron.com Git - emacs.git/commitdiff
Add a function collecting all interval nodes
authorAndreas Politz <politza@hochschule-trier.de>
Fri, 6 Oct 2017 09:59:54 +0000 (11:59 +0200)
committerAndreas Politz <politza@hochschule-trier.de>
Fri, 6 Oct 2017 09:59:54 +0000 (11:59 +0200)
* src/itree.c (interval_tree_nodes): New function

src/itree.c
src/itree.h

index 785c83ab798de713cf879225637a7a4da7a935d6..f43189cabe753e325d68a8b5648bca379a549c42 100644 (file)
@@ -404,6 +404,28 @@ interval_tree_validate (struct interval_tree *tree, struct interval_node *node)
   return node;
 }
 
+/* Fill memory pointed at via NODES with all nodes of TREE in the
+   given ORDER.
+
+   The size of NODES must be sufficiently large.
+ */
+
+void
+interval_tree_nodes (struct interval_tree *tree,
+                     struct interval_node **nodes,
+                     enum interval_tree_order order)
+{
+  struct interval_node *node;
+
+  interval_tree_iter_start (tree, PTRDIFF_MIN, PTRDIFF_MAX, order);
+  while ((node = interval_tree_iter_next (tree)))
+    {
+      *nodes = node;
+      ++nodes;
+    }
+  interval_tree_iter_finish (tree);
+}
+
 /* Start a generator iterating all intervals in [BEGIN,END) in the
    given ORDER. Only one iterator per tree can be running at any
    time.
index d35c5afc24c022d9a02d4a5b47ed686e61840b69..d685a69eb781bcdc63efcebb311dce05f97bcce3 100644 (file)
@@ -85,4 +85,5 @@ void interval_tree_iter_finish(struct interval_tree *);
 struct interval_node *interval_tree_iter_next(struct interval_tree *);
 void interval_tree_insert_gap(struct interval_tree *, ptrdiff_t, ptrdiff_t);
 void interval_tree_delete_gap(struct interval_tree *, ptrdiff_t, ptrdiff_t);
+void interval_tree_nodes (struct interval_tree *tree, struct interval_node **nodes, enum interval_tree_order order);
 #endif