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;
}
예제 #2
0
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;
}
예제 #3
0
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;
}
예제 #4
0
////--- 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;
}