7 #include "wvmagiccircle.h"
12 : shm(_size + 1 + 2*sizeof(int)),
13 head(((int*)shm.buf)[0]), tail(((int*)shm.buf)[1])
15 assert((
int)_size > 0);
19 circle = shm.cbuf + 2*
sizeof(int);
26 WvMagicCircle::~WvMagicCircle()
32 size_t WvMagicCircle::used()
44 size_t WvMagicCircle::put(
const void *data,
size_t len)
57 WvLog log(
"put", WvLog::Info);
58 log(
"put: head %s, tail %s, size %s, len %s, chunk1 %s\n",
59 head, tail, size, len, chunk1);
62 memcpy(circle + tail, data, chunk1);
64 memcpy(circle, (
char *)data + chunk1, len - chunk1);
66 tail = (tail + len) % size;
72 size_t WvMagicCircle::get(
void *data,
size_t len)
84 memcpy(data, circle + head, chunk1);
86 memcpy((
char *)data + chunk1, circle, len - chunk1);
88 head = (head + len) % size;
94 size_t WvMagicCircle::skip(
size_t len)
101 head = (head + len) % size;