#include void cib_init(cib_t *cib, unsigned int size) { cib->read_count = 0; cib->write_count = 0; cib->complement = 0-size; } int cib_avail (cib_t *cib) { return (int) (cib->write_count - cib->read_count); } int cib_get(cib_t *cib) { int avail = cib_avail (cib); if (avail > 0) { return (int) (cib->read_count++ & ~cib->complement); } return -1; } int cib_put(cib_t *cib) { int avail = cib_avail (cib); if ((int)(avail + cib->complement) < 0 ) { return (int) (cib->write_count++ & ~(cib->complement)); } return -1; } /* int main() { cib_t cib; cib_init(&cib, 0); int res = cib_get(&cib); printf("%i\n", res); } */