/* *addchr-addachrtoacvec
*/ staticvoid
addchr(struct cvec *cv, /* character vector */
chr c) /* character to add */
{
assert(cv->nchrs < cv->chrspace);
cv->chrs[cv->nchrs++] = c;
}
/* *addrange-addarangetoacvec
*/ staticvoid
addrange(struct cvec *cv, /* character vector */
chr from, /* first character of range */
chr to) /* last character of range */
{
assert(cv->nranges < cv->rangespace);
cv->ranges[cv->nranges * 2] = from;
cv->ranges[cv->nranges * 2 + 1] = to;
cv->nranges++;
}
/* *getcvec-getatransientcvec,initializedtoempty * *Thereturnedcvecisvalidonlyuntilthenextcallofgetcvec,which *typicallywillrecyclethespace.Callersshould*not*freethecvec *explicitly;itwillbecleanedupwhenthestructvarsisdestroyed. * *Thisistypicallyusedwhileinterpretingbracketexpressions.Inthat *usagethecvecisonlyneededmomentarilyuntilwebuildarcsfromit, *sotransientnessisaconvenientbehavior.
*/ staticstruct cvec *
getcvec(struct vars *v, /* context */ int nchrs, /* to hold this many chrs... */ int nranges) /* ... and this many ranges */
{ /* recycle existing transient cvec if large enough */ if (v->cv != NULL && nchrs <= v->cv->chrspace &&
nranges <= v->cv->rangespace) return clearcvec(v->cv);
/* nope, make a new one */ if (v->cv != NULL)
freecvec(v->cv);
v->cv = newcvec(nchrs, nranges); if (v->cv == NULL)
ERR(REG_ESPACE);
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.12Bemerkung:
(vorverarbeitet am 2026-08-08)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.