Strip off "Concept" suffix.

[SVN r33899]
This commit is contained in:
Dave Abrahams
2006-05-01 21:42:56 +00:00
parent 9f20320f59
commit eaf9bf62d1

View File

@ -34,6 +34,8 @@
#include <algorithm> #include <algorithm>
#include <boost/concept/detail/concept_def.hpp>
namespace boost_concepts namespace boost_concepts
{ {
// Used a different namespace here (instead of "boost") so that the // Used a different namespace here (instead of "boost") so that the
@ -43,16 +45,15 @@ namespace boost_concepts
//=========================================================================== //===========================================================================
// Iterator Access Concepts // Iterator Access Concepts
template <typename Iterator> BOOST_concept(ReadableIterator,(Iterator))
struct ReadableIteratorConcept : boost::Assignable<Iterator>
: boost::AssignableConcept<Iterator> , boost::CopyConstructible<Iterator>
, boost::CopyConstructibleConcept<Iterator>
{ {
typedef BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits<Iterator>::value_type value_type; typedef BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits<Iterator>::value_type value_type;
typedef BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits<Iterator>::reference reference; typedef BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits<Iterator>::reference reference;
~ReadableIteratorConcept() ~ReadableIterator()
{ {
value_type v = *i; value_type v = *i;
@ -66,10 +67,10 @@ namespace boost_concepts
typename Iterator typename Iterator
, typename ValueType = BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits<Iterator>::value_type , typename ValueType = BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits<Iterator>::value_type
> >
struct WritableIteratorConcept WritableIterator
: boost::CopyConstructibleConcept<Iterator> : boost::CopyConstructible<Iterator>
{ {
~WritableIteratorConcept() ~WritableIterator()
{ {
*i = v; *i = v;
} }
@ -78,10 +79,15 @@ namespace boost_concepts
Iterator i; Iterator i;
}; };
template <typename Iterator> template <
struct SwappableIteratorConcept typename Iterator
, typename ValueType = BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits<Iterator>::value_type
>
struct WritableIteratorConcept : WritableIterator<Iterator,ValueType> {};
BOOST_concept(SwappableIterator,(Iterator))
{ {
~SwappableIteratorConcept() ~SwappableIterator()
{ {
std::iter_swap(i1, i2); std::iter_swap(i1, i2);
} }
@ -90,12 +96,11 @@ namespace boost_concepts
Iterator i2; Iterator i2;
}; };
template <typename Iterator> BOOST_concept(LvalueIterator,(Iterator))
struct LvalueIteratorConcept
{ {
typedef typename boost::detail::iterator_traits<Iterator>::value_type value_type; typedef typename boost::detail::iterator_traits<Iterator>::value_type value_type;
~LvalueIteratorConcept() ~LvalueIterator()
{ {
value_type& r = const_cast<value_type&>(*i); value_type& r = const_cast<value_type&>(*i);
boost::ignore_unused_variable_warning(r); boost::ignore_unused_variable_warning(r);
@ -108,17 +113,16 @@ namespace boost_concepts
//=========================================================================== //===========================================================================
// Iterator Traversal Concepts // Iterator Traversal Concepts
template <typename Iterator> BOOST_concept(IncrementableIterator,(Iterator))
struct IncrementableIteratorConcept : boost::Assignable<Iterator>
: boost::AssignableConcept<Iterator> , boost::CopyConstructible<Iterator>
, boost::CopyConstructibleConcept<Iterator>
{ {
typedef typename boost::iterator_traversal<Iterator>::type traversal_category; typedef typename boost::iterator_traversal<Iterator>::type traversal_category;
~IncrementableIteratorConcept() ~IncrementableIterator()
{ {
BOOST_CONCEPT_ASSERT(( BOOST_CONCEPT_ASSERT((
boost::ConvertibleConcept< boost::Convertible<
traversal_category traversal_category
, boost::incrementable_traversal_tag , boost::incrementable_traversal_tag
>)); >));
@ -130,51 +134,48 @@ namespace boost_concepts
Iterator i; Iterator i;
}; };
template <typename Iterator> BOOST_concept(SinglePassIterator,(Iterator))
struct SinglePassIteratorConcept : IncrementableIterator<Iterator>
: IncrementableIteratorConcept<Iterator> , boost::EqualityComparable<Iterator>
, boost::EqualityComparableConcept<Iterator>
{ {
~SinglePassIteratorConcept() ~SinglePassIterator()
{ {
BOOST_CONCEPT_ASSERT(( BOOST_CONCEPT_ASSERT((
boost::ConvertibleConcept< boost::Convertible<
BOOST_DEDUCED_TYPENAME SinglePassIteratorConcept::traversal_category BOOST_DEDUCED_TYPENAME SinglePassIterator::traversal_category
, boost::single_pass_traversal_tag , boost::single_pass_traversal_tag
> )); > ));
} }
}; };
template <typename Iterator> BOOST_concept(ForwardTraversal,(Iterator))
struct ForwardTraversalConcept : SinglePassIterator<Iterator>
: SinglePassIteratorConcept<Iterator> , boost::DefaultConstructible<Iterator>
, boost::DefaultConstructibleConcept<Iterator>
{ {
typedef typename boost::detail::iterator_traits<Iterator>::difference_type difference_type; typedef typename boost::detail::iterator_traits<Iterator>::difference_type difference_type;
~ForwardTraversalConcept() ~ForwardTraversal()
{ {
BOOST_MPL_ASSERT((boost::is_integral<difference_type>)); BOOST_MPL_ASSERT((boost::is_integral<difference_type>));
BOOST_MPL_ASSERT_RELATION(std::numeric_limits<difference_type>::is_signed, ==, true); BOOST_MPL_ASSERT_RELATION(std::numeric_limits<difference_type>::is_signed, ==, true);
BOOST_CONCEPT_ASSERT(( BOOST_CONCEPT_ASSERT((
boost::ConvertibleConcept< boost::Convertible<
BOOST_DEDUCED_TYPENAME ForwardTraversalConcept::traversal_category BOOST_DEDUCED_TYPENAME ForwardTraversal::traversal_category
, boost::forward_traversal_tag , boost::forward_traversal_tag
> )); > ));
} }
}; };
template <typename Iterator> BOOST_concept(BidirectionalTraversal,(Iterator))
struct BidirectionalTraversalConcept : ForwardTraversal<Iterator>
: ForwardTraversalConcept<Iterator>
{ {
~BidirectionalTraversalConcept() ~BidirectionalTraversal()
{ {
BOOST_CONCEPT_ASSERT(( BOOST_CONCEPT_ASSERT((
boost::ConvertibleConcept< boost::Convertible<
BOOST_DEDUCED_TYPENAME BidirectionalTraversalConcept::traversal_category BOOST_DEDUCED_TYPENAME BidirectionalTraversal::traversal_category
, boost::bidirectional_traversal_tag , boost::bidirectional_traversal_tag
> )); > ));
@ -185,16 +186,15 @@ namespace boost_concepts
Iterator i; Iterator i;
}; };
template <typename Iterator> BOOST_concept(RandomAccessTraversal,(Iterator))
struct RandomAccessTraversalConcept : BidirectionalTraversal<Iterator>
: BidirectionalTraversalConcept<Iterator>
{ {
public: public:
~RandomAccessTraversalConcept() ~RandomAccessTraversal()
{ {
BOOST_CONCEPT_ASSERT(( BOOST_CONCEPT_ASSERT((
boost::ConvertibleConcept< boost::Convertible<
BOOST_DEDUCED_TYPENAME RandomAccessTraversalConcept::traversal_category BOOST_DEDUCED_TYPENAME RandomAccessTraversal::traversal_category
, boost::random_access_traversal_tag , boost::random_access_traversal_tag
> )); > ));
@ -207,12 +207,12 @@ namespace boost_concepts
} }
private: private:
typename BidirectionalTraversalConcept<Iterator>::difference_type n; typename BidirectionalTraversal<Iterator>::difference_type n;
Iterator i, j; Iterator i, j;
}; };
//=========================================================================== //===========================================================================
// Iterator Interoperability Concept // Iterator Interoperability
namespace detail namespace detail
{ {
@ -258,8 +258,7 @@ namespace boost_concepts
} // namespace detail } // namespace detail
template <typename Iterator, typename ConstIterator> BOOST_concept(InteroperableIterator,(Iterator)(ConstIterator))
struct InteroperableIteratorConcept
{ {
private: private:
typedef typename boost::detail::pure_traversal_tag< typedef typename boost::detail::pure_traversal_tag<
@ -275,10 +274,10 @@ namespace boost_concepts
>::type const_traversal_category; >::type const_traversal_category;
public: public:
~InteroperableIteratorConcept() ~InteroperableIterator()
{ {
BOOST_CONCEPT_ASSERT((SinglePassIteratorConcept<Iterator>)); BOOST_CONCEPT_ASSERT((SinglePassIterator<Iterator>));
BOOST_CONCEPT_ASSERT((SinglePassIteratorConcept<ConstIterator>)); BOOST_CONCEPT_ASSERT((SinglePassIterator<ConstIterator>));
detail::interop_single_pass_constraints(i, ci); detail::interop_single_pass_constraints(i, ci);
detail::interop_rand_access_constraints(i, ci, traversal_category(), const_traversal_category()); detail::interop_rand_access_constraints(i, ci, traversal_category(), const_traversal_category());
@ -293,5 +292,6 @@ namespace boost_concepts
} // namespace boost_concepts } // namespace boost_concepts
#include <boost/concept/detail/concept_undef.hpp>
#endif // BOOST_ITERATOR_CONCEPTS_HPP #endif // BOOST_ITERATOR_CONCEPTS_HPP