diff options
Diffstat (limited to 'src/libstrongswan/utils')
-rw-r--r-- | src/libstrongswan/utils/iterator.h | 7 | ||||
-rw-r--r-- | src/libstrongswan/utils/linked_list.c | 11 |
2 files changed, 17 insertions, 1 deletions
diff --git a/src/libstrongswan/utils/iterator.h b/src/libstrongswan/utils/iterator.h index de81db8e9..7cc22c24b 100644 --- a/src/libstrongswan/utils/iterator.h +++ b/src/libstrongswan/utils/iterator.h @@ -44,6 +44,13 @@ typedef struct iterator_t iterator_t; struct iterator_t { /** + * @brief Return number of list items. + * + * @param this calling object + * @return number of list items + */ + int (*get_count) (iterator_t *this); + /** * @brief Iterate over all items. * * The easy way to iterate over items. diff --git a/src/libstrongswan/utils/linked_list.c b/src/libstrongswan/utils/linked_list.c index 64443434b..2d2917454 100644 --- a/src/libstrongswan/utils/linked_list.c +++ b/src/libstrongswan/utils/linked_list.c @@ -152,7 +152,15 @@ struct private_iterator_t { }; /** - * Implementation of iterator_t.has_next. + * Implementation of iterator_t.get_count. + */ +static int get_list_count(private_iterator_t *this) +{ + return this->list->count; +} + +/** + * Implementation of iterator_t.iterate. */ static bool iterate(private_iterator_t *this, void** value) { @@ -665,6 +673,7 @@ static iterator_t *create_iterator (private_linked_list_t *linked_list,bool forw { private_iterator_t *this = malloc_thing(private_iterator_t); + this->public.get_count = (bool (*) (iterator_t *this)) get_list_count; this->public.iterate = (bool (*) (iterator_t *this, void **value)) iterate; this->public.has_next = (bool (*) (iterator_t *this)) iterator_has_next; this->public.current = (status_t (*) (iterator_t *this, void **value)) iterator_current; |