6 Fifo::Fifo(unsigned size = 18) {
\r
7 //std::cout << "Create Fifo." << std::endl;
\r
9 _buffer = new char[_size];
\r
18 //std::cout << "Delete Fifo." << std::endl;
\r
25 //std::cout << "Deleted Fifo." << std::endl;
\r
31 unsigned Fifo::read(void *destination, unsigned len) {
\r
32 char* buffer = (char*)destination;
\r
33 unsigned read = (len <= _use ? len : 0);
\r
34 //std::cout << "Try to read " << len << " bytes from Fifo." << std::endl;
\r
36 if (_tail + read <= _size) {
\r
37 memcpy(buffer, _buffer + _tail, read);
\r
40 memcpy(buffer, _buffer + _tail, _size - _tail);
\r
41 memcpy(buffer + _size - _tail, _buffer, read - _size + _tail);
\r
44 _tail = (_tail + read) % _size;
\r
46 //std::cout << "Read " << read << " bytes from Fifo." << std::endl;
\r
53 unsigned Fifo::write(const void *source, unsigned len) {
\r
54 char* buffer = (char*)source;
\r
55 unsigned write = (len <= unused() ? len : 0);
\r
56 unsigned head = (_tail + _use) % _size;
\r
57 //std::cout << "Try to write " << len << " bytes to Fifo." << std::endl;
\r
59 if (head + write <= _size) {
\r
60 memcpy(_buffer + head, buffer, write);
\r
63 memcpy(_buffer + head, buffer, _size - head);
\r
64 memcpy(_buffer, buffer + _size - head, write - _size + head);
\r
68 //std::cout << "Wrote " << write << " bytes to Fifo." << std::endl;
\r
75 unsigned Fifo::size() const {
\r
82 unsigned Fifo::unused() const {
\r
83 return (_size) - _use;
\r
89 unsigned Fifo::used() const {
\r
94 * Test the implementation
\r
99 Fifo *myFifo = new Fifo();
\r
100 for (int j = 0; j < 3; j++) {
\r
101 for (int i = 0; i < 6; i++) {
\r
102 std::cout << "write " << i << " to Fifo. ";
\r
103 int write = myFifo->write(&i, sizeof(int));
\r
104 printf(" %d ", write);
\r
105 if (write == sizeof(int)) {
\r
106 std::cout << "used: " << std::setw(2) << myFifo->used()
\r
107 << ", unused: " << std::setw(2) << myFifo->unused()
\r
108 << ", size: " << std::setw(2) << myFifo->size()
\r
111 std::cout << std::endl;
\r
114 for (int i = 0; i < 6; i++) {
\r
116 int read = myFifo->read(&value, sizeof(int));
\r
117 printf(" %d ", read);
\r
118 if (read == sizeof(int)) {
\r
119 std::cout << "read " << value << " from Fifo ";
\r
120 std::cout << "used: " << std::setw(2) << myFifo->used()
\r
121 << ", unused: " << std::setw(2) << myFifo->unused()
\r
122 << ", size: " << std::setw(2) << myFifo->size()
\r