1 #include "scd_rem_fifo_in.h"
5 #include "scd_logging.h"
8 scd_rem_fifo_in::scd_rem_fifo_in(sc_module_name name, int size):
9 sc_prim_channel(name), _num_elements(0), _first(0), _size(size)
12 _data = new char[size];
16 scd_rem_fifo_in::~scd_rem_fifo_in()
22 void scd_rem_fifo_in::read(char &c)
24 while (_num_elements == 0)
29 _first = (_first + 1) % _size;
33 int scd_rem_fifo_in::rtest(int size)
35 return (size <= _num_elements) ? 1 : 0;
39 void scd_rem_fifo_in::reset() { _num_elements = _first = 0; }
42 int scd_rem_fifo_in::num_available() { return _num_elements ;}
45 size_t scd_rem_fifo_in::free() const { return _size - _num_elements; }
48 void scd_rem_fifo_in::receive(const void* buf, size_t len)
53 assert(_num_elements + len <= _size);
55 for (int i=0; i<len; i++)
57 _data[(_first + _num_elements) % _size] = *((char*)buf+i);
61 _write_event.notify();