Asterisk - The Open Source Telephony Project
18.5.0
|
When we need to walk through a container, we use an ao2_iterator to keep track of the current position. More...
#include <astobj2.h>
Data Fields | |
struct ao2_container * | c |
int | complete |
int | flags |
void * | last_node |
When we need to walk through a container, we use an ao2_iterator to keep track of the current position.
Because the navigation is typically done without holding the lock on the container across the loop, objects can be inserted or deleted or moved while we work. As a consequence, there is no guarantee that we manage to touch all the elements in the container, and it is possible that we touch the same object multiple times.
An iterator must be first initialized with ao2_iterator_init(), then we can use o = ao2_iterator_next() to move from one element to the next. Remember that the object returned by ao2_iterator_next() has its refcount incremented, and the reference must be explicitly released when done with it.
In addition, ao2_iterator_init() will hold a reference to the container being iterated and the last container node found. Thes objects will be unreffed when ao2_iterator_destroy() is called to free up the resources used by the iterator (if any).
Example:
The astobj2 iterator
Details are in the implementation of ao2_iterator_next()
struct ao2_container* c |
The container (Has a reference)
Definition at line 1843 of file astobj2.h.
Referenced by __ao2_iterator_next(), ao2_iterator_count(), ao2_iterator_destroy(), ao2_iterator_init(), and ao2_iterator_restart().
int complete |
Nonzero if the iteration has completed.
Definition at line 1847 of file astobj2.h.
Referenced by __ao2_iterator_next(), and ao2_iterator_restart().
int flags |
operation flags (enum ao2_iterator_flags)
Definition at line 1849 of file astobj2.h.
Referenced by __ao2_iterator_next(), ao2_iterator_destroy(), ao2_iterator_init(), and ao2_iterator_restart().
void* last_node |
Last container node (Has a reference)
Definition at line 1845 of file astobj2.h.
Referenced by __ao2_iterator_next(), and ao2_iterator_restart().