diff options
-rw-r--r-- | pjlib/include/pj/list.h | 10 | ||||
-rw-r--r-- | pjlib/include/pj/list_i.h | 14 |
2 files changed, 24 insertions, 0 deletions
diff --git a/pjlib/include/pj/list.h b/pjlib/include/pj/list.h index 4f2e5145..24328dec 100644 --- a/pjlib/include/pj/list.h +++ b/pjlib/include/pj/list.h @@ -250,6 +250,16 @@ PJ_IDECL(pj_list_type*) pj_list_search(pj_list_type *list, void *value, /** + * Traverse the list to get the number of elements in the list. + * + * @param list The list head. + * + * @return Number of elements. + */ +PJ_IDECL(pj_size_t) pj_list_size(pj_list_type *list); + + +/** * @} */ diff --git a/pjlib/include/pj/list_i.h b/pjlib/include/pj/list_i.h index c6d95c80..2a8bf582 100644 --- a/pjlib/include/pj/list_i.h +++ b/pjlib/include/pj/list_i.h @@ -116,3 +116,17 @@ pj_list_search(pj_list_type *list, void *value, return p==list ? NULL : p; } + +PJ_IDEF(pj_size_t) pj_list_size(pj_list_type *list) +{ + pj_list *node = (pj_list*) ((pj_list*)list)->next; + pj_size_t count = 0; + + while (node != list) { + ++count; + node = node->next; + } + + return count; +} + |