int taskloop_add(task_callback task) { void *object = task; if (ringbuffer_full(&taskqueue.tasks)) return 0; ringbuffer_push(&taskqueue.tasks, &object); return 1; }
int main() { struct RingBuffer *h = NULL; int x = 10, y = INT_MAX, z = 2863311530, m = -3333; int offset_remove = 2; int offset_insert = 3; int offset_data = 4; assert(ringbuffer_init(&h, 3, sizeof(x)) == 0); assert(ringbuffer_push(h, (unsigned char *)&x) == RBE_SUCCESS); assert(ringbuffer_push(h, (unsigned char *)&y) == RBE_SUCCESS); assert(ringbuffer_full(h) != 0); assert(ringbuffer_pop(h) == RBE_SUCCESS); assert(ringbuffer_push(h, (unsigned char *)&z) == RBE_SUCCESS); assert(ringbuffer_full(h) != 0); assert(ringbuffer_resize(&h, 5) == RBE_SUCCESS); assert(ringbuffer_full(h) == 0); assert(ringbuffer_empty(h) == 0); assert(ringbuffer_push(h, (unsigned char *)&m) == RBE_SUCCESS); assert(ringbuffer_push(h, (unsigned char *)&x) == RBE_SUCCESS); assert(ringbuffer_full(h) != 0); { /* checking the data: x y z m x */ unsigned *off = (unsigned *) h; int *values = (int *) off + offset_data; assert(*(off + offset_remove) == 1 * sizeof(x)); assert(*(off + offset_insert) == 0); assert(values[0] == x); assert(values[1] == y); assert(values[2] == z); assert(values[3] == m); assert(values[4] == x); } ringbuffer_destroy(&h); return 0; }
uint32_t ringbuffer_write_lock_size(kringbuffer_t* rb) { verify(rb); if (ringbuffer_full(rb)) { return 0; } rb->lock_type = 2; rb->lock_size = 0; if (rb->write_pos >= rb->read_pos) { rb->lock_size = rb->max_size - rb->write_pos; } else { rb->lock_size = rb->read_pos - rb->write_pos; } return rb->lock_size; }