SDTS_AL
|
#include "cpl_port.h"
Go to the source code of this file.
Typedefs | |
typedef typedefCPL_C_START struct _CPLHashSet | CPLHashSet |
typedef unsigned long(* | CPLHashSetHashFunc) (const void *elt) |
typedef int(* | CPLHashSetEqualFunc) (const void *elt1, const void *elt2) |
typedef void(* | CPLHashSetFreeEltFunc) (void *elt) |
typedef int(* | CPLHashSetIterEltFunc) (void *elt, void *user_data) |
Functions | |
CPLHashSet CPL_DLL * | CPLHashSetNew (CPLHashSetHashFunc fnHashFunc, CPLHashSetEqualFunc fnEqualFunc, CPLHashSetFreeEltFunc fnFreeEltFunc) |
void CPL_DLL | CPLHashSetDestroy (CPLHashSet *set) |
void CPL_DLL | CPLHashSetClear (CPLHashSet *set) |
int CPL_DLL | CPLHashSetSize (const CPLHashSet *set) |
void CPL_DLL | CPLHashSetForeach (CPLHashSet *set, CPLHashSetIterEltFunc fnIterFunc, void *user_data) |
int CPL_DLL | CPLHashSetInsert (CPLHashSet *set, void *elt) |
void CPL_DLL * | CPLHashSetLookup (CPLHashSet *set, const void *elt) |
int CPL_DLL | CPLHashSetRemove (CPLHashSet *set, const void *elt) |
int CPL_DLL | CPLHashSetRemoveDeferRehash (CPLHashSet *set, const void *elt) |
unsigned long CPL_DLL | CPLHashSetHashPointer (const void *elt) |
int CPL_DLL | CPLHashSetEqualPointer (const void *elt1, const void *elt2) |
unsigned long CPL_DLL | CPLHashSetHashStr (const void *pszStr) |
int CPL_DLL | CPLHashSetEqualStr (const void *pszStr1, const void *pszStr2) |
Hash set implementation.
An hash set is a data structure that holds elements that are unique according to a comparison function. Operations on the hash set, such as insertion, removal or lookup, are supposed to be fast if an efficient "hash" function is provided.
typedef typedefCPL_C_START struct _CPLHashSet CPLHashSet |
Opaque type for a hash set
typedef int(* CPLHashSetEqualFunc) (const void *elt1, const void *elt2) |
CPLHashSetEqualFunc
typedef void(* CPLHashSetFreeEltFunc) (void *elt) |
CPLHashSetFreeEltFunc
typedef unsigned long(* CPLHashSetHashFunc) (const void *elt) |
CPLHashSetHashFunc
typedef int(* CPLHashSetIterEltFunc) (void *elt, void *user_data) |
CPLHashSetIterEltFunc
void CPL_DLL CPLHashSetClear | ( | CPLHashSet * | set | ) |
Clear all elements from a hash set.
This function also frees the elements if a free function was provided at the creation of the hash set.
set | the hash set |
void CPL_DLL CPLHashSetDestroy | ( | CPLHashSet * | set | ) |
Destroys an allocated hash set.
This function also frees the elements if a free function was provided at the creation of the hash set.
set | the hash set |
int CPL_DLL CPLHashSetEqualPointer | ( | const void * | elt1, |
const void * | elt2 | ||
) |
Equality function for arbitrary pointers
elt1 | the first arbitrary pointer to compare |
elt2 | the second arbitrary pointer to compare |
int CPL_DLL CPLHashSetEqualStr | ( | const void * | elt1, |
const void * | elt2 | ||
) |
Equality function for strings
elt1 | the first string to compare. May be NULL. |
elt2 | the second string to compare. May be NULL. |
void CPL_DLL CPLHashSetForeach | ( | CPLHashSet * | set, |
CPLHashSetIterEltFunc | fnIterFunc, | ||
void * | user_data | ||
) |
Walk through the hash set and runs the provided function on all the elements
This function is provided the user_data argument of CPLHashSetForeach. It must return TRUE to go on the walk through the hash set, or FALSE to make it stop.
Note : the structure of the hash set must NOT be modified during the walk.
set | the hash set. |
fnIterFunc | the function called on each element. |
user_data | the user data provided to the function. |
unsigned long CPL_DLL CPLHashSetHashPointer | ( | const void * | elt | ) |
Hash function for an arbitrary pointer
elt | the arbitrary pointer to hash |
unsigned long CPL_DLL CPLHashSetHashStr | ( | const void * | elt | ) |
Hash function for a zero-terminated string
elt | the string to hash. May be NULL. |
int CPL_DLL CPLHashSetInsert | ( | CPLHashSet * | set, |
void * | elt | ||
) |
Inserts an element into a hash set.
If the element was already inserted in the hash set, the previous element is replaced by the new element. If a free function was provided, it is used to free the previously inserted element
set | the hash set |
elt | the new element to insert in the hash set |
void CPL_DLL* CPLHashSetLookup | ( | CPLHashSet * | set, |
const void * | elt | ||
) |
Returns the element found in the hash set corresponding to the element to look up The element must not be modified.
set | the hash set |
elt | the element to look up in the hash set |
CPLHashSet CPL_DLL* CPLHashSetNew | ( | CPLHashSetHashFunc | fnHashFunc, |
CPLHashSetEqualFunc | fnEqualFunc, | ||
CPLHashSetFreeEltFunc | fnFreeEltFunc | ||
) |
Creates a new hash set
The hash function must return a hash value for the elements to insert. If fnHashFunc is NULL, CPLHashSetHashPointer will be used.
The equal function must return if two elements are equal. If fnEqualFunc is NULL, CPLHashSetEqualPointer will be used.
The free function is used to free elements inserted in the hash set, when the hash set is destroyed, when elements are removed or replaced. If fnFreeEltFunc is NULL, elements inserted into the hash set will not be freed.
fnHashFunc | hash function. May be NULL. |
fnEqualFunc | equal function. May be NULL. |
fnFreeEltFunc | element free function. May be NULL. |
int CPL_DLL CPLHashSetRemove | ( | CPLHashSet * | set, |
const void * | elt | ||
) |
Removes an element from a hash set
set | the hash set |
elt | the new element to remove from the hash set |
int CPL_DLL CPLHashSetRemoveDeferRehash | ( | CPLHashSet * | set, |
const void * | elt | ||
) |
Removes an element from a hash set.
This will defer potential rehashing of the set to later calls to CPLHashSetInsert() or CPLHashSetRemove().
set | the hash set |
elt | the new element to remove from the hash set |
int CPL_DLL CPLHashSetSize | ( | const CPLHashSet * | set | ) |
Returns the number of elements inserted in the hash set
Note: this is not the internal size of the hash set
set | the hash set |