21#ifndef BSL_HASH_LIST_H
22#define BSL_HASH_LIST_H
24#include "hitls_build.h"
44typedef void *(*ListDupFunc)(
void *ptr,
size_t size);
54typedef void (*ListFreeFunc)(
void *ptr);
67typedef bool (*ListMatchFunc)(
const void *node, uintptr_t data);
86typedef int32_t (*ListKeyCmpFunc)(uintptr_t key1, uintptr_t key2);
94 ListFreeFunc freeFunc;
101typedef struct BslListSt BSL_List;
107typedef struct BslListNodeSt *BSL_ListIterator;
124int32_t BSL_ListInit(BSL_List *list,
const ListDupFreeFuncPair *dataFunc);
134int32_t BSL_ListClear(BSL_List *list);
144int32_t BSL_ListDeinit(BSL_List *list);
154bool BSL_ListIsEmpty(
const BSL_List *list);
163size_t BSL_ListSize(
const BSL_List *list);
174int32_t BSL_ListPushFront(BSL_List *list, uintptr_t userData,
size_t userDataSize);
185int32_t BSL_ListPushBack(BSL_List *list, uintptr_t userData,
size_t userDataSize);
197int32_t BSL_ListPopFront(BSL_List *list);
209int32_t BSL_ListPopBack(BSL_List *list);
222uintptr_t BSL_ListFront(
const BSL_List *list);
234uintptr_t BSL_ListBack(
const BSL_List *list);
243BSL_ListIterator BSL_ListIterBegin(
const BSL_List *list);
253BSL_ListIterator BSL_ListIterEnd(BSL_List *list);
266BSL_ListIterator BSL_ListIterPrev(
const BSL_List *list,
const BSL_ListIterator it);
279BSL_ListIterator BSL_ListIterNext(
const BSL_List *list,
const BSL_ListIterator it);
291int32_t BSL_ListInsert(BSL_List *list,
const BSL_ListIterator it, uintptr_t userData,
size_t userDataSize);
307BSL_ListIterator BSL_ListIterErase(BSL_List *list, BSL_ListIterator it);
319uintptr_t BSL_ListIterData(
const BSL_ListIterator it);
341BSL_ListIterator BSL_ListIterFind(BSL_List *list, ListKeyCmpFunc iterCmpFunc, uintptr_t data);