diff options
| author | Andreas Politz | 2017-10-06 11:59:54 +0200 |
|---|---|---|
| committer | Andreas Politz | 2017-10-06 11:59:54 +0200 |
| commit | 3945c019ecc8bea75bf868bb388fa56881cb82b6 (patch) | |
| tree | aadb3c23972b188ad089458b2039fa5bffa046b0 /src | |
| parent | bb9ab6f5c06e8589ac6635e9700dd20e0c925625 (diff) | |
| download | emacs-3945c019ecc8bea75bf868bb388fa56881cb82b6.tar.gz emacs-3945c019ecc8bea75bf868bb388fa56881cb82b6.zip | |
Add a function collecting all interval nodes
* src/itree.c (interval_tree_nodes): New function
Diffstat (limited to 'src')
| -rw-r--r-- | src/itree.c | 22 | ||||
| -rw-r--r-- | src/itree.h | 1 |
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 | |||
| 413 | void | ||
| 414 | interval_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 *); | |||
| 85 | struct interval_node *interval_tree_iter_next(struct interval_tree *); | 85 | struct interval_node *interval_tree_iter_next(struct interval_tree *); |
| 86 | void interval_tree_insert_gap(struct interval_tree *, ptrdiff_t, ptrdiff_t); | 86 | void interval_tree_insert_gap(struct interval_tree *, ptrdiff_t, ptrdiff_t); |
| 87 | void interval_tree_delete_gap(struct interval_tree *, ptrdiff_t, ptrdiff_t); | 87 | void interval_tree_delete_gap(struct interval_tree *, ptrdiff_t, ptrdiff_t); |
| 88 | void interval_tree_nodes (struct interval_tree *tree, struct interval_node **nodes, enum interval_tree_order order); | ||
| 88 | #endif | 89 | #endif |