|
Boost Users : |
Subject: [Boost-users] [Boost.CircularBuffer] begin()/end() arithmetic not working out quite right
From: David Baird (dhbaird_at_[hidden])
Date: 2009-06-10 19:01:54
Hi,
Firstly, thanks for the work on a circular buffer. This is very
useful since many of my applications require it. I am having a
problem though...
I am using Boost 1.38.0. When I call push_back(), the iterator math
makes it appear that begin() moves backwards and end() remains
constant. (Based on other STL libraries, I expect that begin() will
remain constant and end() will keep advancing as I call push_back()).
In other words, this assertion fails (but I expect it to succeed):
circular_buffer<int> buf(8);
circular_buffer<int>::iterator a;
circular_buffer<int>::iterator b;
a = buf.begin();
buf.push_back(1);
b = buf.begin();
assert(a == b); // Fails!!
Also, this code fails too (but I expect it to succeed):
circular_buffer<int> buf(8);
circular_buffer<int>::iterator a;
circular_buffer<int>::iterator b;
a = buf.end();
buf.push_back(1);
b = buf.end();
assert(a != b); // Also fails!
Below is a full example that you can compile and try out:
#include <boost/circular_buffer.hpp>
#include <stdio.h>
int
main ()
{
typedef boost::circular_buffer<int> buf_type;
// Instead of "end" moving ahead, "begin" is moving backwards when //
// using "push_back".
{
buf_type buf1(1024);
buf_type::iterator a;
buf_type::iterator b;
a = buf1.end();
buf1.push_back(1);
buf1.push_back(2);
b = buf1.end();
printf ("%d\n", a == b);
// >>>
// got: 1
// expected: 0
printf ("%d, %d\n", a-buf1.begin(), b-buf1.begin());
// >>>
// got: 2, 2
// expected: 0, 2
}
{
buf_type buf2(1024);
buf_type::iterator c;
buf_type::iterator d;
c = buf2.begin();
buf2.push_back(1);
buf2.push_back(2);
d = buf2.begin();
printf ("%d\n", c == d);
// >>>
// got: 0
// expected: 1
// (i.e. "begin()" is not still pointing to first item!!
// This is incorrect, isn't it?)
printf ("%d, %d\n", buf2.end()-c, buf2.end()-d);
// >>>
// got: 0, 2
// expected: 2, 2
}
return 0;
}
Thanks,
David
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net