extern "C" {
#endif
-#include <stdbool.h>
#include <stdio.h>
#include <rte_compat.h>
struct rte_fbarray {
char name[RTE_FBARRAY_NAME_LEN]; /**< name associated with an array */
- int count; /**< number of entries stored */
- int len; /**< current length of the array */
- int elt_sz; /**< size of each element */
+ unsigned int count; /**< number of entries stored */
+ unsigned int len; /**< current length of the array */
+ unsigned int elt_sz; /**< size of each element */
void *data; /**< data pointer */
rte_rwlock_t rwlock; /**< multiprocess lock */
};
* - 0 on success.
* - -1 on failure, with ``rte_errno`` indicating reason for failure.
*/
-int __rte_experimental
-rte_fbarray_init(struct rte_fbarray *arr, const char *name, int len,
- int elt_sz);
+__rte_experimental
+int
+rte_fbarray_init(struct rte_fbarray *arr, const char *name, unsigned int len,
+ unsigned int elt_sz);
/**
* - 0 on success.
* - -1 on failure, with ``rte_errno`` indicating reason for failure.
*/
-int __rte_experimental
+__rte_experimental
+int
rte_fbarray_attach(struct rte_fbarray *arr);
* - 0 on success.
* - -1 on failure, with ``rte_errno`` indicating reason for failure.
*/
-int __rte_experimental
+__rte_experimental
+int
rte_fbarray_destroy(struct rte_fbarray *arr);
* - 0 on success.
* - -1 on failure, with ``rte_errno`` indicating reason for failure.
*/
-int __rte_experimental
+__rte_experimental
+int
rte_fbarray_detach(struct rte_fbarray *arr);
* - non-NULL pointer on success.
* - NULL on failure, with ``rte_errno`` indicating reason for failure.
*/
-void * __rte_experimental
-rte_fbarray_get(const struct rte_fbarray *arr, int idx);
+__rte_experimental
+void *
+rte_fbarray_get(const struct rte_fbarray *arr, unsigned int idx);
/**
* - non-negative integer on success.
* - -1 on failure, with ``rte_errno`` indicating reason for failure.
*/
-int __rte_experimental
+__rte_experimental
+int
rte_fbarray_find_idx(const struct rte_fbarray *arr, const void *elt);
* - 0 on success.
* - -1 on failure, with ``rte_errno`` indicating reason for failure.
*/
-int __rte_experimental
-rte_fbarray_set_used(struct rte_fbarray *arr, int idx);
+__rte_experimental
+int
+rte_fbarray_set_used(struct rte_fbarray *arr, unsigned int idx);
/**
* - 0 on success.
* - -1 on failure, with ``rte_errno`` indicating reason for failure.
*/
-int __rte_experimental
-rte_fbarray_set_free(struct rte_fbarray *arr, int idx);
+__rte_experimental
+int
+rte_fbarray_set_free(struct rte_fbarray *arr, unsigned int idx);
/**
* - 0 if element is unused.
* - -1 on failure, with ``rte_errno`` indicating reason for failure.
*/
-int __rte_experimental
-rte_fbarray_is_used(struct rte_fbarray *arr, int idx);
+__rte_experimental
+int
+rte_fbarray_is_used(struct rte_fbarray *arr, unsigned int idx);
/**
* - non-negative integer on success.
* - -1 on failure, with ``rte_errno`` indicating reason for failure.
*/
-int __rte_experimental
-rte_fbarray_find_next_free(struct rte_fbarray *arr, int start);
+__rte_experimental
+int
+rte_fbarray_find_next_free(struct rte_fbarray *arr, unsigned int start);
/**
* - non-negative integer on success.
* - -1 on failure, with ``rte_errno`` indicating reason for failure.
*/
-int __rte_experimental
-rte_fbarray_find_next_used(struct rte_fbarray *arr, int start);
+__rte_experimental
+int
+rte_fbarray_find_next_used(struct rte_fbarray *arr, unsigned int start);
/**
* - non-negative integer on success.
* - -1 on failure, with ``rte_errno`` indicating reason for failure.
*/
-int __rte_experimental
-rte_fbarray_find_next_n_free(struct rte_fbarray *arr, int start, int n);
+__rte_experimental
+int
+rte_fbarray_find_next_n_free(struct rte_fbarray *arr, unsigned int start,
+ unsigned int n);
/**
* - non-negative integer on success.
* - -1 on failure, with ``rte_errno`` indicating reason for failure.
*/
-int __rte_experimental
-rte_fbarray_find_next_n_used(struct rte_fbarray *arr, int start, int n);
+__rte_experimental
+int
+rte_fbarray_find_next_n_used(struct rte_fbarray *arr, unsigned int start,
+ unsigned int n);
/**
* - non-negative integer on success.
* - -1 on failure, with ``rte_errno`` indicating reason for failure.
*/
-int __rte_experimental
-rte_fbarray_find_contig_free(struct rte_fbarray *arr, int start);
+__rte_experimental
+int
+rte_fbarray_find_contig_free(struct rte_fbarray *arr,
+ unsigned int start);
/**
* - non-negative integer on success.
* - -1 on failure, with ``rte_errno`` indicating reason for failure.
*/
-int __rte_experimental
-rte_fbarray_find_contig_used(struct rte_fbarray *arr, int start);
+__rte_experimental
+int
+rte_fbarray_find_contig_used(struct rte_fbarray *arr, unsigned int start);
+
+/**
+ * Find index of previous free element, starting at specified index.
+ *
+ * @param arr
+ * Valid pointer to allocated and correctly set up ``rte_fbarray`` structure.
+ *
+ * @param start
+ * Element index to start search from.
+ *
+ * @return
+ * - non-negative integer on success.
+ * - -1 on failure, with ``rte_errno`` indicating reason for failure.
+ */
+__rte_experimental
+int
+rte_fbarray_find_prev_free(struct rte_fbarray *arr, unsigned int start);
+
+
+/**
+ * Find index of previous used element, starting at specified index.
+ *
+ * @param arr
+ * Valid pointer to allocated and correctly set up ``rte_fbarray`` structure.
+ *
+ * @param start
+ * Element index to start search from.
+ *
+ * @return
+ * - non-negative integer on success.
+ * - -1 on failure, with ``rte_errno`` indicating reason for failure.
+ */
+__rte_experimental
+int
+rte_fbarray_find_prev_used(struct rte_fbarray *arr, unsigned int start);
+
+
+/**
+ * Find lowest start index of chunk of ``n`` free elements, down from specified
+ * index.
+ *
+ * @param arr
+ * Valid pointer to allocated and correctly set up ``rte_fbarray`` structure.
+ *
+ * @param start
+ * Element index to start search from.
+ *
+ * @param n
+ * Number of free elements to look for.
+ *
+ * @return
+ * - non-negative integer on success.
+ * - -1 on failure, with ``rte_errno`` indicating reason for failure.
+ */
+__rte_experimental
+int
+rte_fbarray_find_prev_n_free(struct rte_fbarray *arr, unsigned int start,
+ unsigned int n);
+
+
+/**
+ * Find lowest start index of chunk of ``n`` used elements, down from specified
+ * index.
+ *
+ * @param arr
+ * Valid pointer to allocated and correctly set up ``rte_fbarray`` structure.
+ *
+ * @param start
+ * Element index to start search from.
+ *
+ * @param n
+ * Number of used elements to look for.
+ *
+ * @return
+ * - non-negative integer on success.
+ * - -1 on failure, with ``rte_errno`` indicating reason for failure.
+ */
+__rte_experimental
+int
+rte_fbarray_find_prev_n_used(struct rte_fbarray *arr, unsigned int start,
+ unsigned int n);
+
+
+/**
+ * Find how many more free entries there are before specified index (like
+ * ``rte_fbarray_find_contig_free`` but going in reverse).
+ *
+ * @param arr
+ * Valid pointer to allocated and correctly set up ``rte_fbarray`` structure.
+ *
+ * @param start
+ * Element index to start search from.
+ *
+ * @return
+ * - non-negative integer on success.
+ * - -1 on failure, with ``rte_errno`` indicating reason for failure.
+ */
+__rte_experimental
+int
+rte_fbarray_find_rev_contig_free(struct rte_fbarray *arr,
+ unsigned int start);
+
+
+/**
+ * Find how many more used entries there are before specified index (like
+ * ``rte_fbarray_find_contig_used`` but going in reverse).
+ *
+ * @param arr
+ * Valid pointer to allocated and correctly set up ``rte_fbarray`` structure.
+ *
+ * @param start
+ * Element index to start search from.
+ *
+ * @return
+ * - non-negative integer on success.
+ * - -1 on failure, with ``rte_errno`` indicating reason for failure.
+ */
+__rte_experimental
+int
+rte_fbarray_find_rev_contig_used(struct rte_fbarray *arr, unsigned int start);
+
+
+/**
+ * Find index of biggest chunk of free elements, starting at specified index.
+ *
+ * @param arr
+ * Valid pointer to allocated and correctly set up ``rte_fbarray`` structure.
+ *
+ * @param start
+ * Element index to start search from.
+ *
+ * @return
+ * - non-negative integer on success.
+ * - -1 on failure, with ``rte_errno`` indicating reason for failure.
+ */
+__rte_experimental
+int
+rte_fbarray_find_biggest_free(struct rte_fbarray *arr, unsigned int start);
+
+
+/**
+ * Find index of biggest chunk of used elements, starting at specified index.
+ *
+ * @param arr
+ * Valid pointer to allocated and correctly set up ``rte_fbarray`` structure.
+ *
+ * @param start
+ * Element index to start search from.
+ *
+ * @return
+ * - non-negative integer on success.
+ * - -1 on failure, with ``rte_errno`` indicating reason for failure.
+ */
+__rte_experimental
+int
+rte_fbarray_find_biggest_used(struct rte_fbarray *arr, unsigned int start);
+
+
+/**
+ * Find index of biggest chunk of free elements before a specified index (like
+ * ``rte_fbarray_find_biggest_free``, but going in reverse).
+ *
+ * @param arr
+ * Valid pointer to allocated and correctly set up ``rte_fbarray`` structure.
+ *
+ * @param start
+ * Element index to start search from.
+ *
+ * @return
+ * - non-negative integer on success.
+ * - -1 on failure, with ``rte_errno`` indicating reason for failure.
+ */
+__rte_experimental
+int
+rte_fbarray_find_rev_biggest_free(struct rte_fbarray *arr, unsigned int start);
+
+
+/**
+ * Find index of biggest chunk of used elements before a specified index (like
+ * ``rte_fbarray_find_biggest_used``, but going in reverse).
+ *
+ * @param arr
+ * Valid pointer to allocated and correctly set up ``rte_fbarray`` structure.
+ *
+ * @param start
+ * Element index to start search from.
+ *
+ * @return
+ * - non-negative integer on success.
+ * - -1 on failure, with ``rte_errno`` indicating reason for failure.
+ */
+__rte_experimental
+int
+rte_fbarray_find_rev_biggest_used(struct rte_fbarray *arr, unsigned int start);
/**
* @param f
* File object to dump information into.
*/
-void __rte_experimental
+__rte_experimental
+void
rte_fbarray_dump_metadata(struct rte_fbarray *arr, FILE *f);
#ifdef __cplusplus