Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Add the SQLITE_SPELLFIX_STACKALLOC_SZ compile-time option to control how much stack space is available for use as the Wagner matrix in editDest3 of the spellfix extension. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
dd0100dd87e2c7c70fabb2d3188f0906 |
User & Date: | drh 2016-01-23 22:55:53.451 |
Context
2016-01-25
| ||
01:07 | Small simplification and performance improvement in memsys5Free(). (check-in: 0a9cff5c48 user: drh tags: trunk) | |
2016-01-23
| ||
22:55 | Add the SQLITE_SPELLFIX_STACKALLOC_SZ compile-time option to control how much stack space is available for use as the Wagner matrix in editDest3 of the spellfix extension. (check-in: dd0100dd87 user: drh tags: trunk) | |
18:24 | Changes to spellfix to try to get it to use stack space instead of heap space in cases where that makes sense. (check-in: dfcebc7393 user: drh tags: trunk) | |
Changes
Changes to ext/misc/spellfix.c.
︙ | ︙ | |||
871 872 873 874 875 876 877 878 879 880 881 882 883 884 | assert( iCost>=0 ); if( iCost<10000 ){ unsigned int b = m[j] + iCost; if( b<m[i] ) m[i] = b; } } /* Compute the edit distance between two strings. ** ** If an error occurs, return a negative number which is the error code. ** ** If pnMatch is not NULL, then *pnMatch is set to the number of characters ** (not bytes) in z2 that matched the search pattern in *pFrom. If pFrom does ** not contain the pattern for a prefix-search, then this is always the number | > > > > > > > > > > > | 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 | assert( iCost>=0 ); if( iCost<10000 ){ unsigned int b = m[j] + iCost; if( b<m[i] ) m[i] = b; } } /* ** How much stack space (int bytes) to use for Wagner matrix in ** editDist3Core(). If more space than this is required, the entire ** matrix is taken from the heap. To reduce the load on the memory ** allocator, make this value as large as practical for the ** architecture in use. */ #ifndef SQLITE_SPELLFIX_STACKALLOC_SZ # define SQLITE_SPELLFIX_STACKALLOC_SZ (1024) #endif /* Compute the edit distance between two strings. ** ** If an error occurs, return a negative number which is the error code. ** ** If pnMatch is not NULL, then *pnMatch is set to the number of characters ** (not bytes) in z2 that matched the search pattern in *pFrom. If pFrom does ** not contain the pattern for a prefix-search, then this is always the number |
︙ | ︙ | |||
900 901 902 903 904 905 906 | EditDist3To *a2; unsigned int *m; unsigned int *pToFree; int szRow; EditDist3Cost *p; int res; sqlite3_uint64 nByte; | | | 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 | EditDist3To *a2; unsigned int *m; unsigned int *pToFree; int szRow; EditDist3Cost *p; int res; sqlite3_uint64 nByte; unsigned int stackSpace[SQLITE_SPELLFIX_STACKALLOC_SZ/sizeof(unsigned int)]; /* allocate the Wagner matrix and the aTo[] array for the TO string */ n = (f.n+1)*(n2+1); n = (n+1)&~1; nByte = n*sizeof(m[0]) + sizeof(a2[0])*n2; if( nByte<=sizeof(stackSpace) ){ m = stackSpace; |
︙ | ︙ |