diff options
| author | 2016-11-18 03:22:25 +0100 | |
|---|---|---|
| committer | 2016-11-18 03:22:25 +0100 | |
| commit | 582c59bf7dcf37270c2fd7e99b4982ebc9bcbc74 (patch) | |
| tree | 91b8c594acd89e4c53a8c00bd730446bbfc0c6cf /src/hashtable.h | |
| parent | f1f2bcebc8690c9b420288aeede2e52c5bf18ccd (diff) | |
| download | libplist-582c59bf7dcf37270c2fd7e99b4982ebc9bcbc74.tar.gz libplist-582c59bf7dcf37270c2fd7e99b4982ebc9bcbc74.tar.bz2 | |
Improve plist_dict_set_item performance for large dictionaries with hash table
Diffstat (limited to 'src/hashtable.h')
| -rw-r--r-- | src/hashtable.h | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/hashtable.h b/src/hashtable.h index 60a40ab..42d7b93 100644 --- a/src/hashtable.h +++ b/src/hashtable.h | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | * hashtable.h | 2 | * hashtable.h |
| 3 | * header file for really simple hash table implementation | 3 | * header file for really simple hash table implementation |
| 4 | * | 4 | * |
| 5 | * Copyright (c) 2011 Nikias Bassen, All Rights Reserved. | 5 | * Copyright (c) 2011-2016 Nikias Bassen, All Rights Reserved. |
| 6 | * | 6 | * |
| 7 | * This library is free software; you can redistribute it and/or | 7 | * This library is free software; you can redistribute it and/or |
| 8 | * modify it under the terms of the GNU Lesser General Public | 8 | * modify it under the terms of the GNU Lesser General Public |
| @@ -30,18 +30,21 @@ typedef struct hashentry_t { | |||
| 30 | 30 | ||
| 31 | typedef unsigned int(*hash_func_t)(const void* key); | 31 | typedef unsigned int(*hash_func_t)(const void* key); |
| 32 | typedef int (*compare_func_t)(const void *a, const void *b); | 32 | typedef int (*compare_func_t)(const void *a, const void *b); |
| 33 | typedef void (*free_func_t)(void *ptr); | ||
| 33 | 34 | ||
| 34 | typedef struct hashtable_t { | 35 | typedef struct hashtable_t { |
| 35 | hashentry_t *entries[4096]; | 36 | hashentry_t *entries[4096]; |
| 36 | size_t count; | 37 | size_t count; |
| 37 | hash_func_t hash_func; | 38 | hash_func_t hash_func; |
| 38 | compare_func_t compare_func; | 39 | compare_func_t compare_func; |
| 40 | free_func_t free_func; | ||
| 39 | } hashtable_t; | 41 | } hashtable_t; |
| 40 | 42 | ||
| 41 | hashtable_t* hash_table_new(hash_func_t hash_func, compare_func_t compare_func); | 43 | hashtable_t* hash_table_new(hash_func_t hash_func, compare_func_t compare_func, free_func_t free_func); |
| 42 | void hash_table_destroy(hashtable_t *ht); | 44 | void hash_table_destroy(hashtable_t *ht); |
| 43 | 45 | ||
| 44 | void hash_table_insert(hashtable_t* ht, void *key, void *value); | 46 | void hash_table_insert(hashtable_t* ht, void *key, void *value); |
| 45 | void* hash_table_lookup(hashtable_t* ht, void *key); | 47 | void* hash_table_lookup(hashtable_t* ht, void *key); |
| 48 | void hash_table_remove(hashtable_t* ht, void *key); | ||
| 46 | 49 | ||
| 47 | #endif | 50 | #endif |
