mlimber wrote:
marco.fur...@syac.com wrote:
>>Hi there,
I have to write an optimized circular buffer to log events in C++. The
elements are of type std::string. This should run under Linux on an ARM
embedded system. I can dedicate to this circular log a preallocated
block of fixed size and work in there.
Can anybody indicate me an example or technique to do this ?
Check out the circular buffer that will soon be part of Boost. The docs
can be found (in a slightly dated form) here:
http://myweb.tiscali.co.uk/gaspar/circular_buffer.html
and the code can be found in the Boost sandbox:
http://boost-sandbox.cvs.sourceforge...sandbox/boost/
Look at circular_buffer.hpp and the circular_buffer subdir.
I don't know if it's too clear here, but a circular buffer is actually
two logical queues. So a pop from a circular buffer is a pop from the
full queue and a simultaneous push into the empty queue. In multi-threading
that means you have to push and pop by value. In particular, if you pop
by reference, the value you are referencing can be modified by another
thread so you want to avoid that. The OP wants to use strings and wants
to avoid buffer allocation and deallocation so I imagine that means
deep copying of strings. The internal refcounted string implementations
that don't deep copy would probably involve too much allocation/deallocation
overhead.
The example here probably wouldn't work for the OP's purpose if they're
multi-threading.
http://myweb.tiscali.co.uk/gaspar/ci...#boundedbuffer
--
Joe Seigh
When you get lemons, you make lemonade.
When you get hardware, you make software.