Lines Matching refs:vcpa

28 #define MMIN(vcpa)	((vcpa)->mmin >= HMIN ? (vcpa)->mmin : HMIN)
125 static ssize_t extend(Vclzparse_t* vcpa, Pair_t* pr, int type)
127 static ssize_t extend(vcpa, pr, type)
128 Vclzparse_t* vcpa;
136 Vcchar_t *cmap = ((vcpa->type&type&VCLZ_MAP) && vcpa->cmap) ? vcpa->cmap : 0;
139 mmin = vcpa->mmin <= 1 ? 1 : vcpa->mmin;
142 if((m = mt->mpos - vcpa->nsrc) >= 0 )
143 { mstr = vcpa->tar; /* matching in target data */
144 mbeg = vcpa->nsrc; /* origin of data */
146 n = vcpa->ntar - m; /* amount of matchable */
149 { mstr = vcpa->src; /* matching in source data */
152 n = vcpa->nsrc - mt->mpos;
156 ts = vcpa->tar + (m = mt->tpos - vcpa->nsrc);
157 et = ts + (n <= (m = vcpa->ntar-m) ? n : m);
183 { mt->tpos = (ts - vcpa->tar) + vcpa->nsrc + n;
197 static int hashparse(Vclzparse_t* vcpa, ssize_t prune)
199 static int hashparse(vcpa, prune)
200 Vclzparse_t* vcpa;
213 int reverse = vcpa->type&VCLZ_REVERSE;
214 Vcchar_t *cmap = ((vcpa->type&VCLZ_MAP) && vcpa->cmap) ? vcpa->cmap : NIL(Vcchar_t*);
215 ssize_t mmin = MMIN(vcpa); /* minimum match length */
216 /**/DEBUG_ASSERT(vcpa->ntar >= mmin);
219 if(!(hs = hashtable(mmin, vcpa->nsrc, vcpa->ntar)))
224 if(vcpa->nsrc >= hs->poly) /* add source data into hash table */
225 { fk = fkhash(hs, vcpa->src, NIL(Vcchar_t*)); ky = fk+1;
226 ns = (ks = vcpa->src) + mmin;
227 for(endo = (m = hs->src) + vcpa->nsrc - (mmin-1); ; ++ks, ++ns )
236 ns = (ks = vcpa->tar) + mmin; et = ks + vcpa->ntar; /* bounds of target data */
239 for(add = obj = hs->tar, endo = obj + vcpa->ntar - (mmin-1); ; )
244 flen = rlen = vcpa->mmin - 1; /* match length */
268 { sm = vcpa->tar + (m - hs->tar);
269 em = vcpa->tar + vcpa->ntar;
272 { sm = vcpa->src + (m - hs->src);
273 em = vcpa->src + vcpa->nsrc;
303 if(flen >= vcpa->mmin)
315 flen = extend(vcpa, &fpair, ftyp);
339 { sm = vcpa->tar + ((m + mmin-1) - hs->tar);
340 em = vcpa->tar;
345 { sm = vcpa->src + ((m + mmin-1) - hs->src);
346 em = vcpa->src;
376 if(rlen >= vcpa->mmin)
388 rlen = extend(vcpa, &rpair, rtyp|VCLZ_REVERSE);
395 if(n >= vcpa->mmin) /* a potential match */
396 { if((n = (*vcpa->parsef)(vcpa, tp, pair->mtch, pair->size)) < 0)
424 if((n = (hs->tar + vcpa->ntar) - add) > 0 )
428 n = (*vcpa->parsef)(vcpa, 0, fpair.mtch, 1);
436 static int sfxparse(Vclzparse_t* vcpa)
438 static int sfxparse(vcpa)
439 Vclzparse_t* vcpa;
449 ssize_t mmin = MMIN(vcpa);
453 if((nsrc = vcpa->nsrc) == 0)
454 { nstr = vcpa->ntar;
455 str = vcpa->tar;
457 else if(vcpa->tar == (vcpa->src + nsrc) )
458 { nstr = nsrc + vcpa->ntar;
459 str = vcpa->src;
462 { nstr = nsrc + vcpa->ntar;
465 memcpy(str, vcpa->src, nsrc);
466 memcpy(str+nsrc, vcpa->tar, vcpa->ntar);
531 extend(vcpa, &pair, 0);
532 if((r = (*vcpa->parsef)(vcpa, 0, pair.mtch, pair.size)) < 0 )
547 if((*vcpa->parsef)(vcpa, 0, pair.mtch, 1) <= 0 )
553 done: if(str && str != vcpa->tar && str != vcpa->src)
561 int vclzparse(Vclzparse_t* vcpa, ssize_t bound)
563 int vclzparse(vcpa, bound )
564 Vclzparse_t* vcpa;
569 if(!vcpa->parsef)
571 if(vcpa->nsrc < 0 || (vcpa->nsrc > 0 && !vcpa->src) )
573 if(vcpa->ntar < 0 || (vcpa->ntar > 0 && !vcpa->tar) )
576 if(vcpa->ntar == 0 ) /* nothing to do */
579 if(vcpa->ntar < MMIN(vcpa) ) /* no match possible */
583 mtch.size = vcpa->ntar;
584 if((*vcpa->parsef)(vcpa, 0, &mtch, 1) != vcpa->ntar)
589 if((vcpa->type & (VCLZ_REVERSE|VCLZ_MAP)) || bound >= 0 || vcpa->cmap )
590 return hashparse(vcpa, bound);
591 else return sfxparse(vcpa);