Connecting Tech Pros Worldwide Help | Site Map

circular buffer in C++

  #1  
Old October 20th, 2006, 01:35 PM
marco.furlan@syac.com
Guest
 
Posts: n/a
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

  #2  
Old October 20th, 2006, 01:35 PM
mlimber
Guest
 
Posts: n/a

re: circular buffer in C++


marco.fur...@syac.com wrote:
Quote:
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

  #3  
Old October 22nd, 2006, 12:55 PM
Joe Seigh
Guest
 
Posts: n/a

re: circular buffer in C++


mlimber wrote:
Quote:
marco.fur...@syac.com wrote:
>
Quote:
>>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.
Closed Thread


Similar Threads
Thread Thread Starter Forum Replies Last Post
Writing interrupt driven circular buffer Sven answers 12 November 5th, 2007 09:15 AM
can we impliment the circular buffer by array in C sharanap answers 2 September 20th, 2007 04:40 PM
Which container to use for circular buffer? toton answers 7 August 8th, 2006 05:45 AM
Circular Buffer Question William Stacey answers 2 November 15th, 2005 12:11 PM