circular buffer in C++

M

marco.furlan

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 ?

Thanks

Marco
 
M

mlimber

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.net/boost-sandbox/boost-sandbox/boost/

Look at circular_buffer.hpp and the circular_buffer subdir.

Cheers! --M
 
J

Joe Seigh

mlimber said:
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.net/boost-sandbox/boost-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/circular_buffer.html#boundedbuffer
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,754
Messages
2,569,528
Members
45,000
Latest member
MurrayKeync

Latest Threads

Top