/* #include /* size_t */ #if !defined FatPtr_size_t # define FatPtr_size_t size_t #endif #if !defined FatPtr_scalar_t # define FatPtr_scalar_t int #endif #define FatPtr_vector_t FatPtr_scalar_t * struct FatPtr{ FatPtr_size_t a; /* allocation in sizeof char */ FatPtr_size_t s; /* actual size in sizeof *v */ FatPtr_vector_t v; /* vector */ }; /* FatPtr_append * - FatPtr *p: object to which to append * - FatPtr_scalar_t c: scalar to be appended * Returns NULL if the operation failed (due to malloc(3)) or if p was NULL. * Otherwise returns p. * Appends c to p. */ struct FatPtr *FatPtr_append(struct FatPtr *p, FatPtr_scalar_t c); /* FatPtr_construct * - FatPtr *p: object to be constructed * Returns p. * Initializes p and grows its maximum length to a reasonable amount of units. */ struct FatPtr *FatPtr_construct(struct FatPtr *p); /* FatPtr_destruct * - FatPtr *p: object to destruct * Returns NULL. * Destroys p without leaking memory. */ struct FatPtr *FatPtr_destruct(struct FatPtr *p); /* FatPtr_grow * - FatPtr *p: object to grow * - size_t units: units (in sizeof char) by which to grow p * Returns p. * Grows p's maximum length by units (in sizeof char). */ struct FatPtr *FatPtr_grow(struct FatPtr *p, size_t units); /* FatPtr_initialize * - FatPtr *p: object to initialize * Returns p. * Initializes p to zero values. */ struct FatPtr *FatPtr_initialize(struct FatPtr *p); /* FatPtr_shiftleft * - FatPtr *p: object to shift * - size_t units: units (in sizeof *v) by which to shift p * Returns p. * Shifts members of p left by units, leaving the last units members intact. */ struct FatPtr *FatPtr_shiftleft(struct FatPtr *p, size_t units); /* FatPtr_shiftright * - FatPtr *p: object to shift * - size_t units: units (in sizeof *v) by which to shift p * Returns p. * Shifts members of p right by units, leaving the first units members intact. */ struct FatPtr *FatPtr_shiftright(struct FatPtr *p, size_t units); /* FatPtr_trimend * - FatPtr *p: object to trim * - size_t units: units (in sizeof *v) by which to shift p * Returns p. * Removes the last units members of p from p. */ struct FatPtr *FatPtr_trimend(struct FatPtr *p, size_t units); /* FatPtr_trimfront * - FatPtr *p: object to trim * - size_t units: units (in sizeof *v) by which to shift p * Returns p. * Removes the first units members of p from p. */ struct FatPtr *FatPtr_trimfront(struct FatPtr *p, size_t units);