Exemplo n.º 1
0
int
rb_init(rb_ringbuffer ** buffer_ptr, uint64_t ring_size, uint64_t buffer_size) {
	uint64_t i, j;

	/* Normalize the ring size into a 2s complement */
	ring_size = round_up_pow_2_uint64_t(ring_size);
	/* Allocate the buffer struct and room for the buffer */
	*buffer_ptr = malloc
		(sizeof(rb_ringbuffer) + 
		(sizeof(char) * (ring_size * buffer_size)));

	if(!*buffer_ptr) {
		return RB_ALLOC;
	}
	/* Populate the struct */
	(*buffer_ptr)->ring_size = ring_size;
	(*buffer_ptr)->ring_mask = ring_size - 1;
	(*buffer_ptr)->buffer_size = buffer_size;
	(*buffer_ptr)->write_head = 0;
	(*buffer_ptr)->read_head = 0;
	(*buffer_ptr)->read_tail = 0;
	(*buffer_ptr)->entries = (char*)*buffer_ptr+sizeof(rb_ringbuffer);

	for(i = 0; i < (*buffer_ptr)->ring_size; i++) {
		for(j = 0; j < (*buffer_ptr)->buffer_size; j++) {
			(*buffer_ptr)->entries[(i*(*buffer_ptr)->buffer_size) + j] = i;
		}
	}

	return RB_SUCCESS;
}
Exemplo n.º 2
0
int
rb_init(rb_ringbuffer ** buffer_ptr, uint64_t ring_size, uint64_t buffer_size) {
	/* Normalize the ring size into a 2s complement */
	ring_size = round_up_pow_2_uint64_t(ring_size);
	/* Allocate the buffer struct and room for the buffer */
	//*buffer_ptr = malloc(sizeof(rb_ringbuffer));
	*buffer_ptr = malloc
		(sizeof(rb_ringbuffer) + 
		//(sizeof(char*) * ring_size) + 
		(sizeof(char) * (ring_size * buffer_size)));

	if(!*buffer_ptr) {
		return RB_ALLOC;
	}
	/* Populate the struct */
	(*buffer_ptr)->ring_size = ring_size;
	(*buffer_ptr)->ring_mask = ring_size - 1;
	(*buffer_ptr)->buffer_size = buffer_size;
	(*buffer_ptr)->write_head = 0;
	(*buffer_ptr)->read_head = 0;
	(*buffer_ptr)->read_tail = 0;
	(*buffer_ptr)->entries = (char*)*buffer_ptr+sizeof(rb_ringbuffer);

	uint64_t i, j;
	for(i = 0; i < (*buffer_ptr)->ring_size; i++) {
		for(j = 0; j < (*buffer_ptr)->buffer_size; j++) {
			(*buffer_ptr)->entries[(i*(*buffer_ptr)->buffer_size) + j] = i;
		}
	}

	/*
	printf("&Size:   \t%p\n", (void *)&(*buffer_ptr)->ring_size);
	printf("&Mask:   \t%p\n", (void *)&(*buffer_ptr)->ring_mask);
	printf("&Buffer: \t%p\n", (void *)&(*buffer_ptr)->buffer_size);
	printf("&Write H:\t%p\n", (void *)&(*buffer_ptr)->write_head);
	printf("&Read  H:\t%p\n", (void *)&(*buffer_ptr)->read_head);
	printf("&Read  T:\t%p\n", (void *)&(*buffer_ptr)->read_tail);
	printf("&Entries:\t%p\n", (void *)&(*buffer_ptr)->entries);

	printf("Size:   \t%p\n", (void *)(*buffer_ptr)->ring_size);
	printf("Mask:   \t%p\n", (void *)(*buffer_ptr)->ring_mask);
	printf("Buffer: \t%p\n", (void *)(*buffer_ptr)->buffer_size);
	printf("Write H:\t%p\n", (void *)(*buffer_ptr)->write_head);
	printf("Read  H:\t%p\n", (void *)(*buffer_ptr)->read_head);
	printf("Read  T:\t%p\n", (void *)(*buffer_ptr)->read_tail);
	printf("Entries:\t%p\n", (void *)(*buffer_ptr)->entries);
	*/

	return RB_SUCCESS;
}