123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- struct n { \
- c *list; \
- u_int num; \
- size_t space; \
- }
- if (UINT_MAX - (n) < (a)->num) \
- fatalx("number too big"); \
- if (SIZE_MAX / ((a)->num + (n)) < ARRAY_ITEMSIZE(a)) \
- fatalx("size too big"); \
- if ((a)->space == 0) { \
- (a)->space = ARRAY_INITIALSPACE(a); \
- (a)->list = xrealloc((a)->list, (a)->space); \
- } \
- while ((a)->space <= ((a)->num + (n)) * ARRAY_ITEMSIZE(a)) { \
- (a)->list = xreallocarray((a)->list, 2, (a)->space); \
- (a)->space *= 2; \
- } \
- } while (0)
- (a)->num = 0; \
- (a)->list = NULL; \
- (a)->space = 0; \
- } while (0)
- (a)->num = 0; \
- } while (0)
- (a)->list[i] = s; \
- } while (0)
- ARRAY_ENSURE(a, 1); \
- (a)->list[(a)->num] = s; \
- (a)->num++; \
- } while (0)
- ARRAY_ENSURE(a, 1); \
- if ((i) < (a)->num) { \
- memmove((a)->list + (i) + 1, (a)->list + (i), \
- ARRAY_ITEMSIZE(a) * ((a)->num - (i))); \
- } \
- (a)->list[i] = s; \
- (a)->num++; \
- } while (0)
- if ((i) < (a)->num - 1) { \
- memmove((a)->list + (i), (a)->list + (i) + 1, \
- ARRAY_ITEMSIZE(a) * ((a)->num - (i) - 1)); \
- } \
- (a)->num--; \
- if ((a)->num == 0) \
- ARRAY_FREE(a); \
- } while (0)
- #define ARRAY_EXPAND(a, n) do { \
- ARRAY_ENSURE(a, n); \
- (a)->num += n; \
- } while (0)
- if ((a)->num > n) \
- (a)->num -= n; \
- else \
- ARRAY_FREE(a); \
- } while (0)
- ARRAY_ENSURE(a, (b)->num); \
- memcpy((a)->list + (a)->num, (b)->list, (b)->num * ARRAY_ITEMSIZE(a)); \
- (a)->num += (b)->num; \
- } while (0)
- free((a)->list); \
- ARRAY_INIT(a); \
- } while (0)
- #define ARRAY_FREEALL(a) do { \
- ARRAY_FREE(a); \
- free(a); \
- } while (0)
- #endif
|