Lines Matching refs:p
119 static unsigned testpcacheRandom(testpcache *p){ in testpcacheRandom() argument
123 p->iRand = (p->iRand*69069 + 5); in testpcacheRandom()
124 x = (x<<8) | ((p->iRand>>16)&0xff); in testpcacheRandom()
140 testpcache *p; in testpcacheCreate() local
145 p = sqlite3_malloc( nMem ); in testpcacheCreate()
146 if( p==0 ) return 0; in testpcacheCreate()
147 x = (char*)&p[1]; in testpcacheCreate()
148 p->szPage = szPage; in testpcacheCreate()
149 p->szExtra = szExtra; in testpcacheCreate()
150 p->nFree = TESTPCACHE_NPAGE; in testpcacheCreate()
151 p->nPinned = 0; in testpcacheCreate()
152 p->iRand = testpcacheGlobal.prngSeed; in testpcacheCreate()
153 p->bPurgeable = bPurgeable; in testpcacheCreate()
154 p->iMagic = TESTPCACHE_VALID; in testpcacheCreate()
156 p->a[i].key = 0; in testpcacheCreate()
157 p->a[i].isPinned = 0; in testpcacheCreate()
158 p->a[i].page.pBuf = (void*)x; in testpcacheCreate()
159 p->a[i].page.pExtra = (void*)&x[szPage]; in testpcacheCreate()
162 return (sqlite3_pcache*)p; in testpcacheCreate()
169 testpcache *p = (testpcache*)pCache; in testpcacheCachesize() local
170 assert( p->iMagic==TESTPCACHE_VALID ); in testpcacheCachesize()
180 testpcache *p = (testpcache*)pCache; in testpcachePagecount() local
181 assert( p->iMagic==TESTPCACHE_VALID ); in testpcachePagecount()
184 return TESTPCACHE_NPAGE - p->nFree; in testpcachePagecount()
195 testpcache *p = (testpcache*)pCache; in testpcacheFetch() local
197 assert( p->iMagic==TESTPCACHE_VALID ); in testpcacheFetch()
203 if( p->a[i].key==key ){ in testpcacheFetch()
204 if( !p->a[i].isPinned ){ in testpcacheFetch()
205 p->nPinned++; in testpcacheFetch()
206 assert( p->nPinned <= TESTPCACHE_NPAGE - p->nFree ); in testpcacheFetch()
207 p->a[i].isPinned = 1; in testpcacheFetch()
209 return &p->a[i].page; in testpcacheFetch()
219 if( p->nPinned==TESTPCACHE_NPAGE ){ in testpcacheFetch()
224 if( p->nPinned>=TESTPCACHE_NPAGE-TESTPCACHE_RESERVE && createFlag<2 ){ in testpcacheFetch()
240 if( p->nFree>TESTPCACHE_RESERVE || (createFlag==2 && p->nFree>0) ){ in testpcacheFetch()
241 j = testpcacheRandom(p) % TESTPCACHE_NPAGE; in testpcacheFetch()
243 if( p->a[j].key==0 ){ in testpcacheFetch()
244 p->a[j].key = key; in testpcacheFetch()
245 p->a[j].isPinned = 1; in testpcacheFetch()
246 memset(p->a[j].page.pBuf, 0, p->szPage); in testpcacheFetch()
247 memset(p->a[j].page.pExtra, 0, p->szExtra); in testpcacheFetch()
248 p->nPinned++; in testpcacheFetch()
249 p->nFree--; in testpcacheFetch()
250 assert( p->nPinned <= TESTPCACHE_NPAGE - p->nFree ); in testpcacheFetch()
251 return &p->a[j].page; in testpcacheFetch()
261 if( p->bPurgeable==0 ){ in testpcacheFetch()
268 j = testpcacheRandom(p) % TESTPCACHE_NPAGE; in testpcacheFetch()
270 if( p->a[j].key>0 && p->a[j].isPinned==0 ){ in testpcacheFetch()
271 p->a[j].key = key; in testpcacheFetch()
272 p->a[j].isPinned = 1; in testpcacheFetch()
273 memset(p->a[j].page.pBuf, 0, p->szPage); in testpcacheFetch()
274 memset(p->a[j].page.pExtra, 0, p->szExtra); in testpcacheFetch()
275 p->nPinned++; in testpcacheFetch()
276 assert( p->nPinned <= TESTPCACHE_NPAGE - p->nFree ); in testpcacheFetch()
277 return &p->a[j].page; in testpcacheFetch()
294 testpcache *p = (testpcache*)pCache; in testpcacheUnpin() local
296 assert( p->iMagic==TESTPCACHE_VALID ); in testpcacheUnpin()
304 if( p->bPurgeable in testpcacheUnpin()
305 && (100-testpcacheGlobal.discardChance) <= (testpcacheRandom(p)%100) in testpcacheUnpin()
311 if( &p->a[i].page==pOldPage ){ in testpcacheUnpin()
313 assert( p->a[i].isPinned ); in testpcacheUnpin()
314 p->a[i].isPinned = 0; in testpcacheUnpin()
315 p->nPinned--; in testpcacheUnpin()
316 assert( p->nPinned>=0 ); in testpcacheUnpin()
318 p->a[i].key = 0; in testpcacheUnpin()
319 p->nFree++; in testpcacheUnpin()
320 assert( p->nFree<=TESTPCACHE_NPAGE ); in testpcacheUnpin()
340 testpcache *p = (testpcache*)pCache; in testpcacheRekey() local
342 assert( p->iMagic==TESTPCACHE_VALID ); in testpcacheRekey()
350 if( p->a[i].key==newKey ){ in testpcacheRekey()
352 assert( p->a[i].isPinned==0 ); in testpcacheRekey()
353 p->a[i].key = 0; in testpcacheRekey()
354 p->nFree++; in testpcacheRekey()
355 assert( p->nFree<=TESTPCACHE_NPAGE ); in testpcacheRekey()
363 if( p->a[i].key==oldKey ){ in testpcacheRekey()
365 assert( &p->a[i].page==pOldPage ); in testpcacheRekey()
367 assert( p->a[i].isPinned ); in testpcacheRekey()
368 p->a[i].key = newKey; in testpcacheRekey()
383 testpcache *p = (testpcache*)pCache; in testpcacheTruncate() local
385 assert( p->iMagic==TESTPCACHE_VALID ); in testpcacheTruncate()
389 if( p->a[i].key>=iLimit ){ in testpcacheTruncate()
390 p->a[i].key = 0; in testpcacheTruncate()
391 if( p->a[i].isPinned ){ in testpcacheTruncate()
392 p->nPinned--; in testpcacheTruncate()
393 assert( p->nPinned>=0 ); in testpcacheTruncate()
395 p->nFree++; in testpcacheTruncate()
396 assert( p->nFree<=TESTPCACHE_NPAGE ); in testpcacheTruncate()
405 testpcache *p = (testpcache*)pCache; in testpcacheDestroy() local
406 assert( p->iMagic==TESTPCACHE_VALID ); in testpcacheDestroy()
409 p->iMagic = TESTPCACHE_CLEAR; in testpcacheDestroy()
410 sqlite3_free(p); in testpcacheDestroy()