mirror of https://gerrit.osmocom.org/libosmocore
stats: Add stat_item_for_each functions
This commit adds the following functions: stat_item_for_each_group Call a handler for each group stat_item_for_each_item Call a handler for each item of a group Sponsored-by: On-Waves ehf
This commit is contained in:
parent
423c1e5a4f
commit
c6a7108828
|
@ -107,6 +107,20 @@ int stat_item_discard(const struct stat_item *item, int32_t *idx);
|
||||||
/*! \brief Skip all values of all items and update idx accordingly */
|
/*! \brief Skip all values of all items and update idx accordingly */
|
||||||
int stat_item_discard_all(int32_t *idx);
|
int stat_item_discard_all(int32_t *idx);
|
||||||
|
|
||||||
|
typedef int (*stat_item_handler_t)(
|
||||||
|
struct stat_item_group *, struct stat_item *, void *);
|
||||||
|
|
||||||
|
typedef int (*stat_item_group_handler_t)(struct stat_item_group *, void *);
|
||||||
|
|
||||||
|
/*! \brief Iteate over all items
|
||||||
|
* \param[in] handle_item Call-back function, aborts if rc < 0
|
||||||
|
* \param[in] data Private data handed through to \a handle_item
|
||||||
|
*/
|
||||||
|
int stat_item_for_each_item(struct stat_item_group *statg,
|
||||||
|
stat_item_handler_t handle_item, void *data);
|
||||||
|
|
||||||
|
int stat_item_for_each_group(stat_item_group_handler_t handle_group, void *data);
|
||||||
|
|
||||||
static inline int32_t stat_item_get_last(const struct stat_item *item)
|
static inline int32_t stat_item_get_last(const struct stat_item *item)
|
||||||
{
|
{
|
||||||
return item->values[item->last_offs].value;
|
return item->values[item->last_offs].value;
|
||||||
|
|
|
@ -235,4 +235,34 @@ const struct stat_item *stat_item_get_by_name(
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int stat_item_for_each_item(struct stat_item_group *statg,
|
||||||
|
stat_item_handler_t handle_item, void *data)
|
||||||
|
{
|
||||||
|
int rc = 0;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < statg->desc->num_items; i++) {
|
||||||
|
struct stat_item *item = statg->items[i];
|
||||||
|
rc = handle_item(statg, item, data);
|
||||||
|
if (rc < 0)
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
int stat_item_for_each_group(stat_item_group_handler_t handle_group, void *data)
|
||||||
|
{
|
||||||
|
struct stat_item_group *statg;
|
||||||
|
int rc = 0;
|
||||||
|
|
||||||
|
llist_for_each_entry(statg, &stat_item_groups, list) {
|
||||||
|
rc = handle_group(statg, data);
|
||||||
|
if (rc < 0)
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
/*! @} */
|
/*! @} */
|
||||||
|
|
Loading…
Reference in New Issue