42 if( !(rbuf->
buffer = (uint8_t *) malloc(
sizeof(uint8_t)*size)) ){
43 LOG(VB_GENERAL, LOG_ERR,
44 "Not enough memory for ringbuffer");
48 LOG(VB_GENERAL, LOG_ERR,
"Wrong size for ringbuffer");
58 if (size > (
int)(rbuf->
size)) {
59 auto *tmpalloc = (uint8_t *) realloc(rbuf->
buffer,
60 sizeof(uint8_t)*size);
66 unsigned int delta = size - rbuf->
size;
92 if (count <=0 )
return 0;
94 int rest = rbuf->
size - pos;
99 LOG(VB_GENERAL, LOG_ERR,
100 QString(
"ringbuffer overflow %1<%2 %3")
101 .arg(free).arg(count).arg(rbuf->
size));
107 memcpy (rbuf->
buffer+pos, data, rest);
109 memcpy (rbuf->
buffer, data+rest, count - rest);
112 memcpy (rbuf->
buffer+pos, data, count);
117 LOG(VB_GENERAL, LOG_ERR, QString(
"Buffer empty %1%%")
127 unsigned int rest = rbuf->
size - pos ;
130 if ( avail < count ){
133 LOG(VB_GENERAL, LOG_ERR,
134 QString(
"ringbuffer peek underflow %1<%2 %3 %4")
135 .arg(avail).arg(count).arg(pos).arg(rbuf->
write_pos));
141 memcpy(data, rbuf->
buffer+pos, count);
143 memcpy(data, rbuf->
buffer+pos, rest);
145 memcpy(data+rest, rbuf->
buffer, count - rest);
153 return ring_peek(rbuf, data.data(), count, off);
166 unsigned int rest = rbuf->
size - pos ;
169 if ( avail < count ){
172 LOG(VB_GENERAL, LOG_ERR,
173 QString(
"ringbuffer peek underflow %1<%2 %3 %4")
174 .arg(avail).arg(count).arg(pos).arg(rbuf->
write_pos));
180 memcpy(rbuf->
buffer+pos, data, count);
182 memcpy(rbuf->
buffer+pos, data, rest);
184 memcpy(rbuf->
buffer, data+rest, count - rest);
192 return ring_poke(rbuf, data.data(), count, off);
202 if (count <=0 )
return 0;
204 int rest = rbuf->
size - pos;
207 if ( avail < count ){
210 LOG(VB_GENERAL, LOG_ERR,
211 QString(
"ringbuffer underflow %1<%2 %3 \n")
212 .arg(avail).arg(count).arg(rbuf->
size));
218 memcpy(data, rbuf->
buffer+pos, count);
221 memcpy(data, rbuf->
buffer+pos, rest);
223 memcpy(data+rest, rbuf->
buffer, count - rest);
228 LOG(VB_GENERAL, LOG_ERR, QString(
"Buffer empty %1%%")
235 if (count <=0 )
return -1;
237 int rest = rbuf->
size - pos;
240 if ( avail < count ){
242 LOG(VB_GENERAL, LOG_ERR,
243 QString(
"ringbuffer skip underflow %1<%2 %3 %4\n")
244 .arg(avail).arg(count).arg(pos).arg(rbuf->
write_pos));
255 LOG(VB_GENERAL, LOG_ERR, QString(
"Buffer empty %1%%")
266 if (count <=0 )
return 0;
268 int rest = rbuf->
size - pos;
273 LOG(VB_GENERAL, LOG_ERR,
274 QString(
"ringbuffer overflow %1<%2 %3 %4\n")
275 .arg(free).arg(count).arg(pos).arg(rbuf->
read_pos));
282 if (rr == rest && count - rest)
293 LOG(VB_GENERAL, LOG_ERR, QString(
"Buffer empty %.2f%%")
304 if (count <=0 )
return -1;
306 int rest = rbuf->
size - pos;
309 if ( avail < count ){
312 LOG(VB_GENERAL, LOG_ERR,
313 QString(
"ringbuffer underflow %1<%2 %3 %4")
314 .arg(avail).arg(count).arg(pos).arg(rbuf->
write_pos));
321 if (rr == rest && count - rest)
333 LOG(VB_GENERAL, LOG_ERR, QString(
"Buffer empty %1%%")
339 static void show(uint8_t *buf,
int length)
343 for (
int i=0; i<length; i+=16){
345 for (j=0; j < 8 && j+i<length; j++)
346 buffer += QString(
"0x%1 ").arg(buf[i+j],16,2,QChar(
'0'));
347 for (
int r=j; r<8; r++)
352 for (j=8; j < 16 && j+i<length; j++)
353 buffer += QString(
"0x%1 ").arg(buf[i+j],16,2,QChar(
'0'));
354 for (
int r=j; r<16; r++)
357 for (j=0; j < 16 && j+i<length; j++){
361 buffer += QString(QChar(buf[i+j]));
367 LOG(VB_GENERAL, LOG_INFO, buffer);
376 unsigned int rest = rbuf->
size - pos ;
379 if ( avail < count ){
382 LOG(VB_GENERAL, LOG_ERR,
383 QString(
"ringbuffer peek underflow %1<%2 %3 %4\n")
384 .arg(avail).arg(count).arg(pos).arg(rbuf->
write_pos));
428 LOG(VB_GENERAL, LOG_INFO, QString(
"add %1 ").arg(
dummy_space(dbuf)));
436 LOG(VB_GENERAL, LOG_INFO,
437 QString(
" - %1 = %2").arg(size).arg(
dummy_space(dbuf)));
451 sizeof(uint64_t), 0)<0){
455 if (
ptscmp(rtime,time) < 0){
464 LOG(VB_GENERAL, LOG_INFO, QString(
"delete %1 ").arg(
dummy_space(dbuf)));
468 LOG(VB_GENERAL, LOG_INFO,
469 QString(
" + %1 = %2").arg(dsize).arg(
dummy_space(dbuf)));
481 for (
int i = 0; i < avail; i++) {
483 sizeof(uint64_t), i *
sizeof(uint64_t));
485 sizeof(uint32_t), i *
sizeof(uint32_t));
487 LOG(VB_GENERAL, LOG_INFO, QString(
"%1 : %2 %3").arg(i)
488 .arg(rtime).arg(size));
490 LOG(VB_GENERAL, LOG_INFO, QString(
"Used: %d Free: %d data-free: %d")
491 .arg(avail).arg(1000-avail).arg(dbuf->
size - dbuf->
fill));