Factor our hash function used for XRC ids hash map.
Define the hash function in a separate function instead of duplicating it in XRCID_Lookup() and RemoveXRCIDEntry(). The hash function is extremely simplistic and inefficient right now, it should be replaced with wxStringHash::stringHash(). git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66065 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -2409,13 +2409,23 @@ struct XRCID_record
|
|||||||
|
|
||||||
static XRCID_record *XRCID_Records[XRCID_TABLE_SIZE] = {NULL};
|
static XRCID_record *XRCID_Records[XRCID_TABLE_SIZE] = {NULL};
|
||||||
|
|
||||||
static int XRCID_Lookup(const char *str_id, int value_if_not_found = wxID_NONE)
|
// Extremely simplistic hash function which probably ought to be replaced with
|
||||||
|
// wxStringHash::stringHash().
|
||||||
|
static inline unsigned XRCIdHash(const char *str_id)
|
||||||
{
|
{
|
||||||
unsigned int index = 0;
|
unsigned index = 0;
|
||||||
|
|
||||||
for (const char *c = str_id; *c != '\0'; c++) index += (unsigned int)*c;
|
for (const char *c = str_id; *c != '\0'; c++) index += (unsigned int)*c;
|
||||||
index %= XRCID_TABLE_SIZE;
|
index %= XRCID_TABLE_SIZE;
|
||||||
|
|
||||||
|
return index;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int XRCID_Lookup(const char *str_id, int value_if_not_found = wxID_NONE)
|
||||||
|
{
|
||||||
|
const unsigned index = XRCIdHash(str_id);
|
||||||
|
|
||||||
|
|
||||||
XRCID_record *oldrec = NULL;
|
XRCID_record *oldrec = NULL;
|
||||||
for (XRCID_record *rec = XRCID_Records[index]; rec; rec = rec->next)
|
for (XRCID_record *rec = XRCID_Records[index]; rec; rec = rec->next)
|
||||||
{
|
{
|
||||||
@@ -2619,10 +2629,7 @@ wxString wxXmlResource::FindXRCIDById(int numId)
|
|||||||
/* static */
|
/* static */
|
||||||
void wxIdRangeManager::RemoveXRCIDEntry(const char *str_id)
|
void wxIdRangeManager::RemoveXRCIDEntry(const char *str_id)
|
||||||
{
|
{
|
||||||
int index = 0;
|
const unsigned index = XRCIdHash(str_id);
|
||||||
|
|
||||||
for (const char *c = str_id; *c != '\0'; c++) index += (int)*c;
|
|
||||||
index %= XRCID_TABLE_SIZE;
|
|
||||||
|
|
||||||
XRCID_record **p_previousrec = &XRCID_Records[index];
|
XRCID_record **p_previousrec = &XRCID_Records[index];
|
||||||
for (XRCID_record *rec = XRCID_Records[index]; rec; rec = rec->next)
|
for (XRCID_record *rec = XRCID_Records[index]; rec; rec = rec->next)
|
||||||
|
Reference in New Issue
Block a user