Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Tweaks to the keyword hash generator. Tried to make it a little faster. If nothing else, the keyword hash table is now a little smaller. (CVS 2297) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
4eca6c05abdf3955c5fd7bd3a22c87cd |
User & Date: | drh 2005-02-01 01:40:44.000 |
Context
2005-02-01
| ||
02:13 | Change to sqlite3AffinityType() to remove hex constants. (CVS 2298) (check-in: d8b4b0ef13 user: danielk1977 tags: trunk) | |
01:40 | Tweaks to the keyword hash generator. Tried to make it a little faster. If nothing else, the keyword hash table is now a little smaller. (CVS 2297) (check-in: 4eca6c05ab user: drh tags: trunk) | |
01:21 | Replace sqlite3AffinityType() with a slightly faster version. (CVS 2296) (check-in: abe9f5e81f user: danielk1977 tags: trunk) | |
Changes
Changes to tool/mkkeywordhash.c.
︙ | ︙ | |||
315 316 317 318 319 320 321 | } NKEYWORD = j; /* Fill in the lengths of strings and hashes for all entries. */ for(i=0; i<NKEYWORD; i++){ Keyword *p = &aKeywordTable[i]; p->len = strlen(p->zName); | | | | 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 | } NKEYWORD = j; /* Fill in the lengths of strings and hashes for all entries. */ for(i=0; i<NKEYWORD; i++){ Keyword *p = &aKeywordTable[i]; p->len = strlen(p->zName); p->hash = (UpperToLower[p->zName[0]]*4) ^ (UpperToLower[p->zName[p->len-1]]*3) ^ p->len; p->id = i+1; } /* Sort the table from shortest to longest keyword */ qsort(aKeywordTable, NKEYWORD, sizeof(aKeywordTable[0]), keywordCompare1); /* Look for short keywords embedded in longer keywords */ |
︙ | ︙ | |||
405 406 407 408 409 410 411 412 413 414 415 416 417 418 | for(i=0; i<NKEYWORD; i++){ h = aKeywordTable[i].hash % bestSize; aKeywordTable[i].iNext = aHash[h]; aHash[h] = i+1; } /* Begin generating code */ printf("static int keywordCode(const char *z, int n){\n"); printf(" static const char zText[%d] =\n", nChar+1); for(i=j=0; i<NKEYWORD; i++){ Keyword *p = &aKeywordTable[i]; if( p->substrId ) continue; if( j==0 ) printf(" \""); | > | 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 | for(i=0; i<NKEYWORD; i++){ h = aKeywordTable[i].hash % bestSize; aKeywordTable[i].iNext = aHash[h]; aHash[h] = i+1; } /* Begin generating code */ printf("/* Hash score: %d */\n", bestCount); printf("static int keywordCode(const char *z, int n){\n"); printf(" static const char zText[%d] =\n", nChar+1); for(i=j=0; i<NKEYWORD; i++){ Keyword *p = &aKeywordTable[i]; if( p->substrId ) continue; if( j==0 ) printf(" \""); |
︙ | ︙ | |||
484 485 486 487 488 489 490 | j = 0; } } printf("%s };\n", j==0 ? "" : "\n"); printf(" int h, i;\n"); printf(" if( n<2 ) return TK_ID;\n"); | | | | 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 | j = 0; } } printf("%s };\n", j==0 ? "" : "\n"); printf(" int h, i;\n"); printf(" if( n<2 ) return TK_ID;\n"); printf(" h = ((sqlite3UpperToLower[((unsigned char*)z)[0]]*4) ^\n" " (sqlite3UpperToLower[((unsigned char*)z)[n-1]]*3) ^\n" " n) %% %d;\n", bestSize); printf(" for(i=((int)aHash[h])-1; i>=0; i=((int)aNext[i])-1){\n"); printf(" if( aLen[i]==n &&" " sqlite3StrNICmp(&zText[aOffset[i]],z,n)==0 ){\n"); printf(" return aCode[i];\n"); printf(" }\n"); printf(" }\n"); |
︙ | ︙ |