fix: pl_ds.h fix infinite mod key loop
All checks were successful
Tests / Ubuntu (push) Successful in 10s
All checks were successful
Tests / Ubuntu (push) Successful in 10s
This commit is contained in:
parent
67b53e95b2
commit
4d9a7a2be6
14
pl_ds.h
14
pl_ds.h
@ -4,8 +4,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// library version (format XYYZZ)
|
// library version (format XYYZZ)
|
||||||
#define PL_DS_VERSION "1.1.0"
|
#define PL_DS_VERSION "1.1.1"
|
||||||
#define PL_DS_VERSION_NUM 10100
|
#define PL_DS_VERSION_NUM 10101
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Index of this file:
|
Index of this file:
|
||||||
@ -655,9 +655,14 @@ pl__hm_lookup(plHashMap** pptHashMap, uint64_t ulKey)
|
|||||||
|
|
||||||
uint64_t mask = ptHashMap->_uBucketCount - 1;
|
uint64_t mask = ptHashMap->_uBucketCount - 1;
|
||||||
uint64_t ulModKey = ulKey & mask;
|
uint64_t ulModKey = ulKey & mask;
|
||||||
|
const uint64_t ulOriginalModKey = ulModKey;
|
||||||
|
|
||||||
while(ptHashMap->_aulKeys[ulModKey] != ulKey && ptHashMap->_aulKeys[ulModKey] != UINT64_MAX)
|
while(ptHashMap->_aulKeys[ulModKey] != ulKey && ptHashMap->_aulKeys[ulModKey] != UINT64_MAX)
|
||||||
|
{
|
||||||
ulModKey = (ulModKey + 1) & mask;
|
ulModKey = (ulModKey + 1) & mask;
|
||||||
|
if(ulModKey == ulOriginalModKey)
|
||||||
|
return UINT64_MAX;
|
||||||
|
}
|
||||||
|
|
||||||
if(ptHashMap->_aulKeys[ulModKey] == UINT64_MAX)
|
if(ptHashMap->_aulKeys[ulModKey] == UINT64_MAX)
|
||||||
return UINT64_MAX;
|
return UINT64_MAX;
|
||||||
@ -693,9 +698,14 @@ pl__hm_has_key(plHashMap** pptHashMap, uint64_t ulKey)
|
|||||||
|
|
||||||
uint64_t mask = ptHashMap->_uBucketCount - 1;
|
uint64_t mask = ptHashMap->_uBucketCount - 1;
|
||||||
uint64_t ulModKey = ulKey & mask;
|
uint64_t ulModKey = ulKey & mask;
|
||||||
|
const uint64_t ulOriginalModKey = ulModKey;
|
||||||
|
|
||||||
while(ptHashMap->_aulKeys[ulModKey] != ulKey && ptHashMap->_aulKeys[ulModKey] != UINT64_MAX)
|
while(ptHashMap->_aulKeys[ulModKey] != ulKey && ptHashMap->_aulKeys[ulModKey] != UINT64_MAX)
|
||||||
|
{
|
||||||
ulModKey = (ulModKey + 1) & mask;
|
ulModKey = (ulModKey + 1) & mask;
|
||||||
|
if(ulModKey == ulOriginalModKey)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return ptHashMap->_aulKeys[ulModKey] != UINT64_MAX;
|
return ptHashMap->_aulKeys[ulModKey] != UINT64_MAX;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user