diff options
Diffstat (limited to 'generic/regc_cvec.c')
-rw-r--r-- | generic/regc_cvec.c | 131 |
1 files changed, 51 insertions, 80 deletions
diff --git a/generic/regc_cvec.c b/generic/regc_cvec.c index 0b976b8..64f34cd 100644 --- a/generic/regc_cvec.c +++ b/generic/regc_cvec.c @@ -6,7 +6,7 @@ * * Development of this software was funded, in part, by Cray Research Inc., * UUNET Communications Services Inc., Sun Microsystems Inc., and Scriptics - * Corporation, none of whom are responsible for the results. The author + * Corporation, none of whom are responsible for the results. The author * thanks all of them. * * Redistribution and use in source and binary forms -- with or without @@ -14,8 +14,8 @@ * redistributions in source form retain this entire copyright notice and * indicate the origin and nature of any modifications. * - * I'd appreciate being given credit for this package in the documentation - * of software which uses it, but that is not a requirement. + * I'd appreciate being given credit for this package in the documentation of + * software which uses it, but that is not a requirement. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY @@ -27,149 +27,120 @@ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * */ /* + * Notes: + * Only (selected) functions in _this_ file should treat chr* as non-constant. + */ + +/* - newcvec - allocate a new cvec - ^ static struct cvec *newcvec(int, int, int); + ^ static struct cvec *newcvec(int, int); */ static struct cvec * -newcvec(nchrs, nranges, nmcces) - int nchrs; /* to hold this many chrs... */ - int nranges; /* ... and this many ranges... */ - int nmcces; /* ... and this many MCCEs */ +newcvec( + int nchrs, /* to hold this many chrs... */ + int nranges) /* ... and this many ranges... */ { - size_t n; - size_t nc; - struct cvec *cv; + 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); - 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->chrs = (chr *)(((char *)cv)+sizeof(struct cvec)); + cv->ranges = cv->chrs + nchrs; cv->rangespace = nranges; return clearcvec(cv); } - + /* - clearcvec - clear a possibly-new cvec * Returns pointer as convenience. ^ static struct cvec *clearcvec(struct cvec *); */ static struct cvec * -clearcvec(cv) - struct cvec *cv; /* character vector */ +clearcvec( + struct cvec *cv) /* character vector */ { - int i; - assert(cv != NULL); cv->nchrs = 0; - assert(cv->chrs == (chr *)&cv->mcces[cv->mccespace]); - cv->nmcces = 0; - cv->nmccechrs = 0; cv->nranges = 0; - for (i = 0; i < cv->mccespace; i++) { - cv->mcces[i] = NULL; - } - return cv; } - + /* - addchr - add a chr to a cvec ^ static VOID addchr(struct cvec *, pchr); */ -static VOID -addchr(cv, c) - struct cvec *cv; /* character vector */ - pchr c; /* character to add */ +static void +addchr( + struct cvec *cv, /* character vector */ + pchr c) /* character to add */ { - assert(cv->nchrs < cv->chrspace - cv->nmccechrs); cv->chrs[cv->nchrs++] = (chr)c; } - + /* - addrange - add a range to a cvec ^ static VOID addrange(struct cvec *, pchr, pchr); */ -static VOID -addrange(cv, from, to) - struct cvec *cv; /* character vector */ - pchr from; /* first character of range */ - pchr to; /* last character of range */ +static void +addrange( + struct cvec *cv, /* character vector */ + pchr from, /* first character of range */ + pchr to) /* last character of range */ { assert(cv->nranges < cv->rangespace); cv->ranges[cv->nranges*2] = (chr)from; cv->ranges[cv->nranges*2 + 1] = (chr)to; cv->nranges++; } - -/* - - haschr - does a cvec contain this chr? - ^ static int haschr(struct cvec *, pchr); - */ -static int /* predicate */ -haschr(cv, c) - struct cvec *cv; /* character vector */ - pchr c; /* character to test for */ -{ - int i; - chr *p; - - for (p = cv->chrs, i = cv->nchrs; i > 0; p++, i--) { - if (*p == c) { - return 1; - } - } - for (p = cv->ranges, i = cv->nranges; i > 0; p += 2, i--) { - if ((*p <= c) && (c <= *(p+1))) { - return 1; - } - } - return 0; -} - + /* - getcvec - get a cvec, remembering it as v->cv ^ static struct cvec *getcvec(struct vars *, int, int); */ static struct cvec * -getcvec(v, nchrs, nranges) - struct vars *v; /* context */ - int nchrs; /* to hold this many chrs... */ - int nranges; /* ... and this many ranges... */ +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) { + 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, 0); + v->cv = newcvec(nchrs, nranges); if (v->cv == NULL) { ERR(REG_ESPACE); } return v->cv; } - + /* - freecvec - free a cvec ^ static VOID freecvec(struct cvec *); */ -static VOID -freecvec(cv) - struct cvec *cv; /* character vector */ +static void +freecvec( + struct cvec *cv) /* character vector */ { FREE(cv); } + +/* + * Local Variables: + * mode: c + * c-basic-offset: 4 + * fill-column: 78 + * End: + */ |