| /* |
| * Copyright (c) 2012, The Linux Foundation. All rights reserved. |
| * Permission to use, copy, modify, and/or distribute this software for |
| * any purpose with or without fee is hereby granted, provided that the |
| * above copyright notice and this permission notice appear in all copies. |
| * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
| * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
| * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
| * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
| * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
| * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT |
| * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
| */ |
| |
| |
| |
| #ifndef _UTIL_H_ |
| #define _UTIL_H_ |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif /* __cplusplus */ |
| |
| #define LL_IN_ORDER 0x1 |
| #define LL_FIX_NDNR 0x2 |
| |
| typedef enum { |
| LL_CMP_EQUAL = 0, |
| LL_CMP_GREATER = 1, |
| LL_CMP_SMALLER = 2 |
| } |
| ll_cmp_rslt_t; |
| |
| typedef ll_cmp_rslt_t(*ll_nd_cmp) (void *src, void *dest); |
| |
| typedef void (*ll_nd_dump) (void *data); |
| |
| typedef struct _sll_node_t |
| { |
| struct _sll_node_t *next; |
| void *data; |
| } sll_node_t; |
| |
| typedef struct |
| { |
| sll_node_t *fst_nd; |
| a_uint32_t nd_nr; |
| a_uint32_t flag; |
| ll_nd_cmp nd_cmp; |
| ll_nd_dump nd_dump; |
| sll_node_t *free_nd; |
| } sll_head_t; |
| |
| sll_head_t *sll_creat(ll_nd_cmp cmp_func, ll_nd_dump dump_func, |
| a_uint32_t flag, a_uint32_t nd_nr); |
| |
| void sll_destroy(sll_head_t * sll); |
| |
| void sll_lock(sll_head_t * sll); |
| |
| void sll_unlock(sll_head_t * sll); |
| |
| void *sll_nd_find(const sll_head_t * sll, void *data, |
| a_ulong_t *iterator); |
| |
| void *sll_nd_next(const sll_head_t *sll, a_ulong_t *iterator); |
| |
| sw_error_t sll_nd_insert(sll_head_t * sll, void *data); |
| |
| sw_error_t sll_nd_delete(sll_head_t * sll, void *data); |
| |
| typedef struct |
| { |
| a_uint32_t id_ptr; |
| a_uint32_t id_nr; |
| a_uint32_t id_min; |
| a_uint32_t id_size; |
| void *id_pool; |
| } sid_pool_t; |
| |
| sid_pool_t *sid_pool_creat(a_uint32_t id_nr, a_uint32_t min_id); |
| |
| void sid_pool_destroy(sid_pool_t * pool); |
| |
| sw_error_t sid_pool_id_alloc(sid_pool_t * pool, a_uint32_t * id); |
| |
| sw_error_t sid_pool_id_free(sid_pool_t * pool, a_uint32_t id); |
| |
| #ifdef __cplusplus |
| } |
| #endif /* __cplusplus */ |
| #endif /* _UTIL_H_ */ |