#pragma once

/*! \file statistics.h
 *  \brief Common routines regarding statistics */

/*! structure representing a single counter */
struct osmo_counter {
	struct llist_head list;		/*!< \brief internal list head */
	const char *name;		/*!< \brief human-readable name */
	const char *description;	/*!< \brief humn-readable description */
	unsigned long value;		/*!< \brief current value */
};

/*! \brief Increment counter */
static inline void osmo_counter_inc(struct osmo_counter *ctr)
{
	ctr->value++;
}

/*! \brief Get current value of counter */
static inline unsigned long osmo_counter_get(struct osmo_counter *ctr)
{
	return ctr->value;
}

/*! \brief Reset current value of counter to 0 */
static inline void osmo_counter_reset(struct osmo_counter *ctr)
{
	ctr->value = 0;
}

/*! \brief Allocate a new counter */
struct osmo_counter *osmo_counter_alloc(const char *name);

/*! \brief Free the specified counter
 *  \param[in] ctr Counter
 */
void osmo_counter_free(struct osmo_counter *ctr);

/*! \brief Iteate over all counters
 *  \param[in] handle_counter Call-back function
 *  \param[in] data Private dtata handed through to \a handle_counter
 */
int osmo_counters_for_each(int (*handle_counter)(struct osmo_counter *, void *), void *data);

/*! \brief Resolve counter by human-readable name
 *  \param[in] name human-readable name of counter
 *  \returns pointer to counter (\ref osmo_counter) or NULL otherwise
 */
struct osmo_counter *osmo_counter_get_by_name(const char *name);
