1 /* Copyright (C) 2007-2010 Open Information Security Foundation 2 * 3 * You can copy, redistribute or modify this Program under the terms of 4 * the GNU General Public License version 2 as published by the Free 5 * Software Foundation. 6 * 7 * This program is distributed in the hope that it will be useful, 8 * but WITHOUT ANY WARRANTY; without even the implied warranty of 9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 * GNU General Public License for more details. 11 * 12 * You should have received a copy of the GNU General Public License 13 * version 2 along with this program; if not, write to the Free Software 14 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 15 * 02110-1301, USA. 16 */ 17 18 /** 19 * \file 20 * 21 * \author Victor Julien <victor@inliniac.net> 22 */ 23 24 #ifndef __HASHLIST_H__ 25 #define __HASHLIST_H__ 26 27 /* hash bucket structure */ 28 typedef struct HashListTableBucket_ { 29 void *data; 30 uint16_t size; 31 struct HashListTableBucket_ *bucknext; 32 struct HashListTableBucket_ *listnext; 33 struct HashListTableBucket_ *listprev; 34 } HashListTableBucket; 35 36 /* hash table structure */ 37 typedef struct HashListTable_ { 38 HashListTableBucket **array; 39 HashListTableBucket *listhead; 40 HashListTableBucket *listtail; 41 uint32_t array_size; 42 uint32_t (*Hash)(struct HashListTable_ *, void *, uint16_t); 43 char (*Compare)(void *, uint16_t, void *, uint16_t); 44 void (*Free)(void *); 45 } HashListTable; 46 47 #define HASHLIST_NO_SIZE 0 48 49 /* prototypes */ 50 HashListTable* HashListTableInit(uint32_t, uint32_t (*Hash)(struct HashListTable_ *, void *, uint16_t), char (*Compare)(void *, uint16_t, void *, uint16_t), void (*Free)(void *)); 51 void HashListTableFree(HashListTable *); 52 void HashListTablePrint(HashListTable *); 53 int HashListTableAdd(HashListTable *, void *, uint16_t); 54 int HashListTableRemove(HashListTable *, void *, uint16_t); 55 void *HashListTableLookup(HashListTable *, void *, uint16_t); 56 uint32_t HashListTableGenericHash(HashListTable *, void *, uint16_t); 57 HashListTableBucket *HashListTableGetListHead(HashListTable *); 58 #define HashListTableGetListNext(hb) (hb)->listnext 59 #define HashListTableGetListData(hb) (hb)->data 60 char HashListTableDefaultCompare(void *, uint16_t, void *, uint16_t); 61 62 void HashListTableRegisterTests(void); 63 64 #endif /* __HASHLIST_H__ */ 65 66