| … | … | @@ -72,7 +72,7 @@ |
| 72 | 72 | }NAME##MODIFIER##Hash_Bucket;\ |
| 73 | 73 | \ |
| 74 | 74 | |
| 75 | | #define BASE_HASH_UTIL(NAME, MODIFIER, HASH_ID, KEY_TYPE, VALUE_TYPE, COMPRESS_FUNC, COMPRESS_FUNC_DATA, FACTORY_CREATE_EXP, FACTORY_DESTROY_EXP, CREATE_EXP, INIT_EXP, ALLOC_EXP, DESTROY_EXP, SETUP_EXP, EMPTY_EXP)\ |
| 75 | #define BASE_HASH_UTIL(NAME, MODIFIER, HASH_ID, KEY_TYPE, VALUE_TYPE, COMPRESS_FUNC, COMPRESS_FUNC_DATA, FACTORY_CREATE_EXP, FACTORY_DESTROY_EXP, CREATE_EXP, INIT_EXP, ALLOC_EXP, DESTROY_EXP)\ |
| 76 | 76 | \ |
| 77 | 77 | NAME##Hash_Table *NAME##MODIFIER##Hash_CreateTable(NAME##Hash_Factory* factory, int hashIndex, size_t keyRange, size_t numEntries, float loadFactor){\ |
| 78 | 78 | NAME##Hash_Table* table = (NAME##Hash_Table*)malloc(sizeof(NAME##Hash_Table));\ |
| … | … | @@ -116,6 +116,9 @@ |
| 116 | 116 | free(table);\ |
| 117 | 117 | return exitCode;\ |
| 118 | 118 | }\ |
| 119 | \ |
| 120 | |
| 121 | #define BASE_HASH_INIT(NAME, MODIFIER, SETUP_EXP, EMPTY_EXP)\ |
| 119 | 122 | \ |
| 120 | 123 | int NAME##MODIFIER##Hash_SetupTable(NAME##Hash_Table *table){\ |
| 121 | 124 | int exitCode=0;\ |
| … | … | @@ -130,6 +133,7 @@ |
| 130 | 133 | }\ |
| 131 | 134 | \ |
| 132 | 135 | |
| 136 | |
| 133 | 137 | #define HASH_READ_KEY_EXP (buckets[index].key) |
| 134 | 138 | |
| 135 | 139 | #define CMPXCHG_HASH_READ_KEY_EXP ((buckets[index].key == HASH_BUCKET_STATUS_EMPTY) ? (buckets[index].key = key, HASH_BUCKET_STATUS_EMPTY) : buckets[index].key)\ |
| … | … | @@ -275,6 +279,16 @@ |
| 275 | 279 | exitCode = HASH_EXIT_CODE_NORMAL;\ |
| 276 | 280 | \ |
| 277 | 281 | |
| 282 | #define OPENMP_HASH_SETUP_EXP(NAME, MODIFIER, INNER_EMPTY_EXP)\ |
| 283 | NAME##MODIFIER##Hash_Bucket *buckets = (NAME##MODIFIER##Hash_Bucket*)&table->tableData[sizeof(NAME##MODIFIER##Hash_TableData)];\ |
| 284 | if (intintHash_GetTableType(table) & ~HASH_SENTINEL_PERFECT_HASHES) {\ |
| 285 | for(int index = 0; index < ((NAME##MODIFIER##Hash_TableData*)table->tableData)->numBuckets; index++){\ |
| 286 | INNER_EMPTY_EXP\ |
| 287 | }\ |
| 288 | }\ |
| 289 | exitCode = HASH_EXIT_CODE_NORMAL;\ |
| 290 | \ |
| 291 | |
| 278 | 292 | #define HASH_EMPTY_EXP(NAME, MODIFIER, INNER_EMPTY_EXP)\ |
| 279 | 293 | NAME##MODIFIER##Hash_Bucket *buckets = (NAME##MODIFIER##Hash_Bucket*)&table->tableData[sizeof(NAME##MODIFIER##Hash_TableData)];\ |
| 280 | 294 | for(int index = 0; index < ((NAME##MODIFIER##Hash_TableData*)table->tableData)->numBuckets; index++){\ |
| … | … | @@ -283,6 +297,14 @@ |
| 283 | 297 | exitCode = HASH_EXIT_CODE_NORMAL;\ |
| 284 | 298 | \ |
| 285 | 299 | |
| 300 | #define OPENMP_HASH_EMPTY_EXP(NAME, MODIFIER, INNER_EMPTY_EXP)\ |
| 301 | NAME##MODIFIER##Hash_Bucket *buckets = (NAME##MODIFIER##Hash_Bucket*)&table->tableData[sizeof(NAME##MODIFIER##Hash_TableData)];\ |
| 302 | for(int index = 0; index < ((NAME##MODIFIER##Hash_TableData*)table->tableData)->numBuckets; index++){\ |
| 303 | INNER_EMPTY_EXP\ |
| 304 | }\ |
| 305 | exitCode = HASH_EXIT_CODE_NORMAL;\ |
| 306 | \ |
| 307 | |
| 286 | 308 | #define KEY_VALUE_HASH_INNER_EMPTY_EXP buckets[index].key = HASH_BUCKET_STATUS_EMPTY; |
| 287 | 309 | |
| 288 | 310 | #define SENTINEL_VALUE_HASH_INNER_EMPTY_EXP(NAME, MODIFIER) buckets[index].value = ((NAME##MODIFIER##Hash_TableData*)table->tableData)->emptyValue; |
| … | … | @@ -291,7 +313,9 @@ |
| 291 | 313 | \ |
| 292 | 314 | BASE_TYPES_DEFINE(NAME, MODIFIER, KEY_TYPE, VALUE_TYPE, COMPRESS_FUNC_DATA)\ |
| 293 | 315 | \ |
| 294 | | BASE_HASH_UTIL(NAME, MODIFIER, HASH_ID, KEY_TYPE, VALUE_TYPE, COMPRESS_FUNC, COMPRESS_FUNC_DATA, FACTORY_CREATE_EXP, , CREATE_EXP, INIT_EXP, , ,HASH_SETUP_EXP(NAME, MODIFIER, INNER_EMPTY_EXP), HASH_EMPTY_EXP(NAME, MODIFIER, INNER_EMPTY_EXP))\ |
| 316 | BASE_HASH_UTIL(NAME, MODIFIER, HASH_ID, KEY_TYPE, VALUE_TYPE, COMPRESS_FUNC, COMPRESS_FUNC_DATA, FACTORY_CREATE_EXP, , CREATE_EXP, INIT_EXP, ,)\ |
| 317 | \ |
| 318 | BASE_HASH_INIT(NAME, MODIFIER, HASH_SETUP_EXP(NAME, MODIFIER, INNER_EMPTY_EXP), HASH_EMPTY_EXP(NAME, MODIFIER, INNER_EMPTY_EXP))\ |
| 295 | 319 | \ |
| 296 | 320 | BASE_HASH_METHODS(NAME, MODIFIER, KEY_TYPE, VALUE_TYPE, COMPRESS_FUNC, COMPRESS_FUNC_DATA, SEARCH_EXP, CMPXCHG_HASH_READ_KEY_EXP, ,##__VA_ARGS__)\ |
| 297 | 321 | \ |
| … | … | @@ -519,7 +543,9 @@ |
| 519 | 543 | \ |
| 520 | 544 | BASE_TYPES_DEFINE(NAME, MODIFIER##CL, KEY_TYPE, VALUE_TYPE, COMPRESS_FUNC_DATA)\ |
| 521 | 545 | \ |
| 522 | | BASE_HASH_UTIL(NAME, MODIFIER##CL, HASH_ID, KEY_TYPE, VALUE_TYPE, COMPRESS_FUNC, COMPRESS_FUNC_DATA, CL_FACTORY_CREATE_EXP(NAME, MODIFIER, FACTORY_CREATE_EXP, STRINGIFY(CL_UTIL_PROGRAM(NAME, MODIFIER, KEY_TYPE, VALUE_TYPE, BASE_TYPES_DEFINE, COMPRESS_FUNC_DATA, INNER_EMPTY_EXP))), CL_FACTORY_DESTROY_EXP(NAME, MODIFIER, ), CL_CREATE_EXP(NAME, MODIFIER, CREATE_EXP), INIT_EXP, CL_ALLOC_EXP(NAME, MODIFIER), CL_DESTROY_EXP(NAME), CL_SETUP_EXP(NAME, MODIFIER, ), CL_EMPTY_EXP(NAME, MODIFIER, ))\ |
| 546 | BASE_HASH_UTIL(NAME, MODIFIER##CL, HASH_ID, KEY_TYPE, VALUE_TYPE, COMPRESS_FUNC, COMPRESS_FUNC_DATA, CL_FACTORY_CREATE_EXP(NAME, MODIFIER, FACTORY_CREATE_EXP, STRINGIFY(CL_UTIL_PROGRAM(NAME, MODIFIER, KEY_TYPE, VALUE_TYPE, BASE_TYPES_DEFINE, COMPRESS_FUNC_DATA, INNER_EMPTY_EXP))), CL_FACTORY_DESTROY_EXP(NAME, MODIFIER, ), CL_CREATE_EXP(NAME, MODIFIER, CREATE_EXP), INIT_EXP, CL_ALLOC_EXP(NAME, MODIFIER), CL_DESTROY_EXP(NAME))\ |
| 547 | \ |
| 548 | BASE_HASH_INIT(NAME, MODIFIER##CL, CL_SETUP_EXP(NAME, MODIFIER, ), CL_EMPTY_EXP(NAME, MODIFIER, ))\ |
| 523 | 549 | \ |
| 524 | 550 | int NAME##MODIFIER##CLHash_QuerySingle(NAME##Hash_Table *table, KEY_TYPE key, VALUE_TYPE *valueOutput){\ |
| 525 | 551 | return NAME##MODIFIER##CLHash_Query(table, 1, &key, valueOutput);\ |
| … | … | @@ -625,7 +651,9 @@ |
| 625 | 651 | \ |
| 626 | 652 | BASE_TYPES_DEFINE(NAME, MODIFIER, KEY_TYPE, VALUE_TYPE, COMPRESS_FUNC_DATA)\ |
| 627 | 653 | \ |
| 628 | | BASE_HASH_UTIL(NAME, MODIFIER, HASH_ID, KEY_TYPE, VALUE_TYPE, COMPRESS_FUNC, COMPRESS_FUNC_DATA, FACTORY_CREATE_EXP, , CREATE_EXP, INIT_EXP, , ,HASH_SETUP_EXP(NAME, MODIFIER, INNER_EMPTY_EXP), HASH_EMPTY_EXP(NAME, MODIFIER, INNER_EMPTY_EXP))\ |
| 654 | BASE_HASH_UTIL(NAME, MODIFIER, HASH_ID, KEY_TYPE, VALUE_TYPE, COMPRESS_FUNC, COMPRESS_FUNC_DATA, FACTORY_CREATE_EXP, , CREATE_EXP, INIT_EXP, , )\ |
| 655 | \ |
| 656 | BASE_HASH_INIT(NAME, MODIFIER, OPENMP_HASH_SETUP_EXP(NAME, MODIFIER, INNER_EMPTY_EXP), OPENMP_HASH_EMPTY_EXP(NAME, MODIFIER, INNER_EMPTY_EXP))\ |
| 629 | 657 | \ |
| 630 | 658 | BASE_HASH_METHODS(NAME, MODIFIER, KEY_TYPE, VALUE_TYPE, COMPRESS_FUNC, COMPRESS_FUNC_DATA, SEARCH_EXP, CMPXCHG_HASH_READ_KEY_EXP, ,##__VA_ARGS__)\ |
| 631 | 659 | \ |