12 : _buffer_size(size), _buffer(
new T[_buffer_size]),
13 _need_wrap(_buffer + _buffer_size), _get_ptr(_buffer), _put_ptr(_buffer)
15 assert( _buffer !=
nullptr);
22 bool get(T & data)
volatile {
23 if (_get_ptr == _put_ptr) {
26 T * nextget = _get_ptr + 1;
27 if (nextget == _need_wrap) {
35 bool put(
const T & data)
volatile {
36 T * nextput = _put_ptr + 1;
37 if (nextput == _need_wrap){
40 if (nextput == _get_ptr) {
49 size_t available_get()
volatile {
50 int res = _put_ptr - _get_ptr;
57 size_t available_put()
volatile {
58 return _buffer_size - available_get() - 1;