From 7706a8fffbef9a7ef99dad2751bc6e633057270f Mon Sep 17 00:00:00 2001 From: Dave Abrahams Date: Fri, 28 Feb 2003 16:45:20 +0000 Subject: [PATCH] cleanups, including endline-layout [SVN r1064] --- include/boost/iterator/iterator_adaptor.hpp | 5 +- include/boost/iterator/iterator_concepts.hpp | 18 +- include/boost/iterator/iterator_facade.hpp | 8 +- include/boost/iterator/iterator_tests.hpp | 253 ------------------ include/boost/iterator/new_iterator_tests.hpp | 5 +- include/boost/iterator/transform_iterator.hpp | 33 ++- 6 files changed, 34 insertions(+), 288 deletions(-) delete mode 100644 include/boost/iterator/iterator_tests.hpp diff --git a/include/boost/iterator/iterator_adaptor.hpp b/include/boost/iterator/iterator_adaptor.hpp index 8a592ab..2d47c71 100644 --- a/include/boost/iterator/iterator_adaptor.hpp +++ b/include/boost/iterator/iterator_adaptor.hpp @@ -71,8 +71,9 @@ namespace boost // ... // // template - // adapted_iterator(OtherIterator const& it, - // typename enable_if_convertible::type* = 0); + // adapted_iterator( + // OtherIterator const& it + // , typename enable_if_convertible::type* = 0); // // ... // }; diff --git a/include/boost/iterator/iterator_concepts.hpp b/include/boost/iterator/iterator_concepts.hpp index d008d58..b39b722 100644 --- a/include/boost/iterator/iterator_concepts.hpp +++ b/include/boost/iterator/iterator_concepts.hpp @@ -196,8 +196,7 @@ namespace boost_concepts { template <> struct Operations { - template + template static void constraints(Iterator1 const& i1, Iterator2 const& i2) { i1 == i2; @@ -211,8 +210,7 @@ namespace boost_concepts { template <> struct Operations { - template + template static void constraints(Iterator1 const& i1, Iterator2 const& i2) { Operations::constraints(i1, i2); @@ -222,8 +220,7 @@ namespace boost_concepts { template <> struct Operations { - template + template static void constraints(Iterator1 const& i1, Iterator2 const& i2) { Operations::constraints(i1, i2); @@ -233,8 +230,7 @@ namespace boost_concepts { template <> struct Operations { - template + template static void constraints(Iterator1 const& i1, Iterator2 const& i2) { Operations::constraints(i1, i2); @@ -244,8 +240,7 @@ namespace boost_concepts { template <> struct Operations { - template + template static void constraints(Iterator1 const& i1, Iterator2 const& i2) { Operations::constraints(i1, i2); @@ -266,8 +261,7 @@ namespace boost_concepts { } // namespace detail - template + template class InteroperableConcept { public: diff --git a/include/boost/iterator/iterator_facade.hpp b/include/boost/iterator/iterator_facade.hpp index 402f7d9..c8bb8e3 100644 --- a/include/boost/iterator/iterator_facade.hpp +++ b/include/boost/iterator/iterator_facade.hpp @@ -99,7 +99,7 @@ namespace boost } template - static bool equal(Facade1 const& f1, Facade2 const& f2, Facade1* = 0, Facade2* = 0) + static bool equal(Facade1 const& f1, Facade2 const& f2) { return f1.equal(f2); } @@ -111,10 +111,8 @@ namespace boost } template - static typename Facade1::difference_type distance_to(Facade1 const& f1, - Facade2 const& f2, - Facade1* = 0, - Facade2* = 0) + static typename Facade1::difference_type distance_to( + Facade1 const& f1, Facade2 const& f2) { return f1.distance_to(f2); } diff --git a/include/boost/iterator/iterator_tests.hpp b/include/boost/iterator/iterator_tests.hpp deleted file mode 100644 index 88e1c05..0000000 --- a/include/boost/iterator/iterator_tests.hpp +++ /dev/null @@ -1,253 +0,0 @@ -#ifndef BOOST_ITERATOR_TESTS_HPP -# define BOOST_ITERATOR_TESTS_HPP - -// This is meant to be the beginnings of a comprehensive, generic -// test suite for STL concepts such as iterators and containers. -// -// Revision History: -// 28 Apr 2002 Fixed input iterator requirements. -// For a == b a++ == b++ is no longer required. -// See 24.1.1/3 for details. -// (Thomas Witt) -// 08 Feb 2001 Fixed bidirectional iterator test so that -// --i is no longer a precondition. -// (Jeremy Siek) -// 04 Feb 2001 Added lvalue test, corrected preconditions -// (David Abrahams) - -# include -# include -# include -# include -# include // for detail::dummy_constructor - -namespace boost { - - // use this for the value type -struct dummyT { - dummyT() { } - dummyT(detail::dummy_constructor) { } - dummyT(int x) : m_x(x) { } - int foo() const { return m_x; } - bool operator==(const dummyT& d) const { return m_x == d.m_x; } - int m_x; -}; - - -// Tests whether type Iterator satisfies the requirements for a -// TrivialIterator. -// Preconditions: i != j, *i == val -template -void trivial_iterator_test(const Iterator i, const Iterator j, T val) -{ - Iterator k; - assert(i == i); - assert(j == j); - assert(i != j); -#ifdef BOOST_NO_STD_ITERATOR_TRAITS - T v = *i; -#else - typename std::iterator_traits::value_type v = *i; -#endif - assert(v == val); -#if 0 - // hmm, this will give a warning for transform_iterator... perhaps - // this should be separated out into a stand-alone test since there - // are several situations where it can't be used, like for - // integer_range::iterator. - assert(v == i->foo()); -#endif - k = i; - assert(k == k); - assert(k == i); - assert(k != j); - assert(*k == val); -} - - -// Preconditions: i != j -template -void mutable_trivial_iterator_test(const Iterator i, const Iterator j, T val) -{ - *i = val; - trivial_iterator_test(i, j, val); -} - - -// Preconditions: *i == v1, *++i == v2 -template -void input_iterator_test(Iterator i, T v1, T v2) -{ - Iterator i1(i); - - assert(i == i1); - assert(!(i != i1)); - - // I can see no generic way to create an input iterator - // that is in the domain of== of i and != i. - // The following works for istream_iterator but is not - // guaranteed to work for arbitrary input iterators. - // - // Iterator i2; - // - // assert(i != i2); - // assert(!(i == i2)); - - assert(*i1 == v1); - assert(*i == v1); - - // we cannot test for equivalence of (void)++i & (void)i++ - // as i is only guaranteed to be single pass. - assert(*i++ == v1); - - i1 = i; - - assert(i == i1); - assert(!(i != i1)); - - assert(*i1 == v2); - assert(*i == v2); - - // i is dereferencable, so it must be incrementable. - ++i; - - // how to test for operator-> ? -} - -// how to test output iterator? - - -template struct lvalue_test -{ - template static void check(Iterator) - { -# ifndef BOOST_NO_STD_ITERATOR_TRAITS - typedef typename std::iterator_traits::reference reference; - typedef typename std::iterator_traits::value_type value_type; -# else - typedef typename Iterator::reference reference; - typedef typename Iterator::value_type value_type; -# endif - BOOST_STATIC_ASSERT(boost::is_reference::value); - BOOST_STATIC_ASSERT((boost::is_same::value - || boost::is_same::value - )); - } -}; - -# ifdef BOOST_NO_STD_ITERATOR_TRAITS -template <> struct lvalue_test { - template static void check(T) {} -}; -#endif - -template -void forward_iterator_test(Iterator i, T v1, T v2) -{ - input_iterator_test(i, v1, v2); - - Iterator i1 = i, i2 = i; - - assert(i == i1++); - assert(i != ++i2); - - trivial_iterator_test(i, i1, v1); - trivial_iterator_test(i, i2, v1); - - ++i; - assert(i == i1); - assert(i == i2); - ++i1; - ++i2; - - trivial_iterator_test(i, i1, v2); - trivial_iterator_test(i, i2, v2); - - // borland doesn't allow non-type template parameters -# if !defined(__BORLANDC__) || (__BORLANDC__ > 0x551) - lvalue_test<(boost::is_pointer::value)>::check(i); -#endif -} - -// Preconditions: *i == v1, *++i == v2 -template -void bidirectional_iterator_test(Iterator i, T v1, T v2) -{ - forward_iterator_test(i, v1, v2); - ++i; - - Iterator i1 = i, i2 = i; - - assert(i == i1--); - assert(i != --i2); - - trivial_iterator_test(i, i1, v2); - trivial_iterator_test(i, i2, v2); - - --i; - assert(i == i1); - assert(i == i2); - ++i1; - ++i2; - - trivial_iterator_test(i, i1, v1); - trivial_iterator_test(i, i2, v1); -} - -// mutable_bidirectional_iterator_test - -// Preconditions: [i,i+N) is a valid range -template -void random_access_iterator_test(Iterator i, int N, TrueVals vals) -{ - bidirectional_iterator_test(i, vals[0], vals[1]); - const Iterator j = i; - int c; - - for (c = 0; c < N-1; ++c) { - assert(i == j + c); - assert(*i == vals[c]); - assert(*i == j[c]); - assert(*i == *(j + c)); - assert(*i == *(c + j)); - ++i; - assert(i > j); - assert(i >= j); - assert(j <= i); - assert(j < i); - } - - Iterator k = j + N - 1; - for (c = 0; c < N-1; ++c) { - assert(i == k - c); - assert(*i == vals[N - 1 - c]); - assert(*i == j[N - 1 - c]); - Iterator q = k - c; - assert(*i == *q); - assert(i > j); - assert(i >= j); - assert(j <= i); - assert(j < i); - --i; - } -} - -// Precondition: i != j -template -void const_nonconst_iterator_test(Iterator i, ConstIterator j) -{ - assert(i != j); - assert(j != i); - - ConstIterator k(i); - assert(k == i); - assert(i == k); - - k = i; - assert(k == i); - assert(i == k); -} - -} // namespace boost - -#endif // BOOST_ITERATOR_TESTS_HPP diff --git a/include/boost/iterator/new_iterator_tests.hpp b/include/boost/iterator/new_iterator_tests.hpp index e0590c1..97c80f7 100644 --- a/include/boost/iterator/new_iterator_tests.hpp +++ b/include/boost/iterator/new_iterator_tests.hpp @@ -305,8 +305,9 @@ template struct lvalue_test typedef typename Iterator::value_type value_type; # endif BOOST_STATIC_ASSERT(boost::is_reference::value); - BOOST_STATIC_ASSERT((boost::is_same::value - || boost::is_same::value + BOOST_STATIC_ASSERT(( + boost::is_same::value + || boost::is_same::value )); } }; diff --git a/include/boost/iterator/transform_iterator.hpp b/include/boost/iterator/transform_iterator.hpp index b5602c3..052cf6a 100644 --- a/include/boost/iterator/transform_iterator.hpp +++ b/include/boost/iterator/transform_iterator.hpp @@ -23,12 +23,16 @@ namespace boost // is the type used as its traits. template struct transform_iterator_traits - : iterator_traits_adaptor::type > > + : iterator_traits_adaptor< + Iterator + , typename AdaptableUnaryFunction::result_type + , typename AdaptableUnaryFunction::result_type + , typename AdaptableUnaryFunction::result_type* + , iterator_tag< + readable_iterator_tag + , typename traversal_category::type + > + > { }; @@ -45,8 +49,8 @@ namespace boost { typedef iterator_adaptor< transform_iterator - , Iterator - , detail::transform_iterator_traits + , Iterator + , detail::transform_iterator_traits > super_t; friend class iterator_core_access; @@ -54,21 +58,22 @@ namespace boost public: transform_iterator() { } - transform_iterator(Iterator const& x, - AdaptableUnaryFunction f) + transform_iterator(Iterator const& x, AdaptableUnaryFunction f) : super_t(x), m_f(f) { } template transform_iterator( - transform_iterator const& t + transform_iterator const& t , typename enable_if_convertible::type* = 0 - ) + ) : super_t(t.base()), m_f(t.functor()) {} - AdaptableUnaryFunction functor() const { return m_f; } + AdaptableUnaryFunction functor() const + { return m_f; } private: - typename super_t::value_type dereference() const { return m_f(super_t::dereference()); } + typename super_t::value_type dereference() const + { return m_f(super_t::dereference()); } // Probably should be the initial base class so it can be // optimized away via EBO if it is an empty class.