typedef const value_type& const_reference;
///
- typedef value_type* iterator; // TODO: make a real iterator
+ typedef value_type* iterator;
///
typedef const value_type* const_iterator;
typedef const pointer const_pointer;
///
- // TODO: reverse iterator
- //typedef typename std::reverse_iterator< iterator > reverse_iterator;
+ typedef std::reverse_iterator< iterator > reverse_iterator;
///
- //typedef typename std::reverse_iterator< const iterator >
- // const_reverse_iterator;
+ typedef std::reverse_iterator< const_iterator > const_reverse_iterator;
// Construct/Copy/Destroy
* Returns a random access reverse_iterator that points to the
* past-the-end value.
*/
- //reverse_iterator rbegin()
- //{ return std::reverse_iterator< iterator >(end()); }
+ reverse_iterator rbegin()
+ { return reverse_iterator(end()); }
/**
* Returns a random access const_reverse_iterator that points to the
* past-the-end value.
*/
- //const_reverse_iterator rbegin() const
- //{ return std::reverse_iterator< const iterator >(end()); }
+ const_reverse_iterator rbegin() const
+ { return const_reverse_iterator(end()); }
/**
* Returns a random access reverse_iterator that points to the first
* element.
*/
- //reverse_iterator rend()
- //{ return std::reverse_iterator< iterator >(begin()); }
+ reverse_iterator rend()
+ { return reverse_iterator(begin()); }
/**
* Returns a random access const_reverse_iterator that points to the
* first element.
*/
- //const_reverse_iterator rend() const
- //{ return std::reverse_iterator< const iterator >(begin()); }
+ const_reverse_iterator rend() const
+ { return const_reverse_iterator(begin()); }
// Capacity
BOOST_TEST_DONT_PRINT_LOG_VALUE( buffer ) // FIXME
BOOST_TEST_DONT_PRINT_LOG_VALUE( buffer::iterator )
BOOST_TEST_DONT_PRINT_LOG_VALUE( buffer::const_iterator )
+BOOST_TEST_DONT_PRINT_LOG_VALUE( buffer::reverse_iterator )
+BOOST_TEST_DONT_PRINT_LOG_VALUE( buffer::const_reverse_iterator )
// avoid compilation warning concerning unused variables
void dummy(buffer::const_iterator i) {}
BOOST_CHECK_EQUAL(*(b.begin() + 1), 77);
}
+BOOST_AUTO_TEST_CASE( reverse_iterators_test )
+{
+ buffer::value_type a[] = { 56, 123, 253 };
+ buffer b(a, a + 3);
+ BOOST_CHECK_NE(b.rbegin(), b.rend());
+ BOOST_CHECK_LT(b.rbegin(), b.rend());
+ buffer::reverse_iterator i = b.rbegin();
+ BOOST_CHECK_EQUAL(*i, 253);
+ i++;
+ BOOST_CHECK_EQUAL(*i, 123);
+ ++i;
+ BOOST_CHECK_EQUAL(*i, 56);
+ i += 1;
+ BOOST_CHECK_EQUAL(i, b.rend());
+ i--;
+ BOOST_CHECK_EQUAL(*i, 56);
+ --i;
+ BOOST_CHECK_EQUAL(*i, 123);
+ i -= 1;
+ BOOST_CHECK_EQUAL(*i, 253);
+ i++;
+ BOOST_CHECK_EQUAL(*(i + 1), 56);
+ BOOST_CHECK_EQUAL(*(i - 1), 253);
+ BOOST_CHECK_EQUAL(i - 1, b.rbegin());
+ BOOST_CHECK_EQUAL(i + 2, b.rend());
+ BOOST_CHECK_EQUAL(i - b.rbegin(), 1);
+ *i = 77;
+ BOOST_CHECK_EQUAL(*i, 77);
+ BOOST_CHECK_EQUAL(*(b.rbegin() + 1), 77);
+}
+
BOOST_AUTO_TEST_CASE( resize_test )
{
buffer b;