mirror of
https://github.com/boostorg/iterator.git
synced 2025-07-30 12:57:23 +02:00
Strip off "Concept" suffix.
[SVN r33899]
This commit is contained in:
@ -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
|
||||||
|
Reference in New Issue
Block a user