Hi Howard,

Constant time push/pop can not be combined with std::vector
automatic re-allocation due to the linear cost of copying
into the realloc'd buffer.

Clearly there is a need for what you are describing. And clearly there is a need for what I am describing. And clearly there are a few more closely related needs.

The "generally accepted" concept of a circular buffer is a fixed size contiguous memory buffer. Following the principle of "least surprise" a circular_buffer should not decide to resize itself. To overwrite items at the opposite end seems to bother some, (it is a feature, or a bug?) it certainly seems to be the "generlly accepted" concept of what a circular buffer does. (Unless the insertion fails, or the thread is blocked until space becomes available)

        Another reason against reallocation is the
        possibility that two threads could utilise a
        circular_buffer from each end in a
        "producer/consumer model", without the need
        for explicit locking.  Having one thread decide
        to move everything elsewhere in memory would
        appear to exclude this style of use.

        Another reason against reallocation is that
        except for resize() and reserve() circular buffer
        manipulation is _guaranteed_ to succeed, no
        memory allocations occur which could possibly
        fail.

My opinion is that it is much easier to adapt a reallocating circular buffer to a non-reallocating one than vice-versa.

I don't agree, apart from the reasoning above. What is the problem with intercepting push and insert and reserving larger amounts of memory as necessary?

> I would rather get the detailed,
complicated work encapsulated in the container, and then have relatively simple adaptors a-la std::stack and std::queue.

We should aim to capture the "true" concept of a circular buffer, perhaps.

        (It will be interesting to see where all this leads
         to, in the end...)

Cheers,

Nigel Stewart



_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to