You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
sems/core/sip/fifo_buffer.h

61 lines
1.2 KiB

#ifndef _fifo_buffer_h_
#define _fifo_buffer_h_
#include "sys/uio.h"
#include "AmThread.h"
class fifo_buffer
{
unsigned char* data;
unsigned char* data_end;
// write at _p_head
unsigned char* p_head;
// read from p_tail
unsigned char* p_tail;
unsigned int size;
unsigned int free_space;
public:
fifo_buffer(unsigned int size);
~fifo_buffer();
// returns space occupied in buffer
unsigned int get_buffered_bytes() {
return size - free_space;
}
// returns space left in buffer
unsigned int get_free_space() {
return free_space;
}
// write at the head of the buffer
int write(const void* buf, unsigned int len);
int writev(const struct iovec *iov, int iovcnt);
// returns size of linearly readable data
unsigned int get_read_bs() {
return (p_tail <= p_head) ?
(unsigned int)(p_head - p_tail) :
(unsigned int)(data_end - p_tail);
}
// returns the buffer's tail
void* get_read_ptr() {
return p_tail;
}
// moves the tail's pointer by the length passed
void skip(unsigned int len) {
p_tail += len;
if(p_tail >= data_end)
p_tail = p_tail - data_end + data;
free_space += len;
}
};
#endif