bool RingBuffer_readbyte(RingBuffer *buffer, char* target){ if(RingBuffer_available_data(buffer) == 0) return false; *target = buffer->buffer[buffer->start]; RingBuffer_commit_read(buffer, 1); if(buffer->end == buffer->start) { buffer->start = buffer->end = 0; } return true; }
bstring RingBuffer_gets(RingBuffer *buffer, int amount) { check(amount > 0, "need more than 0 for gets, you gave: %d", amount); check_debug(amount <= RingBuffer_available_data(buffer), "not enough in the buffer"); bstring result = blk2bstr(RingBuffer_starts_at(buffer), amount); check(result != NULL, "failed to create result"); check(blength(result) == amount, "wrong result length"); RingBuffer_commit_read(buffer, amount); assert(RingBuffer_available_data(buffer) >= 0 && "error in read_commit"); return result; error: return NULL; }
int RingBuffer_read(RingBuffer *buffer, char *target, int amount) { check_debug(amount <- RingBuffer_available_data(buffer), "not enough in the buffer: has %d, needs %d", RingBuffer_available_data(buffer), amount); void *result = memcpy(target, RingBuffer_starts_at(buffer), amount); check(result != NULL, "failed to write buffer into data"); RingBuffer_commit_read(buffer, amount); if (buffer->end == buffer->start) { buffer->start = buffer->end = 0; } return amount; error: return -1; }
////--- Read buffer int RingBuffer_read(RingBuffer *buffer, float *target, int amount){ if (amount > RingBuffer_available_data(buffer)) { printf("Not enough in the buffer: has %d, needs %d", RingBuffer_available_data(buffer), amount); return -1; } void *result = memcpy(target, RingBuffer_starts_at(buffer), amount*sizeof(float)); if (result==NULL) { printf("Failed to write buffer into data."); } RingBuffer_commit_read(buffer, amount); if(buffer->end == buffer->start) { buffer->start = buffer->end = 0; //printf("start=end=0 from read\n"); } return amount; }
int RingBuffer_read(RingBuffer *buffer, char *target, int amount) { if(amount > RingBuffer_available_data(buffer)) return -1; unsigned int i; int temp = buffer->start; for(i = 0; i < amount; i++){ target[i] = buffer->buffer[temp]; temp++; temp %= buffer->length; } RingBuffer_commit_read(buffer, amount); if(buffer->end == buffer->start) { buffer->start = buffer->end = 0; } return amount; }