aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Politz2017-10-06 11:59:54 +0200
committerAndreas Politz2017-10-06 11:59:54 +0200
commit3945c019ecc8bea75bf868bb388fa56881cb82b6 (patch)
treeaadb3c23972b188ad089458b2039fa5bffa046b0
parentbb9ab6f5c06e8589ac6635e9700dd20e0c925625 (diff)
downloademacs-3945c019ecc8bea75bf868bb388fa56881cb82b6.tar.gz
emacs-3945c019ecc8bea75bf868bb388fa56881cb82b6.zip
Add a function collecting all interval nodes
* src/itree.c (interval_tree_nodes): New function
-rw-r--r--src/itree.c22
-rw-r--r--src/itree.h1
2 files changed, 23 insertions, 0 deletions
diff --git a/src/itree.c b/src/itree.c
index 785c83ab798..f43189cabe7 100644
--- a/src/itree.c
+++ b/src/itree.c
@@ -404,6 +404,28 @@ interval_tree_validate (struct interval_tree *tree, struct interval_node *node)
404 return node; 404 return node;
405} 405}
406 406
407/* Fill memory pointed at via NODES with all nodes of TREE in the
408 given ORDER.
409
410 The size of NODES must be sufficiently large.
411 */
412
413void
414interval_tree_nodes (struct interval_tree *tree,
415 struct interval_node **nodes,
416 enum interval_tree_order order)
417{
418 struct interval_node *node;
419
420 interval_tree_iter_start (tree, PTRDIFF_MIN, PTRDIFF_MAX, order);
421 while ((node = interval_tree_iter_next (tree)))
422 {
423 *nodes = node;
424 ++nodes;
425 }
426 interval_tree_iter_finish (tree);
427}
428
407/* Start a generator iterating all intervals in [BEGIN,END) in the 429/* Start a generator iterating all intervals in [BEGIN,END) in the
408 given ORDER. Only one iterator per tree can be running at any 430 given ORDER. Only one iterator per tree can be running at any
409 time. 431 time.
diff --git a/src/itree.h b/src/itree.h
index d35c5afc24c..d685a69eb78 100644
--- a/src/itree.h
+++ b/src/itree.h
@@ -85,4 +85,5 @@ void interval_tree_iter_finish(struct interval_tree *);
85struct interval_node *interval_tree_iter_next(struct interval_tree *); 85struct interval_node *interval_tree_iter_next(struct interval_tree *);
86void interval_tree_insert_gap(struct interval_tree *, ptrdiff_t, ptrdiff_t); 86void interval_tree_insert_gap(struct interval_tree *, ptrdiff_t, ptrdiff_t);
87void interval_tree_delete_gap(struct interval_tree *, ptrdiff_t, ptrdiff_t); 87void interval_tree_delete_gap(struct interval_tree *, ptrdiff_t, ptrdiff_t);
88void interval_tree_nodes (struct interval_tree *tree, struct interval_node **nodes, enum interval_tree_order order);
88#endif 89#endif