[Development] New circular buffer container for Qt5
Sean Harmer
sh at theharmers.co.uk
Fri Oct 28 15:11:08 CEST 2011
Hi,
I would like to introduce a new generic container class to Qt,
QCircularBuffer. This email is to see if there are any objections to doing so.
This class is similar to QVector but it provides circular semantics. For
example, appending to an already full circular buffer will overwrite the
oldest item i.e. it forms a kind of LRU cache. The API is essentially a
Qt'ified version of the boost::circular_buffer [1] API so hopefully people
will find it simple to use.
This type of container is very useful for logging or data
acquisition/visualisation applications as it provides a static memory profile
and fast performance for adding new data to the container.
Appending and prepending are always O(1) operations which fills in a gap in
the performance characteristics offered by the existing Qt containers.
It tries to be smart when modifying the contents of the container by depending
upon the type of item being stored. Copying is also kept to a minimum to
improve performance (see the insert() and remove()) functions.
It is a template class so no extra code is generated in the Qt shared
libraries.
It is fairly trivial to use this class as the underlying container of a
bounded buffer that can be used with the producer-consumer pattern. I am
willing to also contribute code for this to the Qt project if people think it
would be useful.
I have already used this container in several applications and it comes with
comprehensive documentation and an auto test.
Kind regards,
Sean
[1] -
http://www.boost.org/doc/libs/1_47_0/libs/circular_buffer/doc/circular_buffer.html
More information about the Development
mailing list