49 chr *realstop = (stop == v->
stop) ? stop : stop + 1;
68 if (cp ==
v->
stop && stop ==
v->
stop && hitstopp != NULL)
77 size_t nchr = stop -
start;
84 if (stop ==
v->
stop && hitstopp != NULL)
89 if (stop ==
v->
stop && nchr <= maxmatchall + 1 && hitstopp != NULL)
91 if (nchr > maxmatchall)
92 return start + maxmatchall;
104 FDEBUG((
"+++ startup +++\n"));
108 FDEBUG((
"color %ld\n", (
long) co));
113 FDEBUG((
"char %c, color %ld\n", (
char) *(cp - 1), (
long) co));
128 while (cp < realstop)
130 FDEBUG((
"+++ at c%d +++\n", (
int) (css - d->
ssets)));
132 FDEBUG((
"char %c, color %ld\n", (
char) *cp, (
long) co));
148 while (cp < realstop)
168 FDEBUG((
"+++ shutdown at c%d +++\n", (
int) (css - d->
ssets)));
171 if (hitstopp != NULL)
174 FDEBUG((
"color %ld\n", (
long) co));
189 (post == NULL || post < ss->lastseen))
213 chr *realmin = (min ==
v->
stop) ? min : min + 1;
223 if (hitstopp != NULL)
233 if (cp != NULL && coldp != NULL)
243 size_t nchr = min -
start;
265 FDEBUG((
"--- startup ---\n"));
269 FDEBUG((
"color %ld\n", (
long) co));
274 FDEBUG((
"char %c, color %ld\n", (
char) *(cp - 1), (
long) co));
292 FDEBUG((
"--- at c%d ---\n", (
int) (css - d->
ssets)));
294 FDEBUG((
"char %c, color %ld\n", (
char) *cp, (
long) co));
344 FDEBUG((
"color %ld\n", (
long) co));
374 struct sset **lastcss,
379 struct sset *css = *lastcss;
386 size_t nchr = probe -
v->
start;
396 if (cp == NULL || cp > probe)
403 FDEBUG((
">>> startup >>>\n"));
405 FDEBUG((
"color %ld\n", (
long) co));
412 else if (css == NULL)
429 FDEBUG((
">>> at c%d >>>\n", (
int) (css - d->
ssets)));
431 FDEBUG((
"char %c, color %ld\n", (
char) *cp, (
long) co));
472 FDEBUG((
">>> at c%d >>>\n", (
int) (css - d->
ssets)));
474 FDEBUG((
"char %c, color %ld\n", (
char) *cp, (
long) co));
483 FDEBUG((
"color %ld\n", (
long) co));
536 if (min ==
start && backmin <= backmax)
548 minreps = (min -
start - 1) / brlen + 1;
552 if (minreps < backmin)
554 if (backmax !=
DUPINF && maxreps > backmax)
556 if (maxreps < minreps)
566 while (numreps < maxreps)
568 if ((*
v->
g->compare) (brstring, p, brlen) != 0)
576 if (numreps >= minreps)
654 sizeof(
struct sset *));
656 sizeof(
struct arcp));
695 if (d->
ssets != NULL)
722 for (
i = 0;
i < n;
i++)
797 if (css->
outs[co] != NULL)
800 return css->
outs[co];
903 (
int) (css - d->
ssets), co, (
int) (p - d->
ssets)));
936 FDEBUG((
"=== testing lacon %d\n", n));
945 (
chr **) NULL, (
int *) NULL);
960 satisfied = !satisfied;
962 FDEBUG((
"=== lacon %d satisfied %d\n", n, satisfied));
991 while ((p = ap.
ss) != NULL)
994 FDEBUG((
"zapping c%d's %ld outarc\n", (
int) (p - d->
ssets), (
long)
co));
1008 FDEBUG((
"del outarc %d from c%d's in chn\n",
i, (
int) (p - d->
ssets)));
1013 struct arcp lastap = {NULL, 0};
1016 for (ap = p->
ins; ap.
ss != NULL &&
1078 ancient = cp - d->
nssets * 2 / 3;
1086 FDEBUG((
"replacing c%d\n", (
int) (ss - d->
ssets)));
1089 for (ss = d->
ssets, end = d->
search; ss < end; ss++)
1094 FDEBUG((
"replacing c%d\n", (
int) (ss - d->
ssets)));
1099 FDEBUG((
"cannot find victim to replace!\n"));
#define HASH(sign, val, siglen)
static void freedfa(struct dfa *d)
static chr * shortest(struct vars *v, struct dfa *d, chr *start, chr *min, chr *max, chr **coldp, int *hitstopp)
static chr * dfa_backref(struct vars *v, struct dfa *d, chr *start, chr *min, chr *max, bool shortest)
static int lacon(struct vars *v, struct cnfa *pcnfa, chr *cp, color co)
static unsigned hash(unsigned *uv, int n)
static chr * lastcold(struct vars *v, struct dfa *d)
static chr * longest(struct vars *v, struct dfa *d, chr *start, chr *stop, int *hitstopp)
static struct sset * getvacant(struct vars *v, struct dfa *d, chr *cp, chr *start)
static struct sset * miss(struct vars *v, struct dfa *d, struct sset *css, color co, chr *cp, chr *start)
static struct dfa * newdfa(struct vars *v, struct cnfa *cnfa, struct colormap *cm, struct smalldfa *sml)
static struct sset * initialize(struct vars *v, struct dfa *d, chr *start)
static struct sset * pickss(struct vars *v, struct dfa *d, chr *cp, chr *start)
static int matchuntil(struct vars *v, struct dfa *d, chr *probe, struct sset **lastcss, chr **lastcp)
static struct dfa * getladfa(struct vars *v, int n)
#define HIT(h, bv, ss, nw)
#define STACK_TOO_DEEP(re)
#define LATYPE_IS_AHEAD(la)
#define LATYPE_IS_POS(la)
unsigned statesarea[FEWSTATES *2+WORK]
struct arcp incarea[FEWSTATES *2 *FEWCOLORS]
struct sset * outsarea[FEWSTATES *2 *FEWCOLORS]
struct sset ssets[FEWSTATES *2]