5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * This file is generated, please don't edit it.
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * script: ./../../../util/gen.pl
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * args: bimap errmap.h NAME=mecherrmap LEFT=OM_uint32 RIGHT=struct mecherror LEFTPRINT=print_OM_uint32 RIGHTPRINT=mecherror_print LEFTCMP=cmp_OM_uint32 RIGHTCMP=mecherror_cmp
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * The rest of this file is copied from a template, with
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * substitutions. See the template for copyright info.
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry/* start of t_bimap header template */
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * bidirectional mapping table, add-only
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * Parameters:
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * LEFT, RIGHT - types
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * LEFTCMP, RIGHTCMP - comparison functions
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * int init() - nonzero is error code, if any possible
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * long size()
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * void foreach(int (*)(LEFT, RIGHT, void*), void*)
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * int add(LEFT, RIGHT) - 0 = success, -1 = allocation failure
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * const struct mecherror *findleft(OM_uint32) - null iff not found
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * const OM_uint32 *findright(struct mecherror)
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * void destroy() - destroys container, doesn't delete elements
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * initial implementation: flat array of (left,right) pairs
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry/* end of t_bimap header template */
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry/* start of t_array template */
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * array type, derived from template
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * parameters:
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * NAME: mecherrmap__pairarray
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * TYPE: struct mecherrmap__pair
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * int init() -> nonzero if fail initial allocation
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * unsigned long size() -> nonnegative number of values stored
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * int grow(newsize) -> negative if fail allocation, memset(,0,) new space
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * struct mecherrmap__pair *getaddr(idx) -> aborts if out of range
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * void set(idx, value) -> aborts if out of range
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry * struct mecherrmap__pair get(idx) -> value, or aborts if out of range
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barrytypedef struct mecherrmap__pairarray__header mecherrmap__pairarray;
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barrystatic inline int
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barrymecherrmap__pairarray_init(mecherrmap__pairarray *arr)
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry arr->elts = calloc(10, sizeof(struct mecherrmap__pair));
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barrystatic inline long
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barrymecherrmap__pairarray_size(mecherrmap__pairarray *arr)
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barrystatic inline long
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barrymecherrmap__pairarray_max_size(mecherrmap__pairarray *arr)
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry return (long) upper_bound;
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barrystatic inline int
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barrymecherrmap__pairarray_grow(mecherrmap__pairarray *arr, unsigned long newcount)
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry size_t oldsize = sizeof(*arr->elts) * arr->allocated;
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry if (newcount > mecherrmap__pairarray_max_size(arr))
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry memset((char *)ptr + oldsize, 0, newsize - oldsize);
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barrystatic inline struct mecherrmap__pair *
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barrymecherrmap__pairarray_getaddr (mecherrmap__pairarray *arr, long idx)
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barrystatic inline void
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barrymecherrmap__pairarray_set (mecherrmap__pairarray *arr, long idx, struct mecherrmap__pair value)
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry newvalp = mecherrmap__pairarray_getaddr(arr, idx);
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barrystatic inline struct mecherrmap__pair
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barrymecherrmap__pairarray_get (mecherrmap__pairarray *arr, long idx)
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry return *mecherrmap__pairarray_getaddr(arr, idx);
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barrystatic inline void
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barrymecherrmap__pairarray_destroy (mecherrmap__pairarray *arr)
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry/* end of t_array template */
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry/* start of t_bimap body template */
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry/* for use in cases where text substitutions may not work, like putting
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry "const" before a type that turns out to be "char *" */
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barrytypedef struct {
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barrystatic inline int
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barrystatic inline long
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barrystatic inline void
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barrymecherrmap_foreach (mecherrmap *m, int (*fn)(OM_uint32, struct mecherror, void *), void *p)
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry for (i = 0; i < sz; i++) {
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry pair = mecherrmap__pairarray_getaddr (&m->a, i);
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barrystatic inline int
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barrymecherrmap_add (mecherrmap *m, OM_uint32 l, struct mecherror r)
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry /* Make sure we're not duplicating. */
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry for (i = 0; i < sz; i++) {
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry pair = mecherrmap__pairarray_getaddr (&m->a, i);
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barrystatic inline const mecherrmap__right_t *
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry for (i = 0; i < sz; i++) {
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry pair = mecherrmap__pairarray_getaddr (&m->a, i);
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barrystatic inline const mecherrmap__left_t *
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barrymecherrmap_findright (mecherrmap *m, struct mecherror r)
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry for (i = 0; i < sz; i++) {
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry pair = mecherrmap__pairarray_getaddr (&m->a, i);
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barrystatic inline int
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barrymecherrmap__printone (OM_uint32 l, struct mecherror r, void *p)
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barrystatic inline void
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry mecherrmap_foreach (m, mecherrmap__printone, &ps);
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barrystatic inline void
5e01956f3000408c2a2c5a08c8d0acf2c2a9d8eeGlenn Barry/* end of t_bimap body template */