Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(39)

Side by Side Diff: third_party/sqlite/src/src/bitvec.c

Issue 2751253002: [sql] Import SQLite 3.17.0. (Closed)
Patch Set: also clang on Linux i386 Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « third_party/sqlite/src/src/backup.c ('k') | third_party/sqlite/src/src/btmutex.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 ** 2008 February 16 2 ** 2008 February 16
3 ** 3 **
4 ** The author disclaims copyright to this source code. In place of 4 ** The author disclaims copyright to this source code. In place of
5 ** a legal notice, here is a blessing: 5 ** a legal notice, here is a blessing:
6 ** 6 **
7 ** May you do good and not evil. 7 ** May you do good and not evil.
8 ** May you find forgiveness for yourself and forgive others. 8 ** May you find forgiveness for yourself and forgive others.
9 ** May you share freely, never taking more than you give. 9 ** May you share freely, never taking more than you give.
10 ** 10 **
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 u32 h; 170 u32 h;
171 if( p==0 ) return SQLITE_OK; 171 if( p==0 ) return SQLITE_OK;
172 assert( i>0 ); 172 assert( i>0 );
173 assert( i<=p->iSize ); 173 assert( i<=p->iSize );
174 i--; 174 i--;
175 while((p->iSize > BITVEC_NBIT) && p->iDivisor) { 175 while((p->iSize > BITVEC_NBIT) && p->iDivisor) {
176 u32 bin = i/p->iDivisor; 176 u32 bin = i/p->iDivisor;
177 i = i%p->iDivisor; 177 i = i%p->iDivisor;
178 if( p->u.apSub[bin]==0 ){ 178 if( p->u.apSub[bin]==0 ){
179 p->u.apSub[bin] = sqlite3BitvecCreate( p->iDivisor ); 179 p->u.apSub[bin] = sqlite3BitvecCreate( p->iDivisor );
180 if( p->u.apSub[bin]==0 ) return SQLITE_NOMEM; 180 if( p->u.apSub[bin]==0 ) return SQLITE_NOMEM_BKPT;
181 } 181 }
182 p = p->u.apSub[bin]; 182 p = p->u.apSub[bin];
183 } 183 }
184 if( p->iSize<=BITVEC_NBIT ){ 184 if( p->iSize<=BITVEC_NBIT ){
185 p->u.aBitmap[i/BITVEC_SZELEM] |= 1 << (i&(BITVEC_SZELEM-1)); 185 p->u.aBitmap[i/BITVEC_SZELEM] |= 1 << (i&(BITVEC_SZELEM-1));
186 return SQLITE_OK; 186 return SQLITE_OK;
187 } 187 }
188 h = BITVEC_HASH(i++); 188 h = BITVEC_HASH(i++);
189 /* if there wasn't a hash collision, and this doesn't */ 189 /* if there wasn't a hash collision, and this doesn't */
190 /* completely fill the hash, then just add it without */ 190 /* completely fill the hash, then just add it without */
(...skipping 14 matching lines...) Expand all
205 } while( p->u.aHash[h] ); 205 } while( p->u.aHash[h] );
206 /* we didn't find it in the hash. h points to the first */ 206 /* we didn't find it in the hash. h points to the first */
207 /* available free spot. check to see if this is going to */ 207 /* available free spot. check to see if this is going to */
208 /* make our hash too "full". */ 208 /* make our hash too "full". */
209 bitvec_set_rehash: 209 bitvec_set_rehash:
210 if( p->nSet>=BITVEC_MXHASH ){ 210 if( p->nSet>=BITVEC_MXHASH ){
211 unsigned int j; 211 unsigned int j;
212 int rc; 212 int rc;
213 u32 *aiValues = sqlite3StackAllocRaw(0, sizeof(p->u.aHash)); 213 u32 *aiValues = sqlite3StackAllocRaw(0, sizeof(p->u.aHash));
214 if( aiValues==0 ){ 214 if( aiValues==0 ){
215 return SQLITE_NOMEM; 215 return SQLITE_NOMEM_BKPT;
216 }else{ 216 }else{
217 memcpy(aiValues, p->u.aHash, sizeof(p->u.aHash)); 217 memcpy(aiValues, p->u.aHash, sizeof(p->u.aHash));
218 memset(p->u.apSub, 0, sizeof(p->u.apSub)); 218 memset(p->u.apSub, 0, sizeof(p->u.apSub));
219 p->iDivisor = (p->iSize + BITVEC_NPTR - 1)/BITVEC_NPTR; 219 p->iDivisor = (p->iSize + BITVEC_NPTR - 1)/BITVEC_NPTR;
220 rc = sqlite3BitvecSet(p, i); 220 rc = sqlite3BitvecSet(p, i);
221 for(j=0; j<BITVEC_NINT; j++){ 221 for(j=0; j<BITVEC_NINT; j++){
222 if( aiValues[j] ) rc |= sqlite3BitvecSet(p, aiValues[j]); 222 if( aiValues[j] ) rc |= sqlite3BitvecSet(p, aiValues[j]);
223 } 223 }
224 sqlite3StackFree(0, aiValues); 224 sqlite3StackFree(0, aiValues);
225 return rc; 225 return rc;
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
286 } 286 }
287 287
288 /* 288 /*
289 ** Return the value of the iSize parameter specified when Bitvec *p 289 ** Return the value of the iSize parameter specified when Bitvec *p
290 ** was created. 290 ** was created.
291 */ 291 */
292 u32 sqlite3BitvecSize(Bitvec *p){ 292 u32 sqlite3BitvecSize(Bitvec *p){
293 return p->iSize; 293 return p->iSize;
294 } 294 }
295 295
296 #ifndef SQLITE_OMIT_BUILTIN_TEST 296 #ifndef SQLITE_UNTESTABLE
297 /* 297 /*
298 ** Let V[] be an array of unsigned characters sufficient to hold 298 ** Let V[] be an array of unsigned characters sufficient to hold
299 ** up to N bits. Let I be an integer between 0 and N. 0<=I<N. 299 ** up to N bits. Let I be an integer between 0 and N. 0<=I<N.
300 ** Then the following macros can be used to set, clear, or test 300 ** Then the following macros can be used to set, clear, or test
301 ** individual bits within V. 301 ** individual bits within V.
302 */ 302 */
303 #define SETBIT(V,I) V[I>>3] |= (1<<(I&7)) 303 #define SETBIT(V,I) V[I>>3] |= (1<<(I&7))
304 #define CLEARBIT(V,I) V[I>>3] &= ~(1<<(I&7)) 304 #define CLEARBIT(V,I) V[I>>3] &= ~(1<<(I&7))
305 #define TESTBIT(V,I) (V[I>>3]&(1<<(I&7)))!=0 305 #define TESTBIT(V,I) (V[I>>3]&(1<<(I&7)))!=0
306 306
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
401 } 401 }
402 } 402 }
403 403
404 /* Free allocated structure */ 404 /* Free allocated structure */
405 bitvec_end: 405 bitvec_end:
406 sqlite3_free(pTmpSpace); 406 sqlite3_free(pTmpSpace);
407 sqlite3_free(pV); 407 sqlite3_free(pV);
408 sqlite3BitvecDestroy(pBitvec); 408 sqlite3BitvecDestroy(pBitvec);
409 return rc; 409 return rc;
410 } 410 }
411 #endif /* SQLITE_OMIT_BUILTIN_TEST */ 411 #endif /* SQLITE_UNTESTABLE */
OLDNEW
« no previous file with comments | « third_party/sqlite/src/src/backup.c ('k') | third_party/sqlite/src/src/btmutex.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698