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;
virtual int geterr() const
If isok() is false, return the system error number corresponding to the error, -1 for a special error...
virtual void seterr(int _errnum)
Set the errnum variable – we have an error.
WvMagicCircle(size_t size)
Creates a shared memory circular queue.
A WvLog stream accepts log messages from applications and forwards them to all registered WvLogRcv's...