diff options
author | Avneesh Sachdev <avneesh@opensourcerouting.org> | 2012-08-17 08:19:50 -0700 |
---|---|---|
committer | David Lamparter <equinox@opensourcerouting.org> | 2012-09-26 21:50:48 +0200 |
commit | 28971c8cb1138700e87dc7da673e59b5596bb51b (patch) | |
tree | 0e55c3f830681449cd96bb36eb04a6a1293d8b44 /babeld/util.c | |
parent | 67174041d2d9d8908f8b2c915bc0d186d8442c68 (diff) |
lib/table: add route_table_get_next() and iterator
* lib/table.[ch]
- Add a function (route_table_get_next()) to get the route_node in
a tree that succeeds a given prefix in iteration order.
This allows one to reliably walk nodes in a tree while allowing
modifications, and is useful for achieving scale and
performance. Other approaches are also possible -- the main plus
point of this one is that it does not require any state about
the walk to be maintained in the table data structures.
- Add an iterator for walking the nodes in a tree. This introduces
a new structure (route_table_iter_t) and the following main
functions.
route_table_iter_init()
route_table_iter_pause()
route_table_iter_next()
route_table_iter_cleanup()
The iterator normally uses node pointers and the existing
route_next() function to walk nodes efficiently. When an
iteration is 'paused' with route_table_iter_pause(), it stores
the last prefix processed. The next call to
route_table_iter_next() transparently invokes
route_table_get_next() with the prefix to resume iteration.
* bgpd/bgp_table.[ch]
Add wrappers for the new table features described above.
* tests/table_test.c
Add tests for the new table code.
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Diffstat (limited to 'babeld/util.c')
0 files changed, 0 insertions, 0 deletions