Lines Matching defs:pf

92 #define BLOOMDEF(pf,ky,b1,b2)	(((b1) = (ky)&(pf)->bmask), \
93 ((b2) = VCHASH(ky)&(pf)->bmask) )
94 #define BLOOMSET(pf,ky,b1,b2) (BLOOMDEF(pf,ky,b1,b2), \
95 ((pf)->bloom[(b1) >> 3] |= (1 << ((b1)&7)) ), \
96 ((pf)->bloom[(b2) >> 3] |= (1 << ((b2)&7)) ) )
97 #define Bloomtest(pf,ky,b1,b2) (BLOOMDEF(pf,ky,b1,b2), \
98 (((pf)->bloom[(b1) >> 3] & (1 << ((b1)&7)) ) && \
99 ((pf)->bloom[(b2) >> 3] & (1 << ((b2)&7)) ) ) )
100 #define BLOOMTEST(pf,ky,b1,b2) ((pf)->bloom ? Bloomtest(pf,ky,b1,b2) : 1)
102 #define pfindex(pf,ky) (((ky)>>3) & (pf)->mask)
137 Pffile_t *pf;
149 if(!(pf = (Pffile_t*)calloc(1,sz)) )
153 { pf->obj = (Pfobj_t*)(pf + 1);
154 pf->tab = (Pftab_t*)(pf->obj+n);
155 pf->mask = k-1;
157 pf->bloom = srcfile ? (Vcchar_t*)(pf->tab + k) : NIL(Vcchar_t*);
158 pf->bmask = 8*blsz - 1;
161 pf->sf = sf;
162 pf->sfsz = sfsz;
163 pf->maxo = n <= 0 ? -1 : 0;
165 return pf;
170 static int pfbuild(Pffile_t* pf, ssize_t blksz)
172 static int pfbuild(pf, blksz)
173 Pffile_t* pf;
182 if(pf->maxo < 0) /* no construction possible */
186 if(sfseek(pf->sf, (Sfoff_t)0, 0) != 0)
188 for(endo = (obj = pf->obj) + (size_t)(pf->sfsz/blksz); obj < endo; ++obj)
189 { if(!(dt = sfreserve(pf->sf, blksz, 0)) || sfvalue(pf->sf) < blksz)
195 if(pf->bloom)
196 BLOOMSET(pf, k, n, r);
197 tab = pf->tab + pfindex(pf, k);
205 static ssize_t pfsegment(Pffile_t* pf, ssize_t ld, ssize_t lm, ssize_t mn, ssize_t blksz)
207 static ssize_t pfsegment(pf, ld, lm, mn, blksz)
208 Pffile_t* pf;
218 ldt = ld + pf->dtpos; rdt = ldt + mn;
222 if((seg = pf->nseg > 0 ? pf->seg + pf->nseg-1 : 0) &&
237 if(pf->nseg >= pf->sseg)
238 { pf->seg = (Pfseg_t*)realloc(pf->seg, (pf->nseg+8)*sizeof(Pfseg_t));
239 if(!pf->seg)
241 pf->sseg = pf->nseg + 8;
243 seg = pf->seg + pf->nseg; pf->nseg += 1;
252 static ssize_t pfparse(Pffile_t* pf, Vchash_t* dt, ssize_t n, Sfoff_t pos, ssize_t blksz)
254 static ssize_t pfparse(pf, dt, n, pos, blksz)
255 Pffile_t* pf;
265 pf->cseg = pf->nseg = 0;
266 pf->dtpos = pos;
267 pf->dtsz = n;
272 { if(!BLOOMTEST(pf, dt[dd], i, k))
274 for(o = pf->tab[pfindex(pf, dt[dd])].list; o; o = o->next)
276 k = dd; i = o - pf->obj; ucnt = 0;
277 for(; k < n && i < pf->maxo; k += blksz, i += 1)
278 { if(dt[k] == pf->obj[i].key)
286 mm = o - pf->obj;
295 else if((k = pfsegment(pf, dd, mm, mn, blksz)) < 0)
305 static int pfwindow(Pffile_t* pf, Vcwmatch_t* wm, ssize_t blksz)
307 static int pfwindow(pf, wm, blksz)
308 Pffile_t* pf;
316 seg = pf->cseg >= pf->nseg ? NIL(Pfseg_t*) : pf->seg+pf->cseg;
319 sz = seg ? (ssize_t)(seg->ldt - pf->dtpos) : pf->dtsz;
332 pf->dtpos += sz; pf->dtsz -= sz;
333 wm->more = pf->dtsz > 0 ? 1 : 0;
337 pf->cseg += 1; /* will be returning whatever is in seg */
340 if(pf->cseg < pf->nseg)
342 else sz = (ssize_t)((pf->dtpos+pf->dtsz) - seg->rdt);
345 if((seg->rmt += sz) > pf->maxo*blksz)
346 seg->rmt = ((Sfoff_t)pf->maxo)*blksz;
352 if(sfseek(pf->sf, seg->lmt, 0) != seg->lmt ||
353 !(wm->wdata = sfreserve(pf->sf, wm->wsize, 0)) ||
354 sfvalue(pf->sf) < wm->wsize)
355 { pf->cseg = pf->nseg = 0;
356 pf->dtsz = 0;
361 pf->dtpos += wm->msize; pf->dtsz -= wm->msize;
362 wm->more = pf->dtsz > 0 ? 1 : 0;
380 Pffile_t *pf;
387 if((pf = pfx->srcf) && ((Sfoff_t)dtsz >= pf->sfsz/2 || dtsz < pfx->blksz) )
391 wm->wsize = here+dtsz > pf->sfsz ? (ssize_t)(pf->sfsz-here) : dtsz;
395 wm->wsize = (ssize_t)pf->sfsz;
397 if(sfseek(pf->sf, (Sfoff_t)0, 0) != (Sfoff_t)0 ||
398 !(wm->wdata = sfreserve(pf->sf, wm->wsize, 0)) )
406 if((pf = pfx->tarf) )
407 { if(pf->dtpos == here && dtsz <= pf->dtsz )
408 { if((rv = pfwindow(pf, wm, pfx->blksz)) < 0)
414 pf->cseg = pf->nseg = 0;
415 pf->maxo = here/pfx->blksz; /* can now match to here */
418 pf = pfx->srcf;
424 if(here != pfx->here || !pf || pf->dtsz <= 0 )
437 if((pf ? pfparse(pf, pfx->key, dtsz, here, pfx->blksz) : 0) <= 0 )
439 if((pf = pfx->tarf) &&
440 pfparse(pf, pfx->key, dtsz, here, pfx->blksz) > 0 )
446 /**/DEBUG_ASSERT(pf && pf == pfx->srcf && pf->dtsz > 0);
448 if((rv = pfwindow(pf, wm, pfx->blksz)) < 0)