468,512 Members | 1,428 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 468,512 developers. It's quick & easy.

circular buffer in C++

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

Oct 20 '06 #1
2 7307
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.

Cheers! --M

Oct 20 '06 #2
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.
Oct 22 '06 #3

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

2 posts views Thread by Bob Jenkins | last post: by
2 posts views Thread by William Stacey | last post: by
11 posts views Thread by Kenneth Lantrip | last post: by
10 posts views Thread by avsrk | last post: by
7 posts views Thread by toton | last post: by
12 posts views Thread by Sven | last post: by
reply views Thread by NPC403 | last post: by
1 post views Thread by fmendoza | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.