/* * newcvec - allocate a new cvec */ static struct cvec * newcvec(int nchrs, /* to hold this many chrs... */ int nranges) /* ... and this many ranges */ { size_t nc = (size_t) nchrs + (size_t) nranges * 2; size_t n = sizeof(struct cvec) + nc * sizeof(chr); struct cvec *cv = (struct cvec *) MALLOC(n); if (cv == NULL) return NULL; cv->chrspace = nchrs; cv->chrs = (chr *) (((char *) cv) + sizeof(struct cvec)); cv->ranges = cv->chrs + nchrs; cv->rangespace = nranges; return clearcvec(cv); }
/* * getcvec - get a cvec, remembering it as v->cv */ static struct cvec * getcvec(struct vars * v, /* context */ int nchrs, /* to hold this many chrs... */ int nranges) /* ... and this many ranges */ { if (v->cv != NULL && nchrs <= v->cv->chrspace && nranges <= v->cv->rangespace) return clearcvec(v->cv); if (v->cv != NULL) freecvec(v->cv); v->cv = newcvec(nchrs, nranges); if (v->cv == NULL) ERR(REG_ESPACE); return v->cv; }
/* - getcvec - get a cvec, remembering it as v->cv ^ static struct cvec *getcvec(struct vars *, int, int); */ static struct cvec * getcvec( struct vars *v, /* context */ int nchrs, /* to hold this many chrs... */ int nranges) /* ... and this many ranges... */ { if ((v->cv != NULL) && (nchrs <= v->cv->chrspace) && (nranges <= v->cv->rangespace)) { return clearcvec(v->cv); } if (v->cv != NULL) { freecvec(v->cv); } v->cv = newcvec(nchrs, nranges); if (v->cv == NULL) { ERR(REG_ESPACE); } return v->cv; }
/* * newcvec - allocate a new cvec */ static struct cvec * newcvec(int nchrs, /* to hold this many chrs... */ int nranges, /* ... and this many ranges... */ int nmcces) /* ... and this many MCCEs */ { size_t n; size_t nc; struct cvec *cv; nc = (size_t) nchrs + (size_t) nmcces *(MAXMCCE + 1) + (size_t) nranges *2; n = sizeof(struct cvec) + (size_t) (nmcces - 1) * sizeof(chr *) + nc * sizeof(chr); cv = (struct cvec *) MALLOC(n); if (cv == NULL) return NULL; cv->chrspace = nchrs; cv->chrs = (chr *) &cv->mcces[nmcces]; /* chrs just after MCCE ptrs */ cv->mccespace = nmcces; cv->ranges = cv->chrs + nchrs + nmcces * (MAXMCCE + 1); cv->rangespace = nranges; return clearcvec(cv); }