Mercurial > ~dholland > hg > ag > index.cgi
view help2html/uintarray.h @ 6:607e3be6bad8
Adjust to the moving target called the C++ standard.
Apparently nowadays it's not allowed to define an explicit copy
constructor but not an assignment operator. Consequently, defining the
explicit copy constructor in terms of the implicit/automatic
assignment operator for general convenience no longer works.
Add assignment operators.
Caution: not tested with the IBM compiler, but there's no particular
reason it shouldn't work.
author | David A. Holland |
---|---|
date | Mon, 30 May 2022 23:46:22 -0400 |
parents | 13d2b8934445 |
children | 60b08b68c750 |
line wrap: on
line source
#include <assert.h> /* treat as opaque */ struct uintarray { unsigned *v; unsigned num, max; }; struct uintarray *uintarray_create(void); void uintarray_init(struct uintarray *a); void uintarray_cleanup(struct uintarray *a); void uintarray_destroy(struct uintarray *a); unsigned uintarray_num(const struct uintarray *a); unsigned uintarray_get(const struct uintarray *a, unsigned ix); void uintarray_set(struct uintarray *a, unsigned ix, unsigned val); void uintarray_add(struct uintarray *a, unsigned val); void uintarray_setsize(struct uintarray *a, unsigned newsize); /* x and y are pointers that were placed in the uintarray */ void uintarray_sort(struct uintarray *a, int (*f)(unsigned x, unsigned y)); extern inline unsigned uintarray_num(const struct uintarray *a) { return a->num; } extern inline unsigned uintarray_get(const struct uintarray *a, unsigned ix) { assert(ix < a->num); return a->v[ix]; } extern inline void uintarray_set(struct uintarray *a, unsigned ix, unsigned val) { assert(ix < a->num); a->v[ix] = val; }