mirror of
https://github.com/boostorg/iterator.git
synced 2025-06-26 20:41:35 +02:00
Compare commits
33 Commits
boost-1.34
...
svn-branch
Author | SHA1 | Date | |
---|---|---|---|
ae90264865 | |||
bf7d904bf8 | |||
efecbd0d27 | |||
65e229fb0d | |||
bd5731efa9 | |||
a2d9e63f94 | |||
f34109aa26 | |||
0f88de3d88 | |||
107595b76c | |||
1f0a885def | |||
5bf5110cdb | |||
0b095e687f | |||
c0d6dacf62 | |||
c080ee4dcf | |||
9d241238f8 | |||
45f64ea8f7 | |||
71abf15b60 | |||
7243852b0a | |||
e7843bdea3 | |||
bca372da18 | |||
0237e49a17 | |||
b5492bd866 | |||
1fad13e34f | |||
3355660636 | |||
eaf9bf62d1 | |||
9f20320f59 | |||
2cb253ed35 | |||
230d47e93a | |||
e2957cfb0c | |||
f5b644e765 | |||
28dd458088 | |||
0dbe767eec | |||
c0fc8532e7 |
@ -1,159 +0,0 @@
|
|||||||
#ifndef BOOST_ITERATOR_CATEGORIES_HPP
|
|
||||||
#define BOOST_ITERATOR_CATEGORIES_HPP
|
|
||||||
|
|
||||||
#include <boost/config.hpp>
|
|
||||||
#include <boost/type_traits/conversion_traits.hpp>
|
|
||||||
#include <boost/type_traits/cv_traits.hpp>
|
|
||||||
#include <boost/pending/ct_if.hpp>
|
|
||||||
#include <boost/detail/iterator.hpp>
|
|
||||||
|
|
||||||
namespace boost {
|
|
||||||
|
|
||||||
// Return Type Categories
|
|
||||||
struct readable_iterator_tag { };
|
|
||||||
struct writable_iterator_tag { };
|
|
||||||
struct swappable_iterator_tag { };
|
|
||||||
struct mutable_lvalue_iterator_tag :
|
|
||||||
virtual public writable_iterator_tag,
|
|
||||||
virtual public readable_iterator_tag { };
|
|
||||||
struct constant_lvalue_iterator_tag :
|
|
||||||
virtual public readable_iterator_tag { };
|
|
||||||
|
|
||||||
// Traversal Categories
|
|
||||||
struct forward_traversal_tag { };
|
|
||||||
struct bidirectional_traversal_tag : public forward_traversal_tag { };
|
|
||||||
struct random_access_traversal_tag : public bidirectional_traversal_tag { };
|
|
||||||
|
|
||||||
struct error_iterator_tag { };
|
|
||||||
|
|
||||||
// Inherit from iterator_base if your iterator defines its own
|
|
||||||
// return_category and traversal_category. Otherwise, the "old style"
|
|
||||||
// iterator category will be mapped to the return_category and
|
|
||||||
// traversal_category.
|
|
||||||
struct new_iterator_base { };
|
|
||||||
|
|
||||||
namespace detail {
|
|
||||||
|
|
||||||
struct return_category_from_nested_type {
|
|
||||||
template <typename Iterator> struct bind {
|
|
||||||
typedef typename Iterator::return_category type;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
struct traversal_category_from_nested_type {
|
|
||||||
template <typename Iterator> struct bind {
|
|
||||||
typedef typename Iterator::traversal_category type;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename ValueType>
|
|
||||||
struct choose_lvalue_return {
|
|
||||||
typedef typename ct_if<is_const<ValueType>::value,
|
|
||||||
boost::constant_lvalue_iterator_tag,
|
|
||||||
boost::mutable_lvalue_iterator_tag>::type type;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
template <typename Category, typename ValueType>
|
|
||||||
struct iter_category_to_return {
|
|
||||||
typedef typename ct_if<
|
|
||||||
is_convertible<Category*, std::forward_iterator_tag*>::value,
|
|
||||||
typename choose_lvalue_return<ValueType>::type,
|
|
||||||
typename ct_if<
|
|
||||||
is_convertible<Category*, std::input_iterator_tag*>::value,
|
|
||||||
boost::readable_iterator_tag,
|
|
||||||
typename ct_if<
|
|
||||||
is_convertible<Category*, std::output_iterator_tag*>::value,
|
|
||||||
boost::writable_iterator_tag,
|
|
||||||
boost::error_iterator_tag
|
|
||||||
>::type
|
|
||||||
>::type
|
|
||||||
>::type type;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename Category>
|
|
||||||
struct iter_category_to_traversal {
|
|
||||||
typedef typename ct_if<
|
|
||||||
is_convertible<Category*, std::random_access_iterator_tag*>::value,
|
|
||||||
random_access_traversal_tag,
|
|
||||||
typename ct_if<
|
|
||||||
is_convertible<Category*, std::bidirectional_iterator_tag*>::value,
|
|
||||||
bidirectional_traversal_tag,
|
|
||||||
forward_traversal_tag
|
|
||||||
>::type
|
|
||||||
>::type type;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct return_category_from_old_traits {
|
|
||||||
template <typename Iterator> class bind {
|
|
||||||
typedef boost::detail::iterator_traits<Iterator> OldTraits;
|
|
||||||
typedef typename OldTraits::iterator_category Cat;
|
|
||||||
typedef typename OldTraits::value_type value_type;
|
|
||||||
public:
|
|
||||||
typedef iter_category_to_return<Cat, value_type>::type type;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
struct traversal_category_from_old_traits {
|
|
||||||
template <typename Iterator> class bind {
|
|
||||||
typedef boost::detail::iterator_traits<Iterator> OldTraits;
|
|
||||||
typedef typename OldTraits::iterator_category Cat;
|
|
||||||
public:
|
|
||||||
typedef iter_category_to_traversal<Cat>::type type;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename Iterator>
|
|
||||||
class choose_return_category {
|
|
||||||
typedef typename ct_if<is_convertible<Iterator*,
|
|
||||||
new_iterator_base*>::value,
|
|
||||||
return_category_from_nested_type,
|
|
||||||
return_category_from_old_traits>::type Choice;
|
|
||||||
public:
|
|
||||||
typedef typename Choice:: template bind<Iterator>::type type;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename Iterator>
|
|
||||||
class choose_traversal_category {
|
|
||||||
typedef typename ct_if<is_convertible<Iterator*,
|
|
||||||
new_iterator_base*>::value,
|
|
||||||
traversal_category_from_nested_type,
|
|
||||||
traversal_category_from_old_traits>::type Choice;
|
|
||||||
public:
|
|
||||||
typedef typename Choice:: template bind<Iterator>::type type;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace detail
|
|
||||||
|
|
||||||
template <class Iterator>
|
|
||||||
struct return_category {
|
|
||||||
typedef typename detail::choose_return_category<Iterator>::type type;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
template <class Iterator>
|
|
||||||
struct traversal_category {
|
|
||||||
typedef typename detail::choose_traversal_category<Iterator>::type type;
|
|
||||||
};
|
|
||||||
|
|
||||||
#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct return_category<T*>
|
|
||||||
{
|
|
||||||
typedef typename ct_if<is_const<T>::value,
|
|
||||||
constant_lvalue_iterator_tag,
|
|
||||||
mutable_lvalue_iterator_tag>::type type;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct traversal_category<T*>
|
|
||||||
{
|
|
||||||
typedef random_access_traversal_tag type;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
} // namespace boost
|
|
||||||
|
|
||||||
#endif // BOOST_ITERATOR_CATEGORIES_HPP
|
|
@ -1,172 +0,0 @@
|
|||||||
#ifndef BOOST_ITERATOR_CONCEPTS_HPP
|
|
||||||
#define BOOST_ITERATOR_CONCEPTS_HPP
|
|
||||||
|
|
||||||
#include <boost/concept_check.hpp>
|
|
||||||
#include <boost/iterator_categories.hpp>
|
|
||||||
#include <boost/type_traits/conversion_traits.hpp>
|
|
||||||
#include <boost/static_assert.hpp>
|
|
||||||
|
|
||||||
namespace boost_concepts {
|
|
||||||
// Used a different namespace here (instead of "boost") so that the
|
|
||||||
// concept descriptions do not take for granted the names in
|
|
||||||
// namespace boost.
|
|
||||||
|
|
||||||
|
|
||||||
//===========================================================================
|
|
||||||
// Iterator Access Concepts
|
|
||||||
|
|
||||||
template <typename Iterator>
|
|
||||||
class ReadableIteratorConcept {
|
|
||||||
public:
|
|
||||||
typedef typename std::iterator_traits<Iterator>::value_type value_type;
|
|
||||||
typedef typename std::iterator_traits<Iterator>::reference reference;
|
|
||||||
typedef typename boost::return_category<Iterator>::type return_category;
|
|
||||||
|
|
||||||
void constraints() {
|
|
||||||
boost::function_requires< boost::SGIAssignableConcept<Iterator> >();
|
|
||||||
boost::function_requires< boost::EqualityComparableConcept<Iterator> >();
|
|
||||||
boost::function_requires<
|
|
||||||
boost::DefaultConstructibleConcept<Iterator> >();
|
|
||||||
|
|
||||||
BOOST_STATIC_ASSERT((boost::is_convertible<return_category*,
|
|
||||||
boost::readable_iterator_tag*>::value));
|
|
||||||
|
|
||||||
reference r = *i; // or perhaps read(x)
|
|
||||||
value_type v(r);
|
|
||||||
boost::ignore_unused_variable_warning(v);
|
|
||||||
}
|
|
||||||
Iterator i;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename Iterator, typename ValueType>
|
|
||||||
class WritableIteratorConcept {
|
|
||||||
public:
|
|
||||||
typedef typename boost::return_category<Iterator>::type return_category;
|
|
||||||
|
|
||||||
void constraints() {
|
|
||||||
boost::function_requires< boost::SGIAssignableConcept<Iterator> >();
|
|
||||||
boost::function_requires< boost::EqualityComparableConcept<Iterator> >();
|
|
||||||
boost::function_requires<
|
|
||||||
boost::DefaultConstructibleConcept<Iterator> >();
|
|
||||||
|
|
||||||
BOOST_STATIC_ASSERT((boost::is_convertible<return_category*,
|
|
||||||
boost::writable_iterator_tag*>::value));
|
|
||||||
|
|
||||||
*i = v; // a good alternative could be something like write(x, v)
|
|
||||||
}
|
|
||||||
ValueType v;
|
|
||||||
Iterator i;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename Iterator>
|
|
||||||
class ConstantLvalueIteratorConcept {
|
|
||||||
public:
|
|
||||||
typedef typename std::iterator_traits<Iterator>::value_type value_type;
|
|
||||||
typedef typename std::iterator_traits<Iterator>::reference reference;
|
|
||||||
typedef typename boost::return_category<Iterator>::type return_category;
|
|
||||||
|
|
||||||
void constraints() {
|
|
||||||
boost::function_requires< ReadableIteratorConcept<Iterator> >();
|
|
||||||
|
|
||||||
BOOST_STATIC_ASSERT((boost::is_convertible<return_category*,
|
|
||||||
boost::constant_lvalue_iterator_tag*>::value));
|
|
||||||
|
|
||||||
BOOST_STATIC_ASSERT((boost::is_same<reference,
|
|
||||||
const value_type&>::value));
|
|
||||||
|
|
||||||
reference v = *i;
|
|
||||||
boost::ignore_unused_variable_warning(v);
|
|
||||||
}
|
|
||||||
Iterator i;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename Iterator>
|
|
||||||
class MutableLvalueIteratorConcept {
|
|
||||||
public:
|
|
||||||
typedef typename std::iterator_traits<Iterator>::value_type value_type;
|
|
||||||
typedef typename std::iterator_traits<Iterator>::reference reference;
|
|
||||||
typedef typename boost::return_category<Iterator>::type return_category;
|
|
||||||
|
|
||||||
void constraints() {
|
|
||||||
boost::function_requires< ReadableIteratorConcept<Iterator> >();
|
|
||||||
boost::function_requires<
|
|
||||||
WritableIteratorConcept<Iterator, value_type> >();
|
|
||||||
|
|
||||||
BOOST_STATIC_ASSERT((boost::is_convertible<return_category*,
|
|
||||||
boost::mutable_lvalue_iterator_tag*>::value));
|
|
||||||
|
|
||||||
BOOST_STATIC_ASSERT((boost::is_same<reference, value_type&>::value));
|
|
||||||
|
|
||||||
reference v = *i;
|
|
||||||
boost::ignore_unused_variable_warning(v);
|
|
||||||
}
|
|
||||||
Iterator i;
|
|
||||||
};
|
|
||||||
|
|
||||||
//===========================================================================
|
|
||||||
// Iterator Traversal Concepts
|
|
||||||
|
|
||||||
template <typename Iterator>
|
|
||||||
class ForwardIteratorConcept {
|
|
||||||
public:
|
|
||||||
typedef typename boost::traversal_category<Iterator>::type traversal_category;
|
|
||||||
|
|
||||||
void constraints() {
|
|
||||||
boost::function_requires< boost::SGIAssignableConcept<Iterator> >();
|
|
||||||
boost::function_requires< boost::EqualityComparableConcept<Iterator> >();
|
|
||||||
boost::function_requires<
|
|
||||||
boost::DefaultConstructibleConcept<Iterator> >();
|
|
||||||
|
|
||||||
BOOST_STATIC_ASSERT((boost::is_convertible<traversal_category*,
|
|
||||||
boost::forward_traversal_tag*>::value));
|
|
||||||
++i;
|
|
||||||
(void)i++;
|
|
||||||
}
|
|
||||||
Iterator i;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename Iterator>
|
|
||||||
class BidirectionalIteratorConcept {
|
|
||||||
public:
|
|
||||||
typedef typename boost::traversal_category<Iterator>::type traversal_category;
|
|
||||||
|
|
||||||
void constraints() {
|
|
||||||
boost::function_requires< ForwardIteratorConcept<Iterator> >();
|
|
||||||
|
|
||||||
BOOST_STATIC_ASSERT((boost::is_convertible<traversal_category*,
|
|
||||||
boost::bidirectional_traversal_tag*>::value));
|
|
||||||
|
|
||||||
--i;
|
|
||||||
(void)i--;
|
|
||||||
}
|
|
||||||
Iterator i;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename Iterator>
|
|
||||||
class RandomAccessIteratorConcept {
|
|
||||||
public:
|
|
||||||
typedef typename boost::traversal_category<Iterator>::type traversal_category;
|
|
||||||
typedef typename std::iterator_traits<Iterator>::difference_type
|
|
||||||
difference_type;
|
|
||||||
|
|
||||||
void constraints() {
|
|
||||||
boost::function_requires< BidirectionalIteratorConcept<Iterator> >();
|
|
||||||
|
|
||||||
BOOST_STATIC_ASSERT((boost::is_convertible<traversal_category*,
|
|
||||||
boost::random_access_traversal_tag*>::value));
|
|
||||||
|
|
||||||
i += n;
|
|
||||||
i = i + n;
|
|
||||||
i = n + i;
|
|
||||||
i -= n;
|
|
||||||
i = i - n;
|
|
||||||
n = i - j;
|
|
||||||
}
|
|
||||||
difference_type n;
|
|
||||||
Iterator i, j;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace boost_concepts
|
|
||||||
|
|
||||||
|
|
||||||
#endif // BOOST_ITERATOR_CONCEPTS_HPP
|
|
@ -1,73 +0,0 @@
|
|||||||
#include <boost/iterator_concepts.hpp>
|
|
||||||
#include <boost/operators.hpp>
|
|
||||||
|
|
||||||
struct new_iterator
|
|
||||||
: public boost::iterator<std::random_access_iterator_tag, int>,
|
|
||||||
public boost::new_iterator_base
|
|
||||||
{
|
|
||||||
typedef boost::random_access_traversal_tag traversal_category;
|
|
||||||
typedef boost::mutable_lvalue_iterator_tag return_category;
|
|
||||||
|
|
||||||
int& operator*() const { return *m_x; }
|
|
||||||
new_iterator& operator++() { return *this; }
|
|
||||||
new_iterator operator++(int) { return *this; }
|
|
||||||
new_iterator& operator--() { return *this; }
|
|
||||||
new_iterator operator--(int) { return *this; }
|
|
||||||
new_iterator& operator+=(std::ptrdiff_t) { return *this; }
|
|
||||||
new_iterator operator+(std::ptrdiff_t) { return *this; }
|
|
||||||
new_iterator& operator-=(std::ptrdiff_t) { return *this; }
|
|
||||||
std::ptrdiff_t operator-(const new_iterator&) const { return 0; }
|
|
||||||
new_iterator operator-(std::ptrdiff_t) const { return *this; }
|
|
||||||
bool operator==(const new_iterator&) const { return false; }
|
|
||||||
bool operator!=(const new_iterator&) const { return false; }
|
|
||||||
bool operator<(const new_iterator&) const { return false; }
|
|
||||||
int* m_x;
|
|
||||||
};
|
|
||||||
new_iterator operator+(std::ptrdiff_t, new_iterator x) { return x; }
|
|
||||||
|
|
||||||
struct old_iterator
|
|
||||||
: public boost::iterator<std::random_access_iterator_tag, int>
|
|
||||||
{
|
|
||||||
int& operator*() const { return *m_x; }
|
|
||||||
old_iterator& operator++() { return *this; }
|
|
||||||
old_iterator operator++(int) { return *this; }
|
|
||||||
old_iterator& operator--() { return *this; }
|
|
||||||
old_iterator operator--(int) { return *this; }
|
|
||||||
old_iterator& operator+=(std::ptrdiff_t) { return *this; }
|
|
||||||
old_iterator operator+(std::ptrdiff_t) { return *this; }
|
|
||||||
old_iterator& operator-=(std::ptrdiff_t) { return *this; }
|
|
||||||
old_iterator operator-(std::ptrdiff_t) const { return *this; }
|
|
||||||
std::ptrdiff_t operator-(const old_iterator&) const { return 0; }
|
|
||||||
bool operator==(const old_iterator&) const { return false; }
|
|
||||||
bool operator!=(const old_iterator&) const { return false; }
|
|
||||||
bool operator<(const old_iterator&) const { return false; }
|
|
||||||
int* m_x;
|
|
||||||
};
|
|
||||||
old_iterator operator+(std::ptrdiff_t, old_iterator x) { return x; }
|
|
||||||
|
|
||||||
int
|
|
||||||
main()
|
|
||||||
{
|
|
||||||
#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
|
|
||||||
boost::function_requires<
|
|
||||||
boost_concepts::MutableLvalueIteratorConcept<int*> >();
|
|
||||||
boost::function_requires<
|
|
||||||
boost_concepts::RandomAccessIteratorConcept<int*> >();
|
|
||||||
|
|
||||||
boost::function_requires<
|
|
||||||
boost_concepts::ConstantLvalueIteratorConcept<const int*> >();
|
|
||||||
boost::function_requires<
|
|
||||||
boost_concepts::RandomAccessIteratorConcept<const int*> >();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
boost::function_requires<
|
|
||||||
boost_concepts::MutableLvalueIteratorConcept<new_iterator> >();
|
|
||||||
boost::function_requires<
|
|
||||||
boost_concepts::RandomAccessIteratorConcept<new_iterator> >();
|
|
||||||
|
|
||||||
boost::function_requires<
|
|
||||||
boost_concepts::MutableLvalueIteratorConcept<old_iterator> >();
|
|
||||||
boost::function_requires<
|
|
||||||
boost_concepts::RandomAccessIteratorConcept<old_iterator> >();
|
|
||||||
return 0;
|
|
||||||
}
|
|
@ -1,160 +0,0 @@
|
|||||||
<html>
|
|
||||||
<!--
|
|
||||||
-- Copyright (c) Jeremy Siek 2000,2001
|
|
||||||
--
|
|
||||||
-- Permission to use, copy, modify, distribute and sell this software
|
|
||||||
-- and its documentation for any purpose is hereby granted without fee,
|
|
||||||
-- provided that the above copyright notice appears in all copies and
|
|
||||||
-- that both that copyright notice and this permission notice appear
|
|
||||||
-- in supporting documentation. I make no representations about the
|
|
||||||
-- suitability of this software for any purpose. It is provided "as is"
|
|
||||||
-- without express or implied warranty.
|
|
||||||
-->
|
|
||||||
<head>
|
|
||||||
<title>Boost Iterator Traits</title>
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
|
|
||||||
ALINK="#ff0000">
|
|
||||||
<IMG SRC="../../../../c++boost.gif"
|
|
||||||
ALT="C++ Boost" width="277" height="86">
|
|
||||||
<BR Clear>
|
|
||||||
|
|
||||||
<h1>Boost Iterator Category Traits</h1>
|
|
||||||
Header <tt><a href="../../boost/iterator_categories.hpp">boost/iterator_categories.hpp</a></tt>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
The <tt>boost::traversal_category</tt> and
|
|
||||||
<tt>boost::return_category</tt> traits classes provides access to the
|
|
||||||
category tags for iterators that model the Boost <a
|
|
||||||
href="./iterator_concepts.htm">Iterator Concepts</a>, which are a
|
|
||||||
replacement for the iterator requirements in the C++ standard. The
|
|
||||||
other associated types of the Boost iterator concepts are accessed
|
|
||||||
through the <tt>std::iterator_traits</tt> class.
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
<li><tt>traversal_category<Iter>::type</tt> Can the iterator go forward, backward, etc.?
|
|
||||||
<li><tt>return_category<Iter>::type</tt> Is the iterator read or write only?
|
|
||||||
Is the dereferenced type an lvalue?
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
An important feature of the <tt>boost::traversal_category</tt> and
|
|
||||||
<tt>boost::return_category</tt> classes is that they are <b>backwards
|
|
||||||
compatible</b>, i.e., they automatically work for iterators for which
|
|
||||||
there are valid definitions of <tt>std::iterator_traits</tt>. The old
|
|
||||||
<tt>iterator_category</tt> is mapped to the appropriate traversal and
|
|
||||||
return categories.
|
|
||||||
|
|
||||||
<p>
|
|
||||||
When creating a new iterator type that is meant to work with
|
|
||||||
<tt>boost::traversal_category</tt> and
|
|
||||||
<tt>boost::return_category</tt>, you can either create a
|
|
||||||
specialization of these classes for your iterator type, or you can
|
|
||||||
provide all the necessary associated types as nested typedefs. In
|
|
||||||
this case, your iterator class will need to inherit from
|
|
||||||
<tt>new_iterator_base</tt> to let the category traits know
|
|
||||||
that it will be able to find typedefs for <tt>traversal_category</tt>
|
|
||||||
and <tt>return_category</tt> in you iterator class.
|
|
||||||
|
|
||||||
|
|
||||||
Each of the new iterator requirements will need a category tag.
|
|
||||||
|
|
||||||
<pre>
|
|
||||||
namespace boost {
|
|
||||||
|
|
||||||
// Return Type Categories
|
|
||||||
struct readable_iterator_tag { };
|
|
||||||
struct writable_iterator_tag { };
|
|
||||||
struct swappable_iterator_tag { };
|
|
||||||
struct mutable_lvalue_iterator_tag : virtual public writable_iterator_tag,
|
|
||||||
virtual public readable_iterator_tag { };
|
|
||||||
struct constant_lvalue_iterator_tag : public readable_iterator_tag { };
|
|
||||||
|
|
||||||
// Traversal Categories
|
|
||||||
struct forward_traversal_tag { };
|
|
||||||
struct bidirectional_traversal_tag : public forward_traversal_tag { };
|
|
||||||
struct random_access_traversal_tag : public bidirectional_traversal_tag { };
|
|
||||||
|
|
||||||
}
|
|
||||||
</pre>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
The following is pseudo-code for the iterator category traits classes.
|
|
||||||
|
|
||||||
<pre>
|
|
||||||
namespace boost {
|
|
||||||
|
|
||||||
<i>// Inherit from iterator_base if your iterator defines its own
|
|
||||||
// return_category and traversal_category. Otherwise, the "old style"
|
|
||||||
// iterator category will be mapped to the return_category and
|
|
||||||
// traversal_category.</i>
|
|
||||||
struct new_iterator_base { };
|
|
||||||
|
|
||||||
template <typename Iterator>
|
|
||||||
struct return_category
|
|
||||||
{
|
|
||||||
<b><i>// Pseudo-code</i></b>
|
|
||||||
if (Iterator inherits from new_iterator_base) {
|
|
||||||
typedef typename Iterator::return_category type;
|
|
||||||
} else {
|
|
||||||
typedef std::iterator_traits<Iterator> OldTraits;
|
|
||||||
typedef typename OldTraits::iterator_category Cat;
|
|
||||||
if (Cat inherits from std::forward_iterator_tag)
|
|
||||||
if (is-const(T))
|
|
||||||
typedef boost::constant_lvalue_iterator_tag type;
|
|
||||||
else
|
|
||||||
typedef boost::mutable_lvalue_iterator_tag type;
|
|
||||||
else if (Cat inherits from std::input_iterator_tag)
|
|
||||||
typedef boost::readable_iterator_tag type;
|
|
||||||
else if (Cat inherits from std::output_iterator_tag)
|
|
||||||
typedef boost::writable_iterator_tag type;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct return_category<T*>
|
|
||||||
{
|
|
||||||
<b><i>// Pseudo-code</i></b>
|
|
||||||
if (is-const(T))
|
|
||||||
typedef boost::constant_lvalue_iterator_tag type;
|
|
||||||
else
|
|
||||||
typedef boost::mutable_lvalue_iterator_tag type;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename Iterator>
|
|
||||||
struct traversal_category
|
|
||||||
{
|
|
||||||
<b><i>// Pseudo-code</i></b>
|
|
||||||
if (Iterator inherits from new_iterator_base) {
|
|
||||||
typedef typename Iterator::traversal_category type;
|
|
||||||
} else {
|
|
||||||
typedef std::iterator_traits<Iterator> OldTraits;
|
|
||||||
typedef typename OldTraits::iterator_category Cat;
|
|
||||||
|
|
||||||
if (Cat inherits from std::random_access_iterator_tag)
|
|
||||||
typedef boost::random_access_traversal_tag type;
|
|
||||||
else if (Cat inherits from std::bidirectional_iterator_tag)
|
|
||||||
typedef boost::bidirectional_traversal_tag type;
|
|
||||||
else if (Cat inherits from std::forward_iterator_tag)
|
|
||||||
typedef boost::forward_traversal_tag type;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct traversal_category<T*>
|
|
||||||
{
|
|
||||||
typedef boost::random_access_traversal_tag type;
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
||||||
</pre>
|
|
||||||
|
|
||||||
<hr>
|
|
||||||
<address><a href="mailto:jsiek@lsc.nd.edu">jeremy siek</a></address>
|
|
||||||
<!-- Created: Sun Mar 18 14:06:57 EST 2001 -->
|
|
||||||
<!-- hhmts start -->
|
|
||||||
Last modified: Mon Mar 19 12:59:30 EST 2001
|
|
||||||
<!-- hhmts end -->
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@ -1,37 +0,0 @@
|
|||||||
#FIG 3.2
|
|
||||||
Landscape
|
|
||||||
Center
|
|
||||||
Inches
|
|
||||||
Letter
|
|
||||||
100.00
|
|
||||||
Single
|
|
||||||
-2
|
|
||||||
1200 2
|
|
||||||
6 150 2325 4275 4350
|
|
||||||
2 1 0 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2
|
|
||||||
1 1 1.00 60.00 120.00
|
|
||||||
1725 4050 1725 3450
|
|
||||||
2 1 0 1 0 7 100 0 -1 4.000 0 0 -1 1 0 2
|
|
||||||
1 1 1.00 60.00 120.00
|
|
||||||
1725 3150 1725 2550
|
|
||||||
4 0 0 100 0 19 18 0.0000 4 210 3180 375 2550 ForwardTraversalIterator\001
|
|
||||||
4 0 0 100 0 19 18 0.0000 4 210 3765 225 3450 BidirectionalTraversalIterator\001
|
|
||||||
4 0 0 100 0 19 18 0.0000 4 210 4125 150 4350 RandomAccessTraversalIterator\001
|
|
||||||
-6
|
|
||||||
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
|
|
||||||
1 1 1.00 60.00 120.00
|
|
||||||
4800 3600 4800 2400
|
|
||||||
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
|
|
||||||
1 1 1.00 60.00 120.00
|
|
||||||
6900 3000 5400 2400
|
|
||||||
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
|
|
||||||
1 1 1.00 60.00 120.00
|
|
||||||
6900 3000 7500 2400
|
|
||||||
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
|
|
||||||
1 1 1.00 60.00 120.00
|
|
||||||
6900 3000 9075 2475
|
|
||||||
4 0 0 100 0 19 18 0.0000 4 210 2040 6600 2400 WritableIterator\001
|
|
||||||
4 0 0 100 0 19 18 0.0000 4 210 2145 3900 2400 ReadableIterator\001
|
|
||||||
4 0 0 50 0 19 18 0.0000 4 210 2835 5700 3300 MutableLvalueIterator\001
|
|
||||||
4 0 0 50 0 19 18 0.0000 4 270 2355 9075 2400 SwappableIterator\001
|
|
||||||
4 0 0 50 0 19 18 0.0000 4 210 2970 3825 3900 ConstantLvalueIterator\001
|
|
Binary file not shown.
Before Width: | Height: | Size: 3.2 KiB |
@ -1,663 +0,0 @@
|
|||||||
<HTML>
|
|
||||||
<!--
|
|
||||||
-- Copyright (c) Jeremy Siek 2000
|
|
||||||
--
|
|
||||||
-- Permission to use, copy, modify, distribute and sell this software
|
|
||||||
-- and its documentation for any purpose is hereby granted without fee,
|
|
||||||
-- provided that the above copyright notice appears in all copies and
|
|
||||||
-- that both that copyright notice and this permission notice appear
|
|
||||||
-- in supporting documentation. I make no representations about the
|
|
||||||
-- suitability of this software for any purpose. It is provided "as is"
|
|
||||||
-- without express or implied warranty.
|
|
||||||
-->
|
|
||||||
<!--
|
|
||||||
-- Copyright (c) 1996-1999
|
|
||||||
-- Silicon Graphics Computer Systems, Inc.
|
|
||||||
--
|
|
||||||
-- Permission to use, copy, modify, distribute and sell this software
|
|
||||||
-- and its documentation for any purpose is hereby granted without fee,
|
|
||||||
-- provided that the above copyright notice appears in all copies and
|
|
||||||
-- that both that copyright notice and this permission notice appear
|
|
||||||
-- in supporting documentation. Silicon Graphics makes no
|
|
||||||
-- representations about the suitability of this software for any
|
|
||||||
-- purpose. It is provided "as is" without express or implied warranty.
|
|
||||||
--
|
|
||||||
-- Copyright (c) 1994
|
|
||||||
-- Hewlett-Packard Company
|
|
||||||
--
|
|
||||||
-- Permission to use, copy, modify, distribute and sell this software
|
|
||||||
-- and its documentation for any purpose is hereby granted without fee,
|
|
||||||
-- provided that the above copyright notice appears in all copies and
|
|
||||||
-- that both that copyright notice and this permission notice appear
|
|
||||||
-- in supporting documentation. Hewlett-Packard Company makes no
|
|
||||||
-- representations about the suitability of this software for any
|
|
||||||
-- purpose. It is provided "as is" without express or implied warranty.
|
|
||||||
--
|
|
||||||
-->
|
|
||||||
<Head>
|
|
||||||
<Title>Iterator Concepts</Title>
|
|
||||||
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
|
|
||||||
ALINK="#ff0000">
|
|
||||||
<IMG SRC="../../../../c++boost.gif"
|
|
||||||
ALT="C++ Boost" width="277" height="86">
|
|
||||||
|
|
||||||
<BR Clear>
|
|
||||||
|
|
||||||
|
|
||||||
<h1>Iterator Concepts</h1>
|
|
||||||
|
|
||||||
<p>The standard iterator categories and requirements are flawed because
|
|
||||||
they use a single hierarchy of requirements to address two orthogonal
|
|
||||||
issues: <b><i>iterator traversal</i></b> and <b><i>dereference return
|
|
||||||
type</i></b>. The current iterator requirement hierarchy is mainly
|
|
||||||
geared towards iterator traversal (hence the category names), while
|
|
||||||
requirements that address dereference return type sneak in at various
|
|
||||||
places.
|
|
||||||
|
|
||||||
<p>
|
|
||||||
The iterator requirements should be separated into two hierarchies.
|
|
||||||
One set of concepts handles the return type semantics:
|
|
||||||
<ul>
|
|
||||||
<li><a href="#concept:ReadableIterator">Readable Iterator</a></li>
|
|
||||||
<li><a href="#concept:WritableIterator">Writable Iterator</a></li>
|
|
||||||
<li><a href="#concept:SwappableIterator">Swappable Iterator</a></li>
|
|
||||||
<li><a href="#concept:ConstantLvalueIterator">Constant Lvalue Iterator</a></li>
|
|
||||||
<li><a href="#concept:MutableLvalueIterator">Mutable Lvalue Iterator</a></li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
The other set of concepts handles iterator traversal:
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
<li><a href="#concept:ForwardTraversalIterator">Forward Traversal Iterator</a></li>
|
|
||||||
<li><a href="#concept:BidirectionalTraversalIterator">Bidirectional Traversal Iterator</a></li>
|
|
||||||
<li><a href="#concept:RandomAccessTraversalIterator">Random Access Traversal Iterator</a></li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
The current Input Iterator and Output Iterator requirements will
|
|
||||||
continue to be used as is. Note that Input Iterator implies Readable
|
|
||||||
Iterator and Output Iterator implies Writable Iterator.
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Note: we considered defining a Single-Pass Iterator, which could be
|
|
||||||
combined with Readable or Writable Iterator to replace the Input and
|
|
||||||
Output Iterator requirements. We rejected this idea because there are
|
|
||||||
some differences between Input and Output Iterators that make it hard
|
|
||||||
to merge them: for example Input Iterator requires Equality Comparable
|
|
||||||
while Output Iterator does not.
|
|
||||||
|
|
||||||
|
|
||||||
<p></p>
|
|
||||||
<DIV ALIGN="CENTER"><A NAME="fig:graph-concepts"></A></A>
|
|
||||||
<TABLE>
|
|
||||||
<CAPTION ALIGN="TOP"><STRONG>Figure 1:</STRONG>
|
|
||||||
The iterator concepts and refinement relationships.
|
|
||||||
</CAPTION>
|
|
||||||
<TR><TD><IMG SRC="./iterator_concepts.gif" ></TD></TR>
|
|
||||||
</TABLE>
|
|
||||||
</DIV>
|
|
||||||
<p></p>
|
|
||||||
|
|
||||||
|
|
||||||
<h2>Relationship with the standard iterator concepts</h2>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
std::Input Iterator implies boost::ReadableIterator.
|
|
||||||
|
|
||||||
<p>
|
|
||||||
std::Output Iterator implies boost::Writable Iterator.
|
|
||||||
|
|
||||||
<p>
|
|
||||||
std::Forward Iterator refines boost::Forward Iterator and
|
|
||||||
boost::Constant Lvalue Iterator or boost::Mutable Lvalue Iterator.
|
|
||||||
|
|
||||||
<p>
|
|
||||||
std::Bidirectional Iterator refines boost::Bidirectional Iterator and
|
|
||||||
boost::Constant Lvalue Iterator or boost::Mutable Lvalue Iterator.
|
|
||||||
|
|
||||||
<p>
|
|
||||||
std::Random Access Iterator refines boost::Random Access Iterator and
|
|
||||||
boost::Constant Lvalue Iterator or boost::Mutable Lvalue Iterator.
|
|
||||||
|
|
||||||
|
|
||||||
<h3>Notation</h3>
|
|
||||||
<Table>
|
|
||||||
<tr>
|
|
||||||
<td><tt>X</tt></td>
|
|
||||||
<td>The iterator type.</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td><tt>T</tt></td>
|
|
||||||
<td>The value type of <tt>X</tt>, i.e., <tt>std::iterator_traits<X>::value_type</tt>.</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td><tt>x</tt>, <tt>y</tt></td>
|
|
||||||
<td>An object of type <tt>X</tt>.</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td><tt>t</tt></td>
|
|
||||||
<td>An object of type <tt>T</tt>.</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
|
|
||||||
<hr>
|
|
||||||
<!--------------------------------------------------------------------------->
|
|
||||||
|
|
||||||
<H3><A NAME="concept:ReadableIterator"></A>
|
|
||||||
Readable Iterator
|
|
||||||
</H3>
|
|
||||||
|
|
||||||
A Readable Iterator is an iterator that dereferences to produce an
|
|
||||||
rvalue that is convertible to the <tt>value_type</tt> of the
|
|
||||||
iterator.
|
|
||||||
|
|
||||||
<h3>Associated Types</h3>
|
|
||||||
|
|
||||||
<Table border>
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
<td>Value type</td>
|
|
||||||
<td><tt>std::iterator_traits<X>::value_type</tt></td>
|
|
||||||
<td>The type of the objects pointed to by the iterator.</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
<td>Reference type</td>
|
|
||||||
<td><tt>std::iterator_traits<X>::reference</tt></td>
|
|
||||||
<td>
|
|
||||||
The return type of dereferencing the iterator. This
|
|
||||||
type must be convertible to <tt>T</tt>.
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
<td>Return Category</td>
|
|
||||||
<td><tt>std::return_category<X>::type</tt></td>
|
|
||||||
<td>
|
|
||||||
A type convertible to <tt>std::readable_iterator_tag</tt>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
</Table>
|
|
||||||
|
|
||||||
<h3>Refinement of</h3>
|
|
||||||
|
|
||||||
<A href="http://www.boost.org/libs/utility/CopyConstructible.html">Copy Constructible</A>
|
|
||||||
|
|
||||||
<h3>Valid expressions</h3>
|
|
||||||
|
|
||||||
<Table border>
|
|
||||||
<tr><TH>Name</TH><TH>Expression</TH><TH>Type requirements</TH><TH>Return type</TH></tr>
|
|
||||||
<tr>
|
|
||||||
<td>Dereference</td>
|
|
||||||
<td><tt>*x</tt></td>
|
|
||||||
<td> </td>
|
|
||||||
<td><tt>std::iterator_traits<X>::reference</tt></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Member access</td>
|
|
||||||
<td><tt>x->m</tt></td>
|
|
||||||
<td><tt>T</tt> is a type with a member named <tt>m</tt>.</td>
|
|
||||||
<td>
|
|
||||||
If <tt>m</tt> is a data member, the type of <tt>m</tt>.
|
|
||||||
If <tt>m</tt> is a member function, the return type of <tt>m</tt>.
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
|
|
||||||
<hr>
|
|
||||||
<!--------------------------------------------------------------------------->
|
|
||||||
|
|
||||||
<H3><A NAME="concept:WritableIterator"></A>
|
|
||||||
Writable Iterator
|
|
||||||
</H3>
|
|
||||||
|
|
||||||
A Writable Iterator is an iterator that can be used to store a value
|
|
||||||
using the dereference-assignment expression.
|
|
||||||
|
|
||||||
<h3>Definitions</h3>
|
|
||||||
|
|
||||||
If <tt>x</tt> is an Writable Iterator of type <tt>X</tt>, then the
|
|
||||||
expression <tt>*x = a;</tt> stores the value <tt>a</tt> into
|
|
||||||
<tt>x</tt>. Note that <tt>operator=</tt>, like other C++ functions,
|
|
||||||
may be overloaded; it may, in fact, even be a template function. In
|
|
||||||
general, then, <tt>a</tt> may be any of several different types. A
|
|
||||||
type <tt>A</tt> belongs to the <i>set of value types</i> of <tt>X</tt>
|
|
||||||
if, for an object <tt>a</tt> of type <tt>A</tt>, <tt>*x = a;</tt> is
|
|
||||||
well-defined and does not require performing any non-trivial
|
|
||||||
conversions on <tt>a</tt>.
|
|
||||||
|
|
||||||
<h3>Associated Types</h3>
|
|
||||||
|
|
||||||
<Table border>
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
<td>Return Category</td>
|
|
||||||
<td><tt>std::return_category<X>::type</tt></td>
|
|
||||||
<td>
|
|
||||||
A type convertible to <tt>std::writable_iterator_tag</tt>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
</Table>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h3>Refinement of</h3>
|
|
||||||
|
|
||||||
<A href="http://www.boost.org/libs/utility/CopyConstructible.html">Copy Constructible</A>
|
|
||||||
|
|
||||||
<h3>Valid expressions</h3>
|
|
||||||
|
|
||||||
<Table border>
|
|
||||||
<tr>
|
|
||||||
<TH>Name</TH><TH>Expression</TH><TH>Return type</TH>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Dereference assignment</td>
|
|
||||||
<td><tt>*x = a</tt></td>
|
|
||||||
<td>unspecified</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
|
|
||||||
|
|
||||||
<hr>
|
|
||||||
<!--------------------------------------------------------------------------->
|
|
||||||
|
|
||||||
<H3><A NAME="concept:SwappableIterator"></A>
|
|
||||||
Swappable Iterator
|
|
||||||
</H3>
|
|
||||||
|
|
||||||
A Swappable Iterator is an iterator whose dereferenced values can be
|
|
||||||
swapped.
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Note: the requirements for Swappable Iterator are dependent on the
|
|
||||||
issues surrounding <tt>std::swap()</tt> being resolved. Here we assume
|
|
||||||
that the issue will be resolved by allowing the overload of
|
|
||||||
<tt>std::swap()</tt> for user-defined types.
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Note: Readable Iterator and Writable Iterator combined implies
|
|
||||||
Swappable Iterator because of the fully templated
|
|
||||||
<tt>std::swap()</tt>. However, Swappable Iterator does not imply
|
|
||||||
Readable Iterator nor Writable Iterator.
|
|
||||||
|
|
||||||
<h3>Associated Types</h3>
|
|
||||||
|
|
||||||
<Table border>
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
<td>Return Category</td>
|
|
||||||
<td><tt>std::return_category<X>::type</tt></td>
|
|
||||||
<td>
|
|
||||||
A type convertible to <tt>std::swappable_iterator_tag</tt>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
</Table>
|
|
||||||
|
|
||||||
|
|
||||||
<h3>Valid expressions</h3>
|
|
||||||
|
|
||||||
Of the two valid expressions listed below, only one <b>OR</b> the
|
|
||||||
other is required. If <tt>std::iter_swap()</tt> is overloaded for
|
|
||||||
<tt>X</tt> then <tt>std::swap()</tt> is not required. If
|
|
||||||
<tt>std::iter_swap()</tt> is not overloaded for <tt>X</tt> then the
|
|
||||||
default (fully templated) version is used, which will call
|
|
||||||
<tt>std::swap()</tt> (this means changing the current requirements for
|
|
||||||
<tt>std::iter_swap()</tt>).
|
|
||||||
|
|
||||||
<p>
|
|
||||||
<Table border>
|
|
||||||
<tr>
|
|
||||||
<TH>Name</TH><TH>Expression</TH><TH>Return type</TH>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
<td>Iterator Swap</td>
|
|
||||||
<td><tt>std::iter_swap(x, y)</tt></td>
|
|
||||||
<td>void</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
<td>Dereference and Swap</td>
|
|
||||||
<td><tt>std::swap(*x, *y)</tt></td>
|
|
||||||
<td>void</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
|
|
||||||
|
|
||||||
<hr>
|
|
||||||
<!--------------------------------------------------------------------------->
|
|
||||||
|
|
||||||
<H3><A NAME="concept:ConstantLvalueIterator"></A>
|
|
||||||
Constant Lvalue Iterator
|
|
||||||
</H3>
|
|
||||||
|
|
||||||
A Constant Lvalue Iterator is an iterator that dereferences to produce a
|
|
||||||
const reference to the pointed-to object, i.e., the associated
|
|
||||||
<tt>reference</tt> type is <tt>const T&</tt>. Changing the value
|
|
||||||
of or destroying an iterator that models Constant Lvalue Iterator does
|
|
||||||
not invalidate pointers and references previously obtained from that
|
|
||||||
iterator.
|
|
||||||
|
|
||||||
|
|
||||||
<h3>Refinement of</h3>
|
|
||||||
|
|
||||||
<a href="#concept:ReadableIterator">Readable Iterator</a>
|
|
||||||
|
|
||||||
<h3>Associated Types</h3>
|
|
||||||
|
|
||||||
<Table border>
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
<td>Reference type</td>
|
|
||||||
<td><tt>std::iterator_traits<X>::reference</tt></td>
|
|
||||||
<td>
|
|
||||||
The return type of dereferencing the iterator, which must be
|
|
||||||
<tt>const T&</tt>.
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<!-- I don't think this is needed
|
|
||||||
<tr>
|
|
||||||
<td>Pointer type</td>
|
|
||||||
<td><tt>std::iterator_traits<X>::pointer</tt></td>
|
|
||||||
<td>
|
|
||||||
The pointer to the value type, which must be <tt>const T*</tt>.
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
-->
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
<td>Return Category</td>
|
|
||||||
<td><tt>std::return_category<X>::type</tt></td>
|
|
||||||
<td>
|
|
||||||
A type convertible to <tt>std::constant_lvalue_iterator_tag</tt>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<!-- these are not necessary now that we use reference as operator* return type
|
|
||||||
<h3>Valid expressions</h3>
|
|
||||||
|
|
||||||
<Table border>
|
|
||||||
<tr><TH>Name</TH><TH>Expression</TH><TH>Type requirements</TH><TH>Return type</TH></tr>
|
|
||||||
<tr>
|
|
||||||
<td>Dereference</td>
|
|
||||||
<td><tt>*x</tt></td>
|
|
||||||
<td> </td>
|
|
||||||
<td><tt>std::iterator_traits<X>::reference</tt></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Member access</td>
|
|
||||||
<td><tt>x->m</tt></td>
|
|
||||||
<td><tt>T</tt> is a type with a member named <tt>m</tt>.</td>
|
|
||||||
<td>
|
|
||||||
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
-->
|
|
||||||
|
|
||||||
<p>
|
|
||||||
|
|
||||||
<hr>
|
|
||||||
<!--------------------------------------------------------------------------->
|
|
||||||
|
|
||||||
<H3><A NAME="concept:MutableLvalueIterator"></A>
|
|
||||||
Mutable Lvalue Iterator
|
|
||||||
</H3>
|
|
||||||
|
|
||||||
A Mutable Lvalue Iterator is an iterator that dereferences to produce a
|
|
||||||
reference to the pointed-to object. The associated <tt>reference</tt>
|
|
||||||
type is <tt>T&</tt>. Changing the value of or destroying an
|
|
||||||
iterator that models Mutable Lvalue Iterator does not invalidate
|
|
||||||
pointers and references previously obtained from that iterator.
|
|
||||||
|
|
||||||
<h3>Refinement of</h3>
|
|
||||||
|
|
||||||
<a href="#concept:ReadableIterator">Readable Iterator</a>,
|
|
||||||
<a href="#concept:WritableIterator">Writable Iterator</a>,
|
|
||||||
and <a href="#concept:SwappableIterator">Swappable Iterator</a>.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<h3>Associated Types</h3>
|
|
||||||
|
|
||||||
<Table border>
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
<td>Reference type</td>
|
|
||||||
<td><tt>std::iterator_traits<X>::reference</tt></td>
|
|
||||||
<td>The return type of dereferencing the iterator, which must be
|
|
||||||
<tt>T&</tt>.</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<!-- I don't think this is necessary
|
|
||||||
<tr>
|
|
||||||
<td>Pointer type</td>
|
|
||||||
<td><tt>std::iterator_traits<X>::pointer</tt></td>
|
|
||||||
<td>
|
|
||||||
The pointer to the value type, which is <tt>T*</tt>.
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
-->
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
<td>Return Category</td>
|
|
||||||
<td><tt>std::return_category<X>::type</tt></td>
|
|
||||||
<td>
|
|
||||||
A type convertible to <tt>std::mutable_lvalue_iterator_tag</tt>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<!-- no longer needed since the return type is specified as reference in the readable iterator
|
|
||||||
<h3>Valid expressions</h3>
|
|
||||||
|
|
||||||
<Table border>
|
|
||||||
<tr><TH>Name</TH><TH>Expression</TH><TH>Type requirements</TH><TH>Return type</TH></tr>
|
|
||||||
<tr>
|
|
||||||
<td>Dereference</td>
|
|
||||||
<td><tt>*x</tt></td>
|
|
||||||
<td> </td>
|
|
||||||
<td><tt>std::iterator_traits<X>::reference</tt></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Member access</td>
|
|
||||||
<td><tt>x->m</tt></td>
|
|
||||||
<td><tt>T</tt> is a type with a member named <tt>m</tt>.</td>
|
|
||||||
<td>
|
|
||||||
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
-->
|
|
||||||
|
|
||||||
<p>
|
|
||||||
<hr>
|
|
||||||
<!--------------------------------------------------------------------------->
|
|
||||||
|
|
||||||
<H3><A NAME="concept:ForwardTraversalIterator"></A>
|
|
||||||
Forward Traversal Iterator
|
|
||||||
</H3>
|
|
||||||
|
|
||||||
The Forward Iterator is an iterator that can be incremented. Also, it
|
|
||||||
is permissible to make multiple passes through the iterator's range.
|
|
||||||
|
|
||||||
<h3>Refinement of</h3>
|
|
||||||
|
|
||||||
<A href="http://www.boost.org/libs/utility/CopyConstructible.html">Copy Constructible</A>,
|
|
||||||
<A href="http://www.boost.org/libs/utility/Assignable.html">Assignable</A>,
|
|
||||||
<A href="http://www.sgi.com/tech/stl/DefaultConstructible.html">Default Constructible</A>, and
|
|
||||||
<A href="http://www.sgi.com/tech/stl/EqualityComparable.html">Equality Comparable</A>
|
|
||||||
|
|
||||||
|
|
||||||
<h3>Associated types</h3>
|
|
||||||
|
|
||||||
<Table border>
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
<td>Difference Type</td>
|
|
||||||
<td><tt>std::iterator_traits<X>::difference_type</tt></td>
|
|
||||||
<td>
|
|
||||||
A signed integral type used for representing distances
|
|
||||||
between iterators that point into the same range.
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
<tr>
|
|
||||||
<td>Traversal Category</td>
|
|
||||||
<td><tt>std::traversal_category<X>::type</tt></td>
|
|
||||||
<td>
|
|
||||||
A type convertible to <tt>std::forward_traversal_tag</tt>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</Table>
|
|
||||||
|
|
||||||
<h3>Valid expressions</h3>
|
|
||||||
|
|
||||||
<Table border>
|
|
||||||
<tr>
|
|
||||||
<TH>Name</TH><TH>Expression</TH><TH>Type requirements</TH>
|
|
||||||
<TH>Return type</TH>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Preincrement</td>
|
|
||||||
<td><tt>++i</tt></td><td> </td><td><tt>X&</tt></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Postincrement</td>
|
|
||||||
<td><tt>i++</tt></td><td> </td><td>convertible to <tt>const X&</tt></td>
|
|
||||||
</tr>
|
|
||||||
</Table>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
<hr>
|
|
||||||
<!--------------------------------------------------------------------------->
|
|
||||||
|
|
||||||
<H3><A NAME="concept:BidirectionalTraversalIterator"></A>
|
|
||||||
Bidirectional Traversal Iterator
|
|
||||||
</H3>
|
|
||||||
|
|
||||||
An iterator that can be incremented and decremented.
|
|
||||||
|
|
||||||
<h3>Refinement of</h3>
|
|
||||||
|
|
||||||
<a href="#concept:ForwardTraversalIterator">Forward Traversal Iterator</a>
|
|
||||||
|
|
||||||
<h3>Associated types</h3>
|
|
||||||
|
|
||||||
<Table border>
|
|
||||||
<tr>
|
|
||||||
<td>Traversal Category</td>
|
|
||||||
<td><tt>std::traversal_category<X>::type</tt></td>
|
|
||||||
<td>
|
|
||||||
A type convertible to <tt>std::bidirectional_traversal_tag</tt>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</Table>
|
|
||||||
|
|
||||||
<h3>Valid expressions</h3>
|
|
||||||
|
|
||||||
<Table border>
|
|
||||||
<tr>
|
|
||||||
<TH>Name</TH><TH>Expression</TH><TH>Type requirements</TH>
|
|
||||||
<TH>Return type</TH>
|
|
||||||
</tr>
|
|
||||||
<tr><td>Predecrement</td>
|
|
||||||
<td><tt>--i</tt></td><td> </td><td><tt>X&</tt></td>
|
|
||||||
</tr>
|
|
||||||
<tr><td>Postdecrement</td>
|
|
||||||
<td><tt>i--</tt></td><td> </td><td>convertible to <tt>const X&</tt></td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
<hr>
|
|
||||||
<!--------------------------------------------------------------------------->
|
|
||||||
|
|
||||||
<H3><A NAME="concept:RandomAccessTraversalIterator"></A>
|
|
||||||
Random Access Traversal Iterator
|
|
||||||
</H3>
|
|
||||||
|
|
||||||
An iterator that provides constant-time methods for moving forward and
|
|
||||||
backward in arbitrary-sized steps.
|
|
||||||
|
|
||||||
<h3>Refinement of</h3>
|
|
||||||
|
|
||||||
<a href="#concept:BidirectionalTraversalIterator">Bidirectional Traversal Iterator</a> and
|
|
||||||
<A href="http://www.sgi.com/tech/stl/LessThanComparable.html">Less Than Comparable</A> where <tt><</tt> is a total ordering
|
|
||||||
|
|
||||||
<h3>Associated types</h3>
|
|
||||||
|
|
||||||
<Table border>
|
|
||||||
<tr>
|
|
||||||
<td>Traversal Category</td>
|
|
||||||
<td><tt>std::traversal_category<X>::type</tt></td>
|
|
||||||
<td>
|
|
||||||
A type convertible to <tt>std::random_access_traversal_tag</tt>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</Table>
|
|
||||||
|
|
||||||
<h3>Valid expressions</h3>
|
|
||||||
|
|
||||||
<Table border>
|
|
||||||
<tr><TH>Name</TH><TH>Expression</TH><TH>Type requirements</TH>
|
|
||||||
<TH>Return type</TH>
|
|
||||||
</tr>
|
|
||||||
<tr><td>Iterator addition</td>
|
|
||||||
<td><tt>i += n</tt></td><td> </td><td><tt>X&</tt></td>
|
|
||||||
</tr>
|
|
||||||
<tr><td>Iterator addition</td>
|
|
||||||
<td><tt>i + n</tt> or <tt>n + i</tt></td><td> </td><td><tt>X</tt></td>
|
|
||||||
</tr>
|
|
||||||
<tr><td>Iterator subtraction</td>
|
|
||||||
<td><tt>i -= n</tt></td><td> </td><td><tt>X&</tt></td>
|
|
||||||
</tr>
|
|
||||||
<tr><td>Iterator subtraction</td>
|
|
||||||
<td><tt>i - n</tt></td><td> </td><td><tt>X</tt></td>
|
|
||||||
</tr>
|
|
||||||
<tr><td>Difference</td>
|
|
||||||
<td><tt>i - j</tt></td><td> </td><td><tt>std::iterator_traits<X>::difference_type</tt></td>
|
|
||||||
</tr>
|
|
||||||
<tr><td>Element operator</td>
|
|
||||||
<td><tt>i[n]</tt></td>
|
|
||||||
<td><tt>X</tt> must also be a model of
|
|
||||||
<a href="#concept:ReadableIterator">Readable Iterator</a>. </td>
|
|
||||||
<td><tt>std::iterator_traits<X>::reference</tt></td>
|
|
||||||
</tr>
|
|
||||||
<tr><td>Element assignment</td>
|
|
||||||
<td><tt>i[n] = t</tt></td>
|
|
||||||
<td><tt>X</tt> must also be a model of
|
|
||||||
<a href="#concept:WritableIterator">Writable Iterator</a>.</td>
|
|
||||||
<td>unspecified</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
|
|
||||||
<HR>
|
|
||||||
<TABLE>
|
|
||||||
<TR valign=top>
|
|
||||||
<TD nowrap>Copyright © 2000</TD><TD>
|
|
||||||
<A HREF="../../../../people/jeremy_siek.htm">Jeremy Siek</A>, Univ.of Notre Dame (<A HREF="mailto:jsiek@lsc.nd.edu">jsiek@lsc.nd.edu</A>)
|
|
||||||
</TD></TR></TABLE>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@ -1 +0,0 @@
|
|||||||
GNUmakefile
|
|
@ -3,48 +3,52 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="generator" content="Docutils 0.3.6: http://docutils.sourceforge.net/" />
|
<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
|
||||||
<title>Bidirectional Traversal Concept</title>
|
<title>Bidirectional Traversal Concept</title>
|
||||||
<link rel="stylesheet" href="default.css" type="text/css" />
|
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<h1 class="title">Bidirectional Traversal Concept</h1>
|
|
||||||
<div class="document" id="bidirectional-traversal-concept">
|
<div class="document" id="bidirectional-traversal-concept">
|
||||||
<p>A class or built-in type <tt class="literal"><span class="pre">X</span></tt> models the <em>Bidirectional Traversal</em>
|
<h1 class="title">Bidirectional Traversal Concept</h1>
|
||||||
concept if, in addition to <tt class="literal"><span class="pre">X</span></tt> meeting the requirements of Forward
|
|
||||||
|
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
||||||
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
|
<p>A class or built-in type <tt class="docutils literal"><span class="pre">X</span></tt> models the <em>Bidirectional Traversal</em>
|
||||||
|
concept if, in addition to <tt class="docutils literal"><span class="pre">X</span></tt> meeting the requirements of Forward
|
||||||
Traversal Iterator, the following expressions are valid and respect
|
Traversal Iterator, the following expressions are valid and respect
|
||||||
the stated semantics.</p>
|
the stated semantics.</p>
|
||||||
<table border="1" class="table">
|
<table border="1" class="docutils">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col width="38%" />
|
<col width="38%" />
|
||||||
<col width="37%" />
|
<col width="37%" />
|
||||||
<col width="25%" />
|
<col width="25%" />
|
||||||
</colgroup>
|
</colgroup>
|
||||||
<thead valign="bottom">
|
<thead valign="bottom">
|
||||||
<tr><th colspan="3">Bidirectional Traversal Iterator Requirements (in addition to Forward Traversal
|
<tr><th class="head" colspan="3">Bidirectional Traversal Iterator Requirements (in addition to Forward Traversal
|
||||||
Iterator)</th>
|
Iterator)</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><th>Expression</th>
|
<tr><th class="head">Expression</th>
|
||||||
<th>Return Type</th>
|
<th class="head">Return Type</th>
|
||||||
<th>Assertion/Semantics /
|
<th class="head">Assertion/Semantics /
|
||||||
Pre-/Post-condition</th>
|
Pre-/Post-condition</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<tr><td><tt class="literal"><span class="pre">--r</span></tt></td>
|
<tr><td><tt class="docutils literal"><span class="pre">--r</span></tt></td>
|
||||||
<td><tt class="literal"><span class="pre">X&</span></tt></td>
|
<td><tt class="docutils literal"><span class="pre">X&</span></tt></td>
|
||||||
<td>pre: there exists
|
<td>pre: there exists
|
||||||
<tt class="literal"><span class="pre">s</span></tt> such that <tt class="literal"><span class="pre">r</span>
|
<tt class="docutils literal"><span class="pre">s</span></tt> such that <tt class="docutils literal"><span class="pre">r</span>
|
||||||
<span class="pre">==</span> <span class="pre">++s</span></tt>. post:
|
<span class="pre">==</span> <span class="pre">++s</span></tt>. post:
|
||||||
<tt class="literal"><span class="pre">s</span></tt> is
|
<tt class="docutils literal"><span class="pre">s</span></tt> is
|
||||||
dereferenceable.
|
dereferenceable.
|
||||||
<tt class="literal"><span class="pre">--(++r)</span> <span class="pre">==</span> <span class="pre">r</span></tt>.
|
<tt class="docutils literal"><span class="pre">--(++r)</span> <span class="pre">==</span> <span class="pre">r</span></tt>.
|
||||||
<tt class="literal"><span class="pre">--r</span> <span class="pre">==</span> <span class="pre">--s</span></tt>
|
<tt class="docutils literal"><span class="pre">--r</span> <span class="pre">==</span> <span class="pre">--s</span></tt>
|
||||||
implies <tt class="literal"><span class="pre">r</span> <span class="pre">==</span>
|
implies <tt class="docutils literal"><span class="pre">r</span> <span class="pre">==</span>
|
||||||
<span class="pre">s</span></tt>. <tt class="literal"><span class="pre">&r</span> <span class="pre">==</span> <span class="pre">&--r</span></tt>.</td>
|
<span class="pre">s</span></tt>. <tt class="docutils literal"><span class="pre">&r</span> <span class="pre">==</span> <span class="pre">&--r</span></tt>.</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><td><tt class="literal"><span class="pre">r--</span></tt></td>
|
<tr><td><tt class="docutils literal"><span class="pre">r--</span></tt></td>
|
||||||
<td>convertible to <tt class="literal"><span class="pre">const</span> <span class="pre">X&</span></tt></td>
|
<td>convertible to <tt class="docutils literal"><span class="pre">const</span> <span class="pre">X&</span></tt></td>
|
||||||
<td><pre class="first last literal-block">
|
<td><pre class="first last literal-block">
|
||||||
{
|
{
|
||||||
X tmp = r;
|
X tmp = r;
|
||||||
@ -54,18 +58,19 @@ implies <tt class="literal"><span class="pre">r</span> <span class="pre">==</spa
|
|||||||
</pre>
|
</pre>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><td><tt class="literal"><span class="pre">iterator_traversal<X>::type</span></tt></td>
|
<tr><td><tt class="docutils literal"><span class="pre">iterator_traversal<X>::type</span></tt></td>
|
||||||
<td>Convertible to
|
<td>Convertible to
|
||||||
<tt class="literal"><span class="pre">bidirectional_traversal_tag</span></tt></td>
|
<tt class="docutils literal"><span class="pre">bidirectional_traversal_tag</span></tt></td>
|
||||||
<td> </td>
|
<td> </td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<hr class="footer" />
|
|
||||||
<div class="footer">
|
<div class="footer">
|
||||||
<a class="reference" href="BidirectionalTraversal.rst">View document source</a>.
|
<hr class="footer" />
|
||||||
Generated by <a class="reference" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
<a class="reference external" href="BidirectionalTraversal.rst">View document source</a>.
|
||||||
|
Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
4
doc/BidirectionalTraversal.rst
Executable file → Normal file
4
doc/BidirectionalTraversal.rst
Executable file → Normal file
@ -1,3 +1,7 @@
|
|||||||
|
.. Copyright David Abrahams 2006. Distributed under the Boost
|
||||||
|
.. Software License, Version 1.0. (See accompanying
|
||||||
|
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
Bidirectional Traversal Concept
|
Bidirectional Traversal Concept
|
||||||
...............................
|
...............................
|
||||||
|
|
||||||
|
@ -3,60 +3,65 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="generator" content="Docutils 0.3.6: http://docutils.sourceforge.net/" />
|
<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
|
||||||
<title>Forward Traversal Concept</title>
|
<title>Forward Traversal Concept</title>
|
||||||
<link rel="stylesheet" href="default.css" type="text/css" />
|
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<h1 class="title">Forward Traversal Concept</h1>
|
|
||||||
<div class="document" id="forward-traversal-concept">
|
<div class="document" id="forward-traversal-concept">
|
||||||
<p>A class or built-in type <tt class="literal"><span class="pre">X</span></tt> models the <em>Forward Traversal</em>
|
<h1 class="title">Forward Traversal Concept</h1>
|
||||||
concept if, in addition to <tt class="literal"><span class="pre">X</span></tt> meeting the requirements of Default
|
|
||||||
|
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
||||||
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
|
<p>A class or built-in type <tt class="docutils literal"><span class="pre">X</span></tt> models the <em>Forward Traversal</em>
|
||||||
|
concept if, in addition to <tt class="docutils literal"><span class="pre">X</span></tt> meeting the requirements of Default
|
||||||
Constructible and Single Pass Iterator, the following expressions are
|
Constructible and Single Pass Iterator, the following expressions are
|
||||||
valid and respect the stated semantics.</p>
|
valid and respect the stated semantics.</p>
|
||||||
<table border="1" class="table">
|
<table border="1" class="docutils">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col width="38%" />
|
<col width="38%" />
|
||||||
<col width="34%" />
|
<col width="34%" />
|
||||||
<col width="27%" />
|
<col width="27%" />
|
||||||
</colgroup>
|
</colgroup>
|
||||||
<thead valign="bottom">
|
<thead valign="bottom">
|
||||||
<tr><th colspan="3">Forward Traversal Iterator Requirements (in addition to Default Constructible and Single Pass Iterator)</th>
|
<tr><th class="head" colspan="3">Forward Traversal Iterator Requirements (in addition to Default Constructible and Single Pass Iterator)</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><th>Expression</th>
|
<tr><th class="head">Expression</th>
|
||||||
<th>Return Type</th>
|
<th class="head">Return Type</th>
|
||||||
<th>Assertion/Note</th>
|
<th class="head">Assertion/Note</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<tr><td><tt class="literal"><span class="pre">X</span> <span class="pre">u;</span></tt></td>
|
<tr><td><tt class="docutils literal"><span class="pre">X</span> <span class="pre">u;</span></tt></td>
|
||||||
<td><tt class="literal"><span class="pre">X&</span></tt></td>
|
<td><tt class="docutils literal"><span class="pre">X&</span></tt></td>
|
||||||
<td>note: <tt class="literal"><span class="pre">u</span></tt> may have a
|
<td>note: <tt class="docutils literal"><span class="pre">u</span></tt> may have a
|
||||||
singular value.</td>
|
singular value.</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><td><tt class="literal"><span class="pre">++r</span></tt></td>
|
<tr><td><tt class="docutils literal"><span class="pre">++r</span></tt></td>
|
||||||
<td><tt class="literal"><span class="pre">X&</span></tt></td>
|
<td><tt class="docutils literal"><span class="pre">X&</span></tt></td>
|
||||||
<td><tt class="literal"><span class="pre">r</span> <span class="pre">==</span> <span class="pre">s</span></tt> and <tt class="literal"><span class="pre">r</span></tt> is
|
<td><tt class="docutils literal"><span class="pre">r</span> <span class="pre">==</span> <span class="pre">s</span></tt> and <tt class="docutils literal"><span class="pre">r</span></tt> is
|
||||||
dereferenceable implies
|
dereferenceable implies
|
||||||
<tt class="literal"><span class="pre">++r</span> <span class="pre">==</span> <span class="pre">++s.</span></tt></td>
|
<tt class="docutils literal"><span class="pre">++r</span> <span class="pre">==</span> <span class="pre">++s.</span></tt></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><td><tt class="literal"><span class="pre">iterator_traits<X>::difference_type</span></tt></td>
|
<tr><td><tt class="docutils literal"><span class="pre">iterator_traits<X>::difference_type</span></tt></td>
|
||||||
<td>A signed integral type representing
|
<td>A signed integral type representing
|
||||||
the distance between iterators</td>
|
the distance between iterators</td>
|
||||||
<td> </td>
|
<td> </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><td><tt class="literal"><span class="pre">iterator_traversal<X>::type</span></tt></td>
|
<tr><td><tt class="docutils literal"><span class="pre">iterator_traversal<X>::type</span></tt></td>
|
||||||
<td>Convertible to
|
<td>Convertible to
|
||||||
<tt class="literal"><span class="pre">forward_traversal_tag</span></tt></td>
|
<tt class="docutils literal"><span class="pre">forward_traversal_tag</span></tt></td>
|
||||||
<td> </td>
|
<td> </td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<hr class="footer" />
|
|
||||||
<div class="footer">
|
<div class="footer">
|
||||||
<a class="reference" href="ForwardTraversal.rst">View document source</a>.
|
<hr class="footer" />
|
||||||
Generated by <a class="reference" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
<a class="reference external" href="ForwardTraversal.rst">View document source</a>.
|
||||||
|
Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
4
doc/ForwardTraversal.rst
Executable file → Normal file
4
doc/ForwardTraversal.rst
Executable file → Normal file
@ -1,3 +1,7 @@
|
|||||||
|
.. Copyright David Abrahams 2006. Distributed under the Boost
|
||||||
|
.. Software License, Version 1.0. (See accompanying
|
||||||
|
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
Forward Traversal Concept
|
Forward Traversal Concept
|
||||||
.........................
|
.........................
|
||||||
|
|
||||||
|
0
doc/GNUmakefile
Executable file → Normal file
0
doc/GNUmakefile
Executable file → Normal file
@ -3,38 +3,42 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="generator" content="Docutils 0.3.6: http://docutils.sourceforge.net/" />
|
<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
|
||||||
<title>Incrementable Iterator Concept</title>
|
<title>Incrementable Iterator Concept</title>
|
||||||
<link rel="stylesheet" href="default.css" type="text/css" />
|
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<h1 class="title">Incrementable Iterator Concept</h1>
|
|
||||||
<div class="document" id="incrementable-iterator-concept">
|
<div class="document" id="incrementable-iterator-concept">
|
||||||
<p>A class or built-in type <tt class="literal"><span class="pre">X</span></tt> models the <em>Incrementable Iterator</em>
|
<h1 class="title">Incrementable Iterator Concept</h1>
|
||||||
concept if, in addition to <tt class="literal"><span class="pre">X</span></tt> being Assignable and Copy
|
|
||||||
|
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
||||||
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
|
<p>A class or built-in type <tt class="docutils literal"><span class="pre">X</span></tt> models the <em>Incrementable Iterator</em>
|
||||||
|
concept if, in addition to <tt class="docutils literal"><span class="pre">X</span></tt> being Assignable and Copy
|
||||||
Constructible, the following expressions are valid and respect the
|
Constructible, the following expressions are valid and respect the
|
||||||
stated semantics.</p>
|
stated semantics.</p>
|
||||||
<table border="1" class="table">
|
<table border="1" class="docutils">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col width="39%" />
|
<col width="39%" />
|
||||||
<col width="37%" />
|
<col width="37%" />
|
||||||
<col width="24%" />
|
<col width="24%" />
|
||||||
</colgroup>
|
</colgroup>
|
||||||
<thead valign="bottom">
|
<thead valign="bottom">
|
||||||
<tr><th colspan="3">Incrementable Iterator Requirements (in addition to Assignable, Copy Constructible)</th>
|
<tr><th class="head" colspan="3">Incrementable Iterator Requirements (in addition to Assignable, Copy Constructible)</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><th>Expression</th>
|
<tr><th class="head">Expression</th>
|
||||||
<th>Return Type</th>
|
<th class="head">Return Type</th>
|
||||||
<th>Assertion/Semantics</th>
|
<th class="head">Assertion/Semantics</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<tr><td><tt class="literal"><span class="pre">++r</span></tt></td>
|
<tr><td><tt class="docutils literal"><span class="pre">++r</span></tt></td>
|
||||||
<td><tt class="literal"><span class="pre">X&</span></tt></td>
|
<td><tt class="docutils literal"><span class="pre">X&</span></tt></td>
|
||||||
<td><tt class="literal"><span class="pre">&r</span> <span class="pre">==</span> <span class="pre">&++r</span></tt></td>
|
<td><tt class="docutils literal"><span class="pre">&r</span> <span class="pre">==</span> <span class="pre">&++r</span></tt></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><td><tt class="literal"><span class="pre">r++</span></tt></td>
|
<tr><td><tt class="docutils literal"><span class="pre">r++</span></tt></td>
|
||||||
<td><tt class="literal"><span class="pre">X</span></tt></td>
|
<td><tt class="docutils literal"><span class="pre">X</span></tt></td>
|
||||||
<td><pre class="first last literal-block">
|
<td><pre class="first last literal-block">
|
||||||
{
|
{
|
||||||
X tmp = r;
|
X tmp = r;
|
||||||
@ -44,18 +48,19 @@ stated semantics.</p>
|
|||||||
</pre>
|
</pre>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><td><tt class="literal"><span class="pre">iterator_traversal<X>::type</span></tt></td>
|
<tr><td><tt class="docutils literal"><span class="pre">iterator_traversal<X>::type</span></tt></td>
|
||||||
<td>Convertible to
|
<td>Convertible to
|
||||||
<tt class="literal"><span class="pre">incrementable_traversal_tag</span></tt></td>
|
<tt class="docutils literal"><span class="pre">incrementable_traversal_tag</span></tt></td>
|
||||||
<td> </td>
|
<td> </td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<hr class="footer" />
|
|
||||||
<div class="footer">
|
<div class="footer">
|
||||||
<a class="reference" href="IncrementableIterator.rst">View document source</a>.
|
<hr class="footer" />
|
||||||
Generated by <a class="reference" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
<a class="reference external" href="IncrementableIterator.rst">View document source</a>.
|
||||||
|
Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
4
doc/IncrementableIterator.rst
Executable file → Normal file
4
doc/IncrementableIterator.rst
Executable file → Normal file
@ -1,3 +1,7 @@
|
|||||||
|
.. Copyright David Abrahams 2006. Distributed under the Boost
|
||||||
|
.. Software License, Version 1.0. (See accompanying
|
||||||
|
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
Incrementable Iterator Concept
|
Incrementable Iterator Concept
|
||||||
..............................
|
..............................
|
||||||
|
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
.. Copyright David Abrahams 2006. Distributed under the Boost
|
||||||
|
.. Software License, Version 1.0. (See accompanying
|
||||||
|
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
Interoperable Iterator Concept
|
Interoperable Iterator Concept
|
||||||
..............................
|
..............................
|
||||||
|
|
||||||
|
@ -3,49 +3,54 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="generator" content="Docutils 0.3.6: http://docutils.sourceforge.net/" />
|
<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
|
||||||
<title>Lvalue Iterator Concept</title>
|
<title>Lvalue Iterator Concept</title>
|
||||||
<link rel="stylesheet" href="default.css" type="text/css" />
|
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<h1 class="title">Lvalue Iterator Concept</h1>
|
|
||||||
<div class="document" id="lvalue-iterator-concept">
|
<div class="document" id="lvalue-iterator-concept">
|
||||||
|
<h1 class="title">Lvalue Iterator Concept</h1>
|
||||||
|
|
||||||
|
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
||||||
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
<p>The <em>Lvalue Iterator</em> concept adds the requirement that the return
|
<p>The <em>Lvalue Iterator</em> concept adds the requirement that the return
|
||||||
type of <tt class="literal"><span class="pre">operator*</span></tt> type be a reference to the value type of the
|
type of <tt class="docutils literal"><span class="pre">operator*</span></tt> type be a reference to the value type of the
|
||||||
iterator.</p>
|
iterator.</p>
|
||||||
<table border="1" class="table">
|
<table border="1" class="docutils">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col width="22%" />
|
<col width="22%" />
|
||||||
<col width="19%" />
|
<col width="19%" />
|
||||||
<col width="59%" />
|
<col width="59%" />
|
||||||
</colgroup>
|
</colgroup>
|
||||||
<thead valign="bottom">
|
<thead valign="bottom">
|
||||||
<tr><th colspan="3">Lvalue Iterator Requirements</th>
|
<tr><th class="head" colspan="3">Lvalue Iterator Requirements</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><th>Expression</th>
|
<tr><th class="head">Expression</th>
|
||||||
<th>Return Type</th>
|
<th class="head">Return Type</th>
|
||||||
<th>Note/Assertion</th>
|
<th class="head">Note/Assertion</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<tr><td><tt class="literal"><span class="pre">*a</span></tt></td>
|
<tr><td><tt class="docutils literal"><span class="pre">*a</span></tt></td>
|
||||||
<td><tt class="literal"><span class="pre">T&</span></tt></td>
|
<td><tt class="docutils literal"><span class="pre">T&</span></tt></td>
|
||||||
<td><tt class="literal"><span class="pre">T</span></tt> is <em>cv</em>
|
<td><tt class="docutils literal"><span class="pre">T</span></tt> is <em>cv</em>
|
||||||
<tt class="literal"><span class="pre">iterator_traits<X>::value_type</span></tt>
|
<tt class="docutils literal"><span class="pre">iterator_traits<X>::value_type</span></tt>
|
||||||
where <em>cv</em> is an optional
|
where <em>cv</em> is an optional
|
||||||
cv-qualification.
|
cv-qualification.
|
||||||
pre: <tt class="literal"><span class="pre">a</span></tt> is
|
pre: <tt class="docutils literal"><span class="pre">a</span></tt> is
|
||||||
dereferenceable. If <tt class="literal"><span class="pre">a</span>
|
dereferenceable. If <tt class="docutils literal"><span class="pre">a</span>
|
||||||
<span class="pre">==</span> <span class="pre">b</span></tt> then <tt class="literal"><span class="pre">*a</span></tt> is
|
<span class="pre">==</span> <span class="pre">b</span></tt> then <tt class="docutils literal"><span class="pre">*a</span></tt> is
|
||||||
equivalent to <tt class="literal"><span class="pre">*b</span></tt>.</td>
|
equivalent to <tt class="docutils literal"><span class="pre">*b</span></tt>.</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<hr class="footer" />
|
|
||||||
<div class="footer">
|
<div class="footer">
|
||||||
<a class="reference" href="LvalueIterator.rst">View document source</a>.
|
<hr class="footer" />
|
||||||
Generated by <a class="reference" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
<a class="reference external" href="LvalueIterator.rst">View document source</a>.
|
||||||
|
Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
4
doc/LvalueIterator.rst
Executable file → Normal file
4
doc/LvalueIterator.rst
Executable file → Normal file
@ -1,3 +1,7 @@
|
|||||||
|
.. Copyright David Abrahams 2006. Distributed under the Boost
|
||||||
|
.. Software License, Version 1.0. (See accompanying
|
||||||
|
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
Lvalue Iterator Concept
|
Lvalue Iterator Concept
|
||||||
.......................
|
.......................
|
||||||
|
|
||||||
|
@ -3,19 +3,23 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="generator" content="Docutils 0.3.6: http://docutils.sourceforge.net/" />
|
<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
|
||||||
<title>Random Access Traversal Concept</title>
|
<title>Random Access Traversal Concept</title>
|
||||||
<link rel="stylesheet" href="default.css" type="text/css" />
|
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<h1 class="title">Random Access Traversal Concept</h1>
|
|
||||||
<div class="document" id="random-access-traversal-concept">
|
<div class="document" id="random-access-traversal-concept">
|
||||||
<p>A class or built-in type <tt class="literal"><span class="pre">X</span></tt> models the <em>Random Access Traversal</em>
|
<h1 class="title">Random Access Traversal Concept</h1>
|
||||||
|
|
||||||
|
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
||||||
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
|
<p>A class or built-in type <tt class="docutils literal"><span class="pre">X</span></tt> models the <em>Random Access Traversal</em>
|
||||||
concept if the following expressions are valid and respect the stated
|
concept if the following expressions are valid and respect the stated
|
||||||
semantics. In the table below, <tt class="literal"><span class="pre">Distance</span></tt> is
|
semantics. In the table below, <tt class="docutils literal"><span class="pre">Distance</span></tt> is
|
||||||
<tt class="literal"><span class="pre">iterator_traits<X>::difference_type</span></tt> and <tt class="literal"><span class="pre">n</span></tt> represents a
|
<tt class="docutils literal"><span class="pre">iterator_traits<X>::difference_type</span></tt> and <tt class="docutils literal"><span class="pre">n</span></tt> represents a
|
||||||
constant object of type <tt class="literal"><span class="pre">Distance</span></tt>.</p>
|
constant object of type <tt class="docutils literal"><span class="pre">Distance</span></tt>.</p>
|
||||||
<table border="1" class="table">
|
<table border="1" class="docutils">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col width="28%" />
|
<col width="28%" />
|
||||||
<col width="30%" />
|
<col width="30%" />
|
||||||
@ -23,18 +27,18 @@ constant object of type <tt class="literal"><span class="pre">Distance</span></t
|
|||||||
<col width="20%" />
|
<col width="20%" />
|
||||||
</colgroup>
|
</colgroup>
|
||||||
<thead valign="bottom">
|
<thead valign="bottom">
|
||||||
<tr><th colspan="4">Random Access Traversal Iterator Requirements (in addition to Bidirectional Traversal)</th>
|
<tr><th class="head" colspan="4">Random Access Traversal Iterator Requirements (in addition to Bidirectional Traversal)</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><th>Expression</th>
|
<tr><th class="head">Expression</th>
|
||||||
<th>Return Type</th>
|
<th class="head">Return Type</th>
|
||||||
<th>Operational Semantics</th>
|
<th class="head">Operational Semantics</th>
|
||||||
<th>Assertion/
|
<th class="head">Assertion/
|
||||||
Precondition</th>
|
Precondition</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<tr><td><tt class="literal"><span class="pre">r</span> <span class="pre">+=</span> <span class="pre">n</span></tt></td>
|
<tr><td><tt class="docutils literal"><span class="pre">r</span> <span class="pre">+=</span> <span class="pre">n</span></tt></td>
|
||||||
<td><tt class="literal"><span class="pre">X&</span></tt></td>
|
<td><tt class="docutils literal"><span class="pre">X&</span></tt></td>
|
||||||
<td><pre class="first last literal-block">
|
<td><pre class="first last literal-block">
|
||||||
{
|
{
|
||||||
Distance m = n;
|
Distance m = n;
|
||||||
@ -50,80 +54,81 @@ Precondition</th>
|
|||||||
</td>
|
</td>
|
||||||
<td> </td>
|
<td> </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><td><tt class="literal"><span class="pre">a</span> <span class="pre">+</span> <span class="pre">n</span></tt>, <tt class="literal"><span class="pre">n</span> <span class="pre">+</span> <span class="pre">a</span></tt></td>
|
<tr><td><tt class="docutils literal"><span class="pre">a</span> <span class="pre">+</span> <span class="pre">n</span></tt>, <tt class="docutils literal"><span class="pre">n</span> <span class="pre">+</span> <span class="pre">a</span></tt></td>
|
||||||
<td><tt class="literal"><span class="pre">X</span></tt></td>
|
<td><tt class="docutils literal"><span class="pre">X</span></tt></td>
|
||||||
<td><tt class="literal"><span class="pre">{</span> <span class="pre">X</span> <span class="pre">tmp</span> <span class="pre">=</span> <span class="pre">a;</span> <span class="pre">return</span> <span class="pre">tmp</span>
|
<td><tt class="docutils literal"><span class="pre">{</span> <span class="pre">X</span> <span class="pre">tmp</span> <span class="pre">=</span> <span class="pre">a;</span> <span class="pre">return</span> <span class="pre">tmp</span>
|
||||||
<span class="pre">+=</span> <span class="pre">n;</span> <span class="pre">}</span></tt></td>
|
<span class="pre">+=</span> <span class="pre">n;</span> <span class="pre">}</span></tt></td>
|
||||||
<td> </td>
|
<td> </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><td><tt class="literal"><span class="pre">r</span> <span class="pre">-=</span> <span class="pre">n</span></tt></td>
|
<tr><td><tt class="docutils literal"><span class="pre">r</span> <span class="pre">-=</span> <span class="pre">n</span></tt></td>
|
||||||
<td><tt class="literal"><span class="pre">X&</span></tt></td>
|
<td><tt class="docutils literal"><span class="pre">X&</span></tt></td>
|
||||||
<td><tt class="literal"><span class="pre">return</span> <span class="pre">r</span> <span class="pre">+=</span> <span class="pre">-n</span></tt></td>
|
<td><tt class="docutils literal"><span class="pre">return</span> <span class="pre">r</span> <span class="pre">+=</span> <span class="pre">-n</span></tt></td>
|
||||||
<td> </td>
|
<td> </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><td><tt class="literal"><span class="pre">a</span> <span class="pre">-</span> <span class="pre">n</span></tt></td>
|
<tr><td><tt class="docutils literal"><span class="pre">a</span> <span class="pre">-</span> <span class="pre">n</span></tt></td>
|
||||||
<td><tt class="literal"><span class="pre">X</span></tt></td>
|
<td><tt class="docutils literal"><span class="pre">X</span></tt></td>
|
||||||
<td><tt class="literal"><span class="pre">{</span> <span class="pre">X</span> <span class="pre">tmp</span> <span class="pre">=</span> <span class="pre">a;</span> <span class="pre">return</span> <span class="pre">tmp</span>
|
<td><tt class="docutils literal"><span class="pre">{</span> <span class="pre">X</span> <span class="pre">tmp</span> <span class="pre">=</span> <span class="pre">a;</span> <span class="pre">return</span> <span class="pre">tmp</span>
|
||||||
<span class="pre">-=</span> <span class="pre">n;</span> <span class="pre">}</span></tt></td>
|
<span class="pre">-=</span> <span class="pre">n;</span> <span class="pre">}</span></tt></td>
|
||||||
<td> </td>
|
<td> </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><td><tt class="literal"><span class="pre">b</span> <span class="pre">-</span> <span class="pre">a</span></tt></td>
|
<tr><td><tt class="docutils literal"><span class="pre">b</span> <span class="pre">-</span> <span class="pre">a</span></tt></td>
|
||||||
<td><tt class="literal"><span class="pre">Distance</span></tt></td>
|
<td><tt class="docutils literal"><span class="pre">Distance</span></tt></td>
|
||||||
<td><tt class="literal"><span class="pre">a</span> <span class="pre"><</span> <span class="pre">b</span> <span class="pre">?</span> <span class="pre">distance(a,b)</span>
|
<td><tt class="docutils literal"><span class="pre">a</span> <span class="pre"><</span> <span class="pre">b</span> <span class="pre">?</span> <span class="pre">distance(a,b)</span>
|
||||||
<span class="pre">:</span> <span class="pre">-distance(b,a)</span></tt></td>
|
<span class="pre">:</span> <span class="pre">-distance(b,a)</span></tt></td>
|
||||||
<td>pre: there exists a
|
<td>pre: there exists a
|
||||||
value <tt class="literal"><span class="pre">n</span></tt> of
|
value <tt class="docutils literal"><span class="pre">n</span></tt> of
|
||||||
<tt class="literal"><span class="pre">Distance</span></tt> such that
|
<tt class="docutils literal"><span class="pre">Distance</span></tt> such that
|
||||||
<tt class="literal"><span class="pre">a</span> <span class="pre">+</span> <span class="pre">n</span> <span class="pre">==</span> <span class="pre">b</span></tt>. <tt class="literal"><span class="pre">b</span>
|
<tt class="docutils literal"><span class="pre">a</span> <span class="pre">+</span> <span class="pre">n</span> <span class="pre">==</span> <span class="pre">b</span></tt>. <tt class="docutils literal"><span class="pre">b</span>
|
||||||
<span class="pre">==</span> <span class="pre">a</span> <span class="pre">+</span> <span class="pre">(b</span> <span class="pre">-</span> <span class="pre">a)</span></tt>.</td>
|
<span class="pre">==</span> <span class="pre">a</span> <span class="pre">+</span> <span class="pre">(b</span> <span class="pre">-</span> <span class="pre">a)</span></tt>.</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><td><tt class="literal"><span class="pre">a[n]</span></tt></td>
|
<tr><td><tt class="docutils literal"><span class="pre">a[n]</span></tt></td>
|
||||||
<td>convertible to T</td>
|
<td>convertible to T</td>
|
||||||
<td><tt class="literal"><span class="pre">*(a</span> <span class="pre">+</span> <span class="pre">n)</span></tt></td>
|
<td><tt class="docutils literal"><span class="pre">*(a</span> <span class="pre">+</span> <span class="pre">n)</span></tt></td>
|
||||||
<td>pre: a is a <em>Readable
|
<td>pre: a is a <em>Readable
|
||||||
Iterator</em></td>
|
Iterator</em></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><td><tt class="literal"><span class="pre">a[n]</span> <span class="pre">=</span> <span class="pre">v</span></tt></td>
|
<tr><td><tt class="docutils literal"><span class="pre">a[n]</span> <span class="pre">=</span> <span class="pre">v</span></tt></td>
|
||||||
<td>convertible to T</td>
|
<td>convertible to T</td>
|
||||||
<td><tt class="literal"><span class="pre">*(a</span> <span class="pre">+</span> <span class="pre">n)</span> <span class="pre">=</span> <span class="pre">v</span></tt></td>
|
<td><tt class="docutils literal"><span class="pre">*(a</span> <span class="pre">+</span> <span class="pre">n)</span> <span class="pre">=</span> <span class="pre">v</span></tt></td>
|
||||||
<td>pre: a is a <em>Writable
|
<td>pre: a is a <em>Writable
|
||||||
iterator</em></td>
|
iterator</em></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><td><tt class="literal"><span class="pre">a</span> <span class="pre"><</span> <span class="pre">b</span></tt></td>
|
<tr><td><tt class="docutils literal"><span class="pre">a</span> <span class="pre"><</span> <span class="pre">b</span></tt></td>
|
||||||
<td>convertible to <tt class="literal"><span class="pre">bool</span></tt></td>
|
<td>convertible to <tt class="docutils literal"><span class="pre">bool</span></tt></td>
|
||||||
<td><tt class="literal"><span class="pre">b</span> <span class="pre">-</span> <span class="pre">a</span> <span class="pre">></span> <span class="pre">0</span></tt></td>
|
<td><tt class="docutils literal"><span class="pre">b</span> <span class="pre">-</span> <span class="pre">a</span> <span class="pre">></span> <span class="pre">0</span></tt></td>
|
||||||
<td><tt class="literal"><span class="pre"><</span></tt> is a total
|
<td><tt class="docutils literal"><span class="pre"><</span></tt> is a total
|
||||||
ordering relation</td>
|
ordering relation</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><td><tt class="literal"><span class="pre">a</span> <span class="pre">></span> <span class="pre">b</span></tt></td>
|
<tr><td><tt class="docutils literal"><span class="pre">a</span> <span class="pre">></span> <span class="pre">b</span></tt></td>
|
||||||
<td>convertible to <tt class="literal"><span class="pre">bool</span></tt></td>
|
<td>convertible to <tt class="docutils literal"><span class="pre">bool</span></tt></td>
|
||||||
<td><tt class="literal"><span class="pre">b</span> <span class="pre"><</span> <span class="pre">a</span></tt></td>
|
<td><tt class="docutils literal"><span class="pre">b</span> <span class="pre"><</span> <span class="pre">a</span></tt></td>
|
||||||
<td><tt class="literal"><span class="pre">></span></tt> is a total
|
<td><tt class="docutils literal"><span class="pre">></span></tt> is a total
|
||||||
ordering relation</td>
|
ordering relation</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><td><tt class="literal"><span class="pre">a</span> <span class="pre">>=</span> <span class="pre">b</span></tt></td>
|
<tr><td><tt class="docutils literal"><span class="pre">a</span> <span class="pre">>=</span> <span class="pre">b</span></tt></td>
|
||||||
<td>convertible to <tt class="literal"><span class="pre">bool</span></tt></td>
|
<td>convertible to <tt class="docutils literal"><span class="pre">bool</span></tt></td>
|
||||||
<td><tt class="literal"><span class="pre">!(a</span> <span class="pre"><</span> <span class="pre">b)</span></tt></td>
|
<td><tt class="docutils literal"><span class="pre">!(a</span> <span class="pre"><</span> <span class="pre">b)</span></tt></td>
|
||||||
<td> </td>
|
<td> </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><td><tt class="literal"><span class="pre">a</span> <span class="pre"><=</span> <span class="pre">b</span></tt></td>
|
<tr><td><tt class="docutils literal"><span class="pre">a</span> <span class="pre"><=</span> <span class="pre">b</span></tt></td>
|
||||||
<td>convertible to <tt class="literal"><span class="pre">bool</span></tt></td>
|
<td>convertible to <tt class="docutils literal"><span class="pre">bool</span></tt></td>
|
||||||
<td><tt class="literal"><span class="pre">!(a</span> <span class="pre">></span> <span class="pre">b)</span></tt></td>
|
<td><tt class="docutils literal"><span class="pre">!(a</span> <span class="pre">></span> <span class="pre">b)</span></tt></td>
|
||||||
<td> </td>
|
<td> </td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><td><tt class="literal"><span class="pre">iterator_traversal<X>::type</span></tt></td>
|
<tr><td><tt class="docutils literal"><span class="pre">iterator_traversal<X>::type</span></tt></td>
|
||||||
<td>Convertible to
|
<td>Convertible to
|
||||||
<tt class="literal"><span class="pre">random_access_traversal_tag</span></tt></td>
|
<tt class="docutils literal"><span class="pre">random_access_traversal_tag</span></tt></td>
|
||||||
<td> </td>
|
<td> </td>
|
||||||
<td> </td>
|
<td> </td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<hr class="footer" />
|
|
||||||
<div class="footer">
|
<div class="footer">
|
||||||
<a class="reference" href="RandomAccessTraversal.rst">View document source</a>.
|
<hr class="footer" />
|
||||||
Generated by <a class="reference" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
<a class="reference external" href="RandomAccessTraversal.rst">View document source</a>.
|
||||||
|
Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
.. Copyright David Abrahams 2006. Distributed under the Boost
|
||||||
|
.. Software License, Version 1.0. (See accompanying
|
||||||
|
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
Random Access Traversal Concept
|
Random Access Traversal Concept
|
||||||
...............................
|
...............................
|
||||||
|
|
||||||
|
@ -3,57 +3,62 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="generator" content="Docutils 0.3.6: http://docutils.sourceforge.net/" />
|
<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
|
||||||
<title>Readable Iterator Concept</title>
|
<title>Readable Iterator Concept</title>
|
||||||
<link rel="stylesheet" href="default.css" type="text/css" />
|
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<h1 class="title">Readable Iterator Concept</h1>
|
|
||||||
<div class="document" id="readable-iterator-concept">
|
<div class="document" id="readable-iterator-concept">
|
||||||
<p>A class or built-in type <tt class="literal"><span class="pre">X</span></tt> models the <em>Readable Iterator</em> concept
|
<h1 class="title">Readable Iterator Concept</h1>
|
||||||
for value type <tt class="literal"><span class="pre">T</span></tt> if, in addition to <tt class="literal"><span class="pre">X</span></tt> being Assignable and
|
|
||||||
|
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
||||||
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
|
<p>A class or built-in type <tt class="docutils literal"><span class="pre">X</span></tt> models the <em>Readable Iterator</em> concept
|
||||||
|
for value type <tt class="docutils literal"><span class="pre">T</span></tt> if, in addition to <tt class="docutils literal"><span class="pre">X</span></tt> being Assignable and
|
||||||
Copy Constructible, the following expressions are valid and respect
|
Copy Constructible, the following expressions are valid and respect
|
||||||
the stated semantics. <tt class="literal"><span class="pre">U</span></tt> is the type of any specified member of
|
the stated semantics. <tt class="docutils literal"><span class="pre">U</span></tt> is the type of any specified member of
|
||||||
type <tt class="literal"><span class="pre">T</span></tt>.</p>
|
type <tt class="docutils literal"><span class="pre">T</span></tt>.</p>
|
||||||
<table border="1" class="table">
|
<table border="1" class="docutils">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col width="28%" />
|
<col width="28%" />
|
||||||
<col width="20%" />
|
<col width="20%" />
|
||||||
<col width="52%" />
|
<col width="52%" />
|
||||||
</colgroup>
|
</colgroup>
|
||||||
<thead valign="bottom">
|
<thead valign="bottom">
|
||||||
<tr><th colspan="3">Readable Iterator Requirements (in addition to Assignable and Copy Constructible)</th>
|
<tr><th class="head" colspan="3">Readable Iterator Requirements (in addition to Assignable and Copy Constructible)</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><th>Expression</th>
|
<tr><th class="head">Expression</th>
|
||||||
<th>Return Type</th>
|
<th class="head">Return Type</th>
|
||||||
<th>Note/Precondition</th>
|
<th class="head">Note/Precondition</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<tr><td><tt class="literal"><span class="pre">iterator_traits<X>::value_type</span></tt></td>
|
<tr><td><tt class="docutils literal"><span class="pre">iterator_traits<X>::value_type</span></tt></td>
|
||||||
<td><tt class="literal"><span class="pre">T</span></tt></td>
|
<td><tt class="docutils literal"><span class="pre">T</span></tt></td>
|
||||||
<td>Any non-reference,
|
<td>Any non-reference,
|
||||||
non-cv-qualified type</td>
|
non-cv-qualified type</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><td><tt class="literal"><span class="pre">*a</span></tt></td>
|
<tr><td><tt class="docutils literal"><span class="pre">*a</span></tt></td>
|
||||||
<td>Convertible to <tt class="literal"><span class="pre">T</span></tt></td>
|
<td>Convertible to <tt class="docutils literal"><span class="pre">T</span></tt></td>
|
||||||
<td><dl class="first last">
|
<td><dl class="first last docutils">
|
||||||
<dt>pre: <tt class="literal"><span class="pre">a</span></tt> is dereferenceable. If <tt class="literal"><span class="pre">a</span> <span class="pre">==</span> <span class="pre">b</span></tt> then <tt class="literal"><span class="pre">*a</span></tt></dt>
|
<dt>pre: <tt class="docutils literal"><span class="pre">a</span></tt> is dereferenceable. If <tt class="docutils literal"><span class="pre">a</span> <span class="pre">==</span> <span class="pre">b</span></tt> then <tt class="docutils literal"><span class="pre">*a</span></tt></dt>
|
||||||
<dd>is equivalent to <tt class="literal"><span class="pre">*b</span></tt>.</dd>
|
<dd>is equivalent to <tt class="docutils literal"><span class="pre">*b</span></tt>.</dd>
|
||||||
</dl>
|
</dl>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><td><tt class="literal"><span class="pre">a->m</span></tt></td>
|
<tr><td><tt class="docutils literal"><span class="pre">a->m</span></tt></td>
|
||||||
<td><tt class="literal"><span class="pre">U&</span></tt></td>
|
<td><tt class="docutils literal"><span class="pre">U&</span></tt></td>
|
||||||
<td>pre: <tt class="literal"><span class="pre">pre:</span> <span class="pre">(*a).m</span></tt> is well-defined. Equivalent to <tt class="literal"><span class="pre">(*a).m</span></tt>.</td>
|
<td>pre: <tt class="docutils literal"><span class="pre">pre:</span> <span class="pre">(*a).m</span></tt> is well-defined. Equivalent to <tt class="docutils literal"><span class="pre">(*a).m</span></tt>.</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<hr class="footer" />
|
|
||||||
<div class="footer">
|
<div class="footer">
|
||||||
<a class="reference" href="ReadableIterator.rst">View document source</a>.
|
<hr class="footer" />
|
||||||
Generated by <a class="reference" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
<a class="reference external" href="ReadableIterator.rst">View document source</a>.
|
||||||
|
Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
3
doc/ReadableIterator.rst
Executable file → Normal file
3
doc/ReadableIterator.rst
Executable file → Normal file
@ -1,3 +1,6 @@
|
|||||||
|
.. Copyright David Abrahams 2006. Distributed under the Boost
|
||||||
|
.. Software License, Version 1.0. (See accompanying
|
||||||
|
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
Readable Iterator Concept
|
Readable Iterator Concept
|
||||||
.........................
|
.........................
|
||||||
|
@ -3,61 +3,66 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="generator" content="Docutils 0.3.6: http://docutils.sourceforge.net/" />
|
<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
|
||||||
<title>Single Pass Iterator Concept</title>
|
<title>Single Pass Iterator Concept</title>
|
||||||
<link rel="stylesheet" href="default.css" type="text/css" />
|
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<h1 class="title">Single Pass Iterator Concept</h1>
|
|
||||||
<div class="document" id="single-pass-iterator-concept">
|
<div class="document" id="single-pass-iterator-concept">
|
||||||
<p>A class or built-in type <tt class="literal"><span class="pre">X</span></tt> models the <em>Single Pass Iterator</em>
|
<h1 class="title">Single Pass Iterator Concept</h1>
|
||||||
|
|
||||||
|
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
||||||
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
|
<p>A class or built-in type <tt class="docutils literal"><span class="pre">X</span></tt> models the <em>Single Pass Iterator</em>
|
||||||
concept if the following expressions are valid and respect the stated
|
concept if the following expressions are valid and respect the stated
|
||||||
semantics.</p>
|
semantics.</p>
|
||||||
<table border="1" class="table">
|
<table border="1" class="docutils">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col width="36%" />
|
<col width="36%" />
|
||||||
<col width="33%" />
|
<col width="33%" />
|
||||||
<col width="31%" />
|
<col width="31%" />
|
||||||
</colgroup>
|
</colgroup>
|
||||||
<thead valign="bottom">
|
<thead valign="bottom">
|
||||||
<tr><th colspan="3">Single Pass Iterator Requirements (in addition to Incrementable Iterator and Equality
|
<tr><th class="head" colspan="3">Single Pass Iterator Requirements (in addition to Incrementable Iterator and Equality
|
||||||
Comparable)</th>
|
Comparable)</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><th>Expression</th>
|
<tr><th class="head">Expression</th>
|
||||||
<th>Return Type</th>
|
<th class="head">Return Type</th>
|
||||||
<th>Assertion/Semantics /
|
<th class="head">Assertion/Semantics /
|
||||||
Pre-/Post-condition</th>
|
Pre-/Post-condition</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<tr><td><tt class="literal"><span class="pre">++r</span></tt></td>
|
<tr><td><tt class="docutils literal"><span class="pre">++r</span></tt></td>
|
||||||
<td><tt class="literal"><span class="pre">X&</span></tt></td>
|
<td><tt class="docutils literal"><span class="pre">X&</span></tt></td>
|
||||||
<td>pre: <tt class="literal"><span class="pre">r</span></tt> is
|
<td>pre: <tt class="docutils literal"><span class="pre">r</span></tt> is
|
||||||
dereferenceable; post:
|
dereferenceable; post:
|
||||||
<tt class="literal"><span class="pre">r</span></tt> is dereferenceable or
|
<tt class="docutils literal"><span class="pre">r</span></tt> is dereferenceable or
|
||||||
<tt class="literal"><span class="pre">r</span></tt> is past-the-end</td>
|
<tt class="docutils literal"><span class="pre">r</span></tt> is past-the-end</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><td><tt class="literal"><span class="pre">a</span> <span class="pre">==</span> <span class="pre">b</span></tt></td>
|
<tr><td><tt class="docutils literal"><span class="pre">a</span> <span class="pre">==</span> <span class="pre">b</span></tt></td>
|
||||||
<td>convertible to <tt class="literal"><span class="pre">bool</span></tt></td>
|
<td>convertible to <tt class="docutils literal"><span class="pre">bool</span></tt></td>
|
||||||
<td><tt class="literal"><span class="pre">==</span></tt> is an equivalence
|
<td><tt class="docutils literal"><span class="pre">==</span></tt> is an equivalence
|
||||||
relation over its domain</td>
|
relation over its domain</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><td><tt class="literal"><span class="pre">a</span> <span class="pre">!=</span> <span class="pre">b</span></tt></td>
|
<tr><td><tt class="docutils literal"><span class="pre">a</span> <span class="pre">!=</span> <span class="pre">b</span></tt></td>
|
||||||
<td>convertible to <tt class="literal"><span class="pre">bool</span></tt></td>
|
<td>convertible to <tt class="docutils literal"><span class="pre">bool</span></tt></td>
|
||||||
<td><tt class="literal"><span class="pre">!(a</span> <span class="pre">==</span> <span class="pre">b)</span></tt></td>
|
<td><tt class="docutils literal"><span class="pre">!(a</span> <span class="pre">==</span> <span class="pre">b)</span></tt></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><td><tt class="literal"><span class="pre">iterator_traversal<X>::type</span></tt></td>
|
<tr><td><tt class="docutils literal"><span class="pre">iterator_traversal<X>::type</span></tt></td>
|
||||||
<td>Convertible to
|
<td>Convertible to
|
||||||
<tt class="literal"><span class="pre">single_pass_traversal_tag</span></tt></td>
|
<tt class="docutils literal"><span class="pre">single_pass_traversal_tag</span></tt></td>
|
||||||
<td> </td>
|
<td> </td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<hr class="footer" />
|
|
||||||
<div class="footer">
|
<div class="footer">
|
||||||
<a class="reference" href="SinglePassIterator.rst">View document source</a>.
|
<hr class="footer" />
|
||||||
Generated by <a class="reference" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
<a class="reference external" href="SinglePassIterator.rst">View document source</a>.
|
||||||
|
Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
4
doc/SinglePassIterator.rst
Executable file → Normal file
4
doc/SinglePassIterator.rst
Executable file → Normal file
@ -1,3 +1,7 @@
|
|||||||
|
.. Copyright David Abrahams 2006. Distributed under the Boost
|
||||||
|
.. Software License, Version 1.0. (See accompanying
|
||||||
|
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
Single Pass Iterator Concept
|
Single Pass Iterator Concept
|
||||||
............................
|
............................
|
||||||
|
|
||||||
|
@ -3,47 +3,52 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="generator" content="Docutils 0.3.6: http://docutils.sourceforge.net/" />
|
<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
|
||||||
<title>Swappable Iterator Concept</title>
|
<title>Swappable Iterator Concept</title>
|
||||||
<link rel="stylesheet" href="default.css" type="text/css" />
|
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<h1 class="title">Swappable Iterator Concept</h1>
|
|
||||||
<div class="document" id="swappable-iterator-concept">
|
<div class="document" id="swappable-iterator-concept">
|
||||||
<p>A class or built-in type <tt class="literal"><span class="pre">X</span></tt> models the <em>Swappable Iterator</em> concept
|
<h1 class="title">Swappable Iterator Concept</h1>
|
||||||
if, in addition to <tt class="literal"><span class="pre">X</span></tt> being Copy Constructible, the following
|
|
||||||
|
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
||||||
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
|
<p>A class or built-in type <tt class="docutils literal"><span class="pre">X</span></tt> models the <em>Swappable Iterator</em> concept
|
||||||
|
if, in addition to <tt class="docutils literal"><span class="pre">X</span></tt> being Copy Constructible, the following
|
||||||
expressions are valid and respect the stated semantics.</p>
|
expressions are valid and respect the stated semantics.</p>
|
||||||
<table border="1" class="table">
|
<table border="1" class="docutils">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col width="37%" />
|
<col width="37%" />
|
||||||
<col width="19%" />
|
<col width="19%" />
|
||||||
<col width="43%" />
|
<col width="43%" />
|
||||||
</colgroup>
|
</colgroup>
|
||||||
<thead valign="bottom">
|
<thead valign="bottom">
|
||||||
<tr><th colspan="3">Swappable Iterator Requirements (in addition to Copy Constructible)</th>
|
<tr><th class="head" colspan="3">Swappable Iterator Requirements (in addition to Copy Constructible)</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><th>Expression</th>
|
<tr><th class="head">Expression</th>
|
||||||
<th>Return Type</th>
|
<th class="head">Return Type</th>
|
||||||
<th>Postcondition</th>
|
<th class="head">Postcondition</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<tr><td><tt class="literal"><span class="pre">iter_swap(a,</span> <span class="pre">b)</span></tt></td>
|
<tr><td><tt class="docutils literal"><span class="pre">iter_swap(a,</span> <span class="pre">b)</span></tt></td>
|
||||||
<td><tt class="literal"><span class="pre">void</span></tt></td>
|
<td><tt class="docutils literal"><span class="pre">void</span></tt></td>
|
||||||
<td>the pointed to values are
|
<td>the pointed to values are
|
||||||
exchanged</td>
|
exchanged</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<dl>
|
<dl class="docutils">
|
||||||
<dt>[<em>Note:</em> An iterator that is a model of the <em>Readable</em> and <em>Writable Iterator</em> concepts</dt>
|
<dt>[<em>Note:</em> An iterator that is a model of the <em>Readable</em> and <em>Writable Iterator</em> concepts</dt>
|
||||||
<dd>is also a model of <em>Swappable Iterator</em>. <em>--end note</em>]</dd>
|
<dd>is also a model of <em>Swappable Iterator</em>. <em>--end note</em>]</dd>
|
||||||
</dl>
|
</dl>
|
||||||
</div>
|
</div>
|
||||||
<hr class="footer" />
|
|
||||||
<div class="footer">
|
<div class="footer">
|
||||||
<a class="reference" href="SwappableIterator.rst">View document source</a>.
|
<hr class="footer" />
|
||||||
Generated by <a class="reference" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
<a class="reference external" href="SwappableIterator.rst">View document source</a>.
|
||||||
|
Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
4
doc/SwappableIterator.rst
Executable file → Normal file
4
doc/SwappableIterator.rst
Executable file → Normal file
@ -1,3 +1,7 @@
|
|||||||
|
.. Copyright David Abrahams 2006. Distributed under the Boost
|
||||||
|
.. Software License, Version 1.0. (See accompanying
|
||||||
|
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
Swappable Iterator Concept
|
Swappable Iterator Concept
|
||||||
..........................
|
..........................
|
||||||
|
|
||||||
|
@ -3,45 +3,50 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="generator" content="Docutils 0.3.6: http://docutils.sourceforge.net/" />
|
<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
|
||||||
<title>Writable Iterator Concept</title>
|
<title>Writable Iterator Concept</title>
|
||||||
<link rel="stylesheet" href="default.css" type="text/css" />
|
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<h1 class="title">Writable Iterator Concept</h1>
|
|
||||||
<div class="document" id="writable-iterator-concept">
|
<div class="document" id="writable-iterator-concept">
|
||||||
<p>A class or built-in type <tt class="literal"><span class="pre">X</span></tt> models the <em>Writable Iterator</em> concept
|
<h1 class="title">Writable Iterator Concept</h1>
|
||||||
if, in addition to <tt class="literal"><span class="pre">X</span></tt> being Copy Constructible, the following
|
|
||||||
|
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
||||||
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
|
<p>A class or built-in type <tt class="docutils literal"><span class="pre">X</span></tt> models the <em>Writable Iterator</em> concept
|
||||||
|
if, in addition to <tt class="docutils literal"><span class="pre">X</span></tt> being Copy Constructible, the following
|
||||||
expressions are valid and respect the stated semantics. Writable
|
expressions are valid and respect the stated semantics. Writable
|
||||||
Iterators have an associated <em>set of value types</em>.</p>
|
Iterators have an associated <em>set of value types</em>.</p>
|
||||||
<table border="1" class="table">
|
<table border="1" class="docutils">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col width="37%" />
|
<col width="37%" />
|
||||||
<col width="21%" />
|
<col width="21%" />
|
||||||
<col width="42%" />
|
<col width="42%" />
|
||||||
</colgroup>
|
</colgroup>
|
||||||
<thead valign="bottom">
|
<thead valign="bottom">
|
||||||
<tr><th colspan="3">Writable Iterator Requirements (in addition to Copy Constructible)</th>
|
<tr><th class="head" colspan="3">Writable Iterator Requirements (in addition to Copy Constructible)</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><th>Expression</th>
|
<tr><th class="head">Expression</th>
|
||||||
<th>Return Type</th>
|
<th class="head">Return Type</th>
|
||||||
<th>Precondition</th>
|
<th class="head">Precondition</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<tr><td><tt class="literal"><span class="pre">*a</span> <span class="pre">=</span> <span class="pre">o</span></tt></td>
|
<tr><td><tt class="docutils literal"><span class="pre">*a</span> <span class="pre">=</span> <span class="pre">o</span></tt></td>
|
||||||
<td> </td>
|
<td> </td>
|
||||||
<td>pre: The type of <tt class="literal"><span class="pre">o</span></tt>
|
<td>pre: The type of <tt class="docutils literal"><span class="pre">o</span></tt>
|
||||||
is in the set of
|
is in the set of
|
||||||
value types of <tt class="literal"><span class="pre">X</span></tt></td>
|
value types of <tt class="docutils literal"><span class="pre">X</span></tt></td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<hr class="footer" />
|
|
||||||
<div class="footer">
|
<div class="footer">
|
||||||
<a class="reference" href="WritableIterator.rst">View document source</a>.
|
<hr class="footer" />
|
||||||
Generated by <a class="reference" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
<a class="reference external" href="WritableIterator.rst">View document source</a>.
|
||||||
|
Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
4
doc/WritableIterator.rst
Executable file → Normal file
4
doc/WritableIterator.rst
Executable file → Normal file
@ -1,3 +1,7 @@
|
|||||||
|
.. Copyright David Abrahams 2006. Distributed under the Boost
|
||||||
|
.. Software License, Version 1.0. (See accompanying
|
||||||
|
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
Writable Iterator Concept
|
Writable Iterator Concept
|
||||||
.........................
|
.........................
|
||||||
|
|
||||||
|
@ -3,13 +3,13 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="generator" content="Docutils 0.3.8: http://docutils.sourceforge.net/" />
|
<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
|
||||||
<title>Counting Iterator</title>
|
<title>Counting Iterator</title>
|
||||||
<meta name="author" content="David Abrahams, Jeremy Siek, Thomas Witt" />
|
<meta name="author" content="David Abrahams, Jeremy Siek, Thomas Witt" />
|
||||||
<meta name="organization" content="Boost Consulting, Indiana University Open Systems Lab, University of Hanover Institute for Transport Railway Operation and Construction" />
|
<meta name="organization" content="Boost Consulting, Indiana University Open Systems Lab, University of Hanover Institute for Transport Railway Operation and Construction" />
|
||||||
<meta name="date" content="2004-11-01" />
|
<meta name="date" content="2006-09-11" />
|
||||||
<meta name="copyright" content="Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003." />
|
<meta name="copyright" content="Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003." />
|
||||||
<link rel="stylesheet" href="default.css" type="text/css" />
|
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="document" id="counting-iterator">
|
<div class="document" id="counting-iterator">
|
||||||
@ -21,17 +21,20 @@
|
|||||||
<tr><th class="docinfo-name">Author:</th>
|
<tr><th class="docinfo-name">Author:</th>
|
||||||
<td>David Abrahams, Jeremy Siek, Thomas Witt</td></tr>
|
<td>David Abrahams, Jeremy Siek, Thomas Witt</td></tr>
|
||||||
<tr><th class="docinfo-name">Contact:</th>
|
<tr><th class="docinfo-name">Contact:</th>
|
||||||
<td><a class="first reference" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a>, <a class="reference" href="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</a>, <a class="last reference" href="mailto:witt@ive.uni-hannover.de">witt@ive.uni-hannover.de</a></td></tr>
|
<td><a class="first reference external" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a>, <a class="reference external" href="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</a>, <a class="last reference external" href="mailto:witt@ive.uni-hannover.de">witt@ive.uni-hannover.de</a></td></tr>
|
||||||
<tr><th class="docinfo-name">Organization:</th>
|
<tr><th class="docinfo-name">Organization:</th>
|
||||||
<td><a class="first reference" href="http://www.boost-consulting.com">Boost Consulting</a>, Indiana University <a class="reference" href="http://www.osl.iu.edu">Open Systems
|
<td><a class="first reference external" href="http://www.boost-consulting.com">Boost Consulting</a>, Indiana University <a class="reference external" href="http://www.osl.iu.edu">Open Systems
|
||||||
Lab</a>, University of Hanover <a class="last reference" href="http://www.ive.uni-hannover.de">Institute for Transport
|
Lab</a>, University of Hanover <a class="last reference external" href="http://www.ive.uni-hannover.de">Institute for Transport
|
||||||
Railway Operation and Construction</a></td></tr>
|
Railway Operation and Construction</a></td></tr>
|
||||||
<tr><th class="docinfo-name">Date:</th>
|
<tr><th class="docinfo-name">Date:</th>
|
||||||
<td>2004-11-01</td></tr>
|
<td>2006-09-11</td></tr>
|
||||||
<tr><th class="docinfo-name">Copyright:</th>
|
<tr><th class="docinfo-name">Copyright:</th>
|
||||||
<td>Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003.</td></tr>
|
<td>Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003.</td></tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
<!-- Distributed under the Boost -->
|
||||||
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
<table class="docutils field-list" frame="void" rules="none">
|
<table class="docutils field-list" frame="void" rules="none">
|
||||||
<col class="field-name" />
|
<col class="field-name" />
|
||||||
<col class="field-body" />
|
<col class="field-body" />
|
||||||
@ -44,6 +47,9 @@ The counting iterator adaptor adds this crucial piece of
|
|||||||
functionality to whatever type it wraps. One can use the
|
functionality to whatever type it wraps. One can use the
|
||||||
counting iterator adaptor not only with integer types, but with
|
counting iterator adaptor not only with integer types, but with
|
||||||
any incrementable type.</p>
|
any incrementable type.</p>
|
||||||
|
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
||||||
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
<p class="last"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt> adapts an object by adding an <tt class="docutils literal"><span class="pre">operator*</span></tt> that
|
<p class="last"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt> adapts an object by adding an <tt class="docutils literal"><span class="pre">operator*</span></tt> that
|
||||||
returns the current value of the object. All other iterator operations
|
returns the current value of the object. All other iterator operations
|
||||||
are forwarded to the adapted object.</p>
|
are forwarded to the adapted object.</p>
|
||||||
@ -52,17 +58,20 @@ are forwarded to the adapted object.</p>
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<div class="contents topic" id="table-of-contents">
|
<div class="contents topic" id="table-of-contents">
|
||||||
<p class="topic-title first"><a name="table-of-contents">Table of Contents</a></p>
|
<p class="topic-title first">Table of Contents</p>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li><a class="reference" href="#counting-iterator-synopsis" id="id2" name="id2"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt> synopsis</a></li>
|
<li><a class="reference internal" href="#counting-iterator-synopsis" id="id2"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt> synopsis</a></li>
|
||||||
<li><a class="reference" href="#counting-iterator-requirements" id="id3" name="id3"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt> requirements</a></li>
|
<li><a class="reference internal" href="#counting-iterator-requirements" id="id3"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt> requirements</a></li>
|
||||||
<li><a class="reference" href="#counting-iterator-models" id="id4" name="id4"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt> models</a></li>
|
<li><a class="reference internal" href="#counting-iterator-models" id="id4"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt> models</a></li>
|
||||||
<li><a class="reference" href="#counting-iterator-operations" id="id5" name="id5"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt> operations</a></li>
|
<li><a class="reference internal" href="#counting-iterator-operations" id="id5"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt> operations</a></li>
|
||||||
<li><a class="reference" href="#example" id="id6" name="id6">Example</a></li>
|
<li><a class="reference internal" href="#example" id="id6">Example</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="counting-iterator-synopsis">
|
<div class="section" id="counting-iterator-synopsis">
|
||||||
<h1><a class="toc-backref" href="#id2" name="counting-iterator-synopsis"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt> synopsis</a></h1>
|
<h1><a class="toc-backref" href="#id2"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt> synopsis</a></h1>
|
||||||
|
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
||||||
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
<pre class="literal-block">
|
<pre class="literal-block">
|
||||||
template <
|
template <
|
||||||
class Incrementable
|
class Incrementable
|
||||||
@ -98,10 +107,10 @@ algorithm:</p>
|
|||||||
if (CategoryOrTraversal is not use_default)
|
if (CategoryOrTraversal is not use_default)
|
||||||
return CategoryOrTraversal
|
return CategoryOrTraversal
|
||||||
else if (numeric_limits<Incrementable>::is_specialized)
|
else if (numeric_limits<Incrementable>::is_specialized)
|
||||||
return <a class="reference" href="iterator_facade.html#iterator-category"><em>iterator-category</em></a>(
|
return <a class="reference external" href="iterator_facade.html#iterator-category"><em>iterator-category</em></a>(
|
||||||
random_access_traversal_tag, Incrementable, const Incrementable&)
|
random_access_traversal_tag, Incrementable, const Incrementable&)
|
||||||
else
|
else
|
||||||
return <a class="reference" href="iterator_facade.html#iterator-category"><em>iterator-category</em></a>(
|
return <a class="reference external" href="iterator_facade.html#iterator-category"><em>iterator-category</em></a>(
|
||||||
iterator_traversal<Incrementable>::type,
|
iterator_traversal<Incrementable>::type,
|
||||||
Incrementable, const Incrementable&)
|
Incrementable, const Incrementable&)
|
||||||
</pre>
|
</pre>
|
||||||
@ -113,7 +122,7 @@ is true.]</dd>
|
|||||||
</dl>
|
</dl>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="counting-iterator-requirements">
|
<div class="section" id="counting-iterator-requirements">
|
||||||
<h1><a class="toc-backref" href="#id3" name="counting-iterator-requirements"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt> requirements</a></h1>
|
<h1><a class="toc-backref" href="#id3"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt> requirements</a></h1>
|
||||||
<p>The <tt class="docutils literal"><span class="pre">Incrementable</span></tt> argument shall be Copy Constructible and Assignable.</p>
|
<p>The <tt class="docutils literal"><span class="pre">Incrementable</span></tt> argument shall be Copy Constructible and Assignable.</p>
|
||||||
<p>If <tt class="docutils literal"><span class="pre">iterator_category</span></tt> is convertible to <tt class="docutils literal"><span class="pre">forward_iterator_tag</span></tt>
|
<p>If <tt class="docutils literal"><span class="pre">iterator_category</span></tt> is convertible to <tt class="docutils literal"><span class="pre">forward_iterator_tag</span></tt>
|
||||||
or <tt class="docutils literal"><span class="pre">forward_traversal_tag</span></tt>, the following must be well-formed:</p>
|
or <tt class="docutils literal"><span class="pre">forward_traversal_tag</span></tt>, the following must be well-formed:</p>
|
||||||
@ -139,7 +148,7 @@ i < j;
|
|||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="counting-iterator-models">
|
<div class="section" id="counting-iterator-models">
|
||||||
<h1><a class="toc-backref" href="#id4" name="counting-iterator-models"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt> models</a></h1>
|
<h1><a class="toc-backref" href="#id4"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt> models</a></h1>
|
||||||
<p>Specializations of <tt class="docutils literal"><span class="pre">counting_iterator</span></tt> model Readable Lvalue
|
<p>Specializations of <tt class="docutils literal"><span class="pre">counting_iterator</span></tt> model Readable Lvalue
|
||||||
Iterator. In addition, they model the concepts corresponding to the
|
Iterator. In addition, they model the concepts corresponding to the
|
||||||
iterator tags to which their <tt class="docutils literal"><span class="pre">iterator_category</span></tt> is convertible.
|
iterator tags to which their <tt class="docutils literal"><span class="pre">iterator_category</span></tt> is convertible.
|
||||||
@ -155,7 +164,7 @@ concepts modeled by <tt class="docutils literal"><span class="pre">Incrementable
|
|||||||
interoperable with <tt class="docutils literal"><span class="pre">Y</span></tt>.</p>
|
interoperable with <tt class="docutils literal"><span class="pre">Y</span></tt>.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="counting-iterator-operations">
|
<div class="section" id="counting-iterator-operations">
|
||||||
<h1><a class="toc-backref" href="#id5" name="counting-iterator-operations"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt> operations</a></h1>
|
<h1><a class="toc-backref" href="#id5"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt> operations</a></h1>
|
||||||
<p>In addition to the operations required by the concepts modeled by
|
<p>In addition to the operations required by the concepts modeled by
|
||||||
<tt class="docutils literal"><span class="pre">counting_iterator</span></tt>, <tt class="docutils literal"><span class="pre">counting_iterator</span></tt> provides the following
|
<tt class="docutils literal"><span class="pre">counting_iterator</span></tt>, <tt class="docutils literal"><span class="pre">counting_iterator</span></tt> provides the following
|
||||||
operations.</p>
|
operations.</p>
|
||||||
@ -228,6 +237,9 @@ operations.</p>
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
||||||
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
<pre class="literal-block">
|
<pre class="literal-block">
|
||||||
template <class Incrementable>
|
template <class Incrementable>
|
||||||
counting_iterator<Incrementable> make_counting_iterator(Incrementable x);
|
counting_iterator<Incrementable> make_counting_iterator(Incrementable x);
|
||||||
@ -241,9 +253,12 @@ with <tt class="docutils literal"><span class="pre">current</span></tt> construc
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
||||||
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="example">
|
<div class="section" id="example">
|
||||||
<h1><a class="toc-backref" href="#id6" name="example">Example</a></h1>
|
<h1><a class="toc-backref" href="#id6">Example</a></h1>
|
||||||
<p>This example fills an array with numbers and a second array with
|
<p>This example fills an array with numbers and a second array with
|
||||||
pointers into the first array, using <tt class="docutils literal"><span class="pre">counting_iterator</span></tt> for both
|
pointers into the first array, using <tt class="docutils literal"><span class="pre">counting_iterator</span></tt> for both
|
||||||
tasks. Finally <tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> is used to print out the numbers
|
tasks. Finally <tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> is used to print out the numbers
|
||||||
@ -273,13 +288,14 @@ std::cout << std::endl;
|
|||||||
indirectly printing out the numbers from 0 to 7
|
indirectly printing out the numbers from 0 to 7
|
||||||
0 1 2 3 4 5 6
|
0 1 2 3 4 5 6
|
||||||
</pre>
|
</pre>
|
||||||
<p>The source code for this example can be found <a class="reference" href="../example/counting_iterator_example.cpp">here</a>.</p>
|
<p>The source code for this example can be found <a class="reference external" href="../example/counting_iterator_example.cpp">here</a>.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<hr class="docutils footer" />
|
|
||||||
<div class="footer">
|
<div class="footer">
|
||||||
<a class="reference" href="counting_iterator.rst">View document source</a>.
|
<hr class="footer" />
|
||||||
Generated by <a class="reference" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
<a class="reference external" href="counting_iterator.rst">View document source</a>.
|
||||||
|
Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
0
doc/counting_iterator.pdf
Executable file → Normal file
0
doc/counting_iterator.pdf
Executable file → Normal file
@ -1,3 +1,7 @@
|
|||||||
|
.. Distributed under the Boost
|
||||||
|
.. Software License, Version 1.0. (See accompanying
|
||||||
|
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
+++++++++++++++++++
|
+++++++++++++++++++
|
||||||
Counting Iterator
|
Counting Iterator
|
||||||
+++++++++++++++++++
|
+++++++++++++++++++
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
.. Copyright David Abrahams 2006. Distributed under the Boost
|
||||||
|
.. Software License, Version 1.0. (See accompanying
|
||||||
|
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
``counting_iterator`` adapts an object by adding an ``operator*`` that
|
``counting_iterator`` adapts an object by adding an ``operator*`` that
|
||||||
returns the current value of the object. All other iterator operations
|
returns the current value of the object. All other iterator operations
|
||||||
are forwarded to the adapted object.
|
are forwarded to the adapted object.
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
|
.. Copyright David Abrahams 2006. Distributed under the Boost
|
||||||
|
.. Software License, Version 1.0. (See accompanying
|
||||||
|
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
Example
|
Example
|
||||||
.......
|
.......
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
.. Copyright David Abrahams 2006. Distributed under the Boost
|
||||||
|
.. Software License, Version 1.0. (See accompanying
|
||||||
|
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
template <
|
template <
|
||||||
|
@ -5,6 +5,8 @@
|
|||||||
:version: $Revision$
|
:version: $Revision$
|
||||||
:copyright: This stylesheet has been placed in the public domain.
|
:copyright: This stylesheet has been placed in the public domain.
|
||||||
|
|
||||||
|
boostinspect:nolicense
|
||||||
|
|
||||||
Default cascading style sheet for the HTML output of Docutils.
|
Default cascading style sheet for the HTML output of Docutils.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
0
doc/docutils.sty
Executable file → Normal file
0
doc/docutils.sty
Executable file → Normal file
@ -1,228 +0,0 @@
|
|||||||
Index: facade-and-adaptor.rst
|
|
||||||
===================================================================
|
|
||||||
RCS file: /cvsroot/boost/boost/libs/iterator/doc/facade-and-adaptor.rst,v
|
|
||||||
retrieving revision 1.9
|
|
||||||
retrieving revision 1.14
|
|
||||||
diff -b -d -u -r1.9 -r1.14
|
|
||||||
--- facade-and-adaptor.rst 22 Sep 2003 19:55:00 -0000 1.9
|
|
||||||
+++ facade-and-adaptor.rst 18 Jan 2004 15:51:06 -0000 1.14
|
|
||||||
@@ -3,17 +3,25 @@ None
|
|
||||||
+++++++++++++++++++++++++++++
|
|
||||||
|
|
||||||
:Author: David Abrahams, Jeremy Siek, Thomas Witt
|
|
||||||
-:Contact: dave@boost-consulting.com, jsiek@osl.iu.edu, witt@acm.org
|
|
||||||
+:Contact: dave@boost-consulting.com, jsiek@osl.iu.edu, witt@styleadvisor.com
|
|
||||||
:organization: `Boost Consulting`_, Indiana University `Open Systems
|
|
||||||
- Lab`_, University of Hanover `Institute for Transport
|
|
||||||
- Railway Operation and Construction`_
|
|
||||||
-:date: $Date: 2004/01/18 19:56:39 $
|
|
||||||
-:Number: N1530=03-0113
|
|
||||||
+ Lab`_, `Zephyr Associates, Inc.`_
|
|
||||||
+:date: $Date: 2004/01/18 19:56:39 $
|
|
||||||
+
|
|
||||||
+:Number: This is a revised version of N1530_\ =03-0113, which was
|
|
||||||
+ accepted for Technical Report 1 by the C++ standard
|
|
||||||
+ committee's library working group.
|
|
||||||
+
|
|
||||||
+.. Version 1.9 of this ReStructuredText document corresponds to
|
|
||||||
+ n1530_, the paper accepted by the LWG.
|
|
||||||
+
|
|
||||||
+.. _n1530: http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/2003/n1530.html
|
|
||||||
+
|
|
||||||
:copyright: Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. All rights reserved
|
|
||||||
|
|
||||||
.. _`Boost Consulting`: http://www.boost-consulting.com
|
|
||||||
.. _`Open Systems Lab`: http://www.osl.iu.edu
|
|
||||||
-.. _`Institute for Transport Railway Operation and Construction`: http://www.ive.uni-hannover.de
|
|
||||||
+.. _`Zephyr Associates, Inc.`: http://www.styleadvisor.com
|
|
||||||
|
|
||||||
:abstract: We propose a set of class templates that help programmers
|
|
||||||
build standard-conforming iterators, both from scratch and
|
|
||||||
@@ -124,15 +132,15 @@ None
|
|
||||||
=================
|
|
||||||
|
|
||||||
This proposal is formulated in terms of the new ``iterator concepts``
|
|
||||||
-as proposed in `n1477`_, since user-defined and especially adapted
|
|
||||||
+as proposed in n1550_, since user-defined and especially adapted
|
|
||||||
iterators suffer from the well known categorization problems that are
|
|
||||||
inherent to the current iterator categories.
|
|
||||||
|
|
||||||
-.. _`n1477`: http://anubis.dkuug.dk/JTC1/SC22/WG21/docs/papers/2003/n1477.html
|
|
||||||
+.. _n1550: http://anubis.dkuug.dk/JTC1/SC22/WG21/docs/papers/2003/n1550.html
|
|
||||||
|
|
||||||
-This proposal does not strictly depend on proposal `n1477`_, as there
|
|
||||||
+This proposal does not strictly depend on proposal n1550_, as there
|
|
||||||
is a direct mapping between new and old categories. This proposal
|
|
||||||
-could be reformulated using this mapping if `n1477`_ was not accepted.
|
|
||||||
+could be reformulated using this mapping if n1550_ was not accepted.
|
|
||||||
|
|
||||||
Interoperability
|
|
||||||
================
|
|
||||||
@@ -141,24 +149,24 @@ None
|
|
||||||
current standard. There are currently two defect reports that are
|
|
||||||
concerned with interoperability issues.
|
|
||||||
|
|
||||||
-Issue `179`_ concerns the fact that mutable container iterator types
|
|
||||||
+Issue 179_ concerns the fact that mutable container iterator types
|
|
||||||
are only required to be convertible to the corresponding constant
|
|
||||||
iterator types, but objects of these types are not required to
|
|
||||||
interoperate in comparison or subtraction expressions. This situation
|
|
||||||
is tedious in practice and out of line with the way built in types
|
|
||||||
work. This proposal implements the proposed resolution to issue
|
|
||||||
-`179`_, as most standard library implementations do nowadays. In other
|
|
||||||
+179_, as most standard library implementations do nowadays. In other
|
|
||||||
words, if an iterator type A has an implicit or user defined
|
|
||||||
conversion to an iterator type B, the iterator types are interoperable
|
|
||||||
and the usual set of operators are available.
|
|
||||||
|
|
||||||
-Issue `280`_ concerns the current lack of interoperability between
|
|
||||||
+Issue 280_ concerns the current lack of interoperability between
|
|
||||||
reverse iterator types. The proposed new reverse_iterator template
|
|
||||||
fixes the issues raised in 280. It provides the desired
|
|
||||||
interoperability without introducing unwanted overloads.
|
|
||||||
|
|
||||||
-.. _`179`: http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/lwg-defects.html#179
|
|
||||||
-.. _`280`: http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/lwg-active.html#280
|
|
||||||
+.. _179: http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/lwg-defects.html#179
|
|
||||||
+.. _280: http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/lwg-active.html#280
|
|
||||||
|
|
||||||
|
|
||||||
Iterator Facade
|
|
||||||
@@ -195,7 +203,7 @@ None
|
|
||||||
* ``filter_iterator``, which provides a view of an iterator range in
|
|
||||||
which some elements of the underlying range are skipped.
|
|
||||||
|
|
||||||
-.. _counting_iterator:
|
|
||||||
+.. _counting:
|
|
||||||
|
|
||||||
* ``counting_iterator``, which adapts any incrementable type
|
|
||||||
(e.g. integers, iterators) so that incrementing/decrementing the
|
|
||||||
@@ -226,15 +234,13 @@ Issue 9.1 et al
|
|
||||||
::
|
|
||||||
|
|
||||||
struct use_default;
|
|
||||||
- const unsigned use_default_access = -1;
|
|
||||||
|
|
||||||
struct iterator_core_access { /* implementation detail */ };
|
|
||||||
|
|
||||||
template <
|
|
||||||
class Derived
|
|
||||||
, class Value
|
|
||||||
- , unsigned AccessCategory
|
|
||||||
- , class TraversalCategory
|
|
||||||
+ , class CategoryOrTraversal
|
|
||||||
, class Reference = Value&
|
|
||||||
, class Difference = ptrdiff_t
|
|
||||||
>
|
|
||||||
@@ -244,8 +250,7 @@ Issue 9.1 et al.
|
|
||||||
class Derived
|
|
||||||
, class Base
|
|
||||||
, class Value = use_default
|
|
||||||
- , unsigned Access = use_default_access
|
|
||||||
- , class Traversal = use_default
|
|
||||||
+ , class CategoryOrTraversal = use_default
|
|
||||||
, class Reference = use_default
|
|
||||||
, class Difference = use_default
|
|
||||||
>
|
|
||||||
@@ -254,10 +259,9 @@ Issue 9.1 et al.
|
|
||||||
template <
|
|
||||||
class Iterator
|
|
||||||
, class Value = use_default
|
|
||||||
- , unsigned Access = use_default_access
|
|
||||||
- , class Traversal = use_default
|
|
||||||
+ , class CategoryOrTraversal = use_default
|
|
||||||
, class Reference = use_default
|
|
||||||
, class Difference = use_default
|
|
||||||
>
|
|
||||||
class indirect_iterator;
|
|
||||||
|
|
||||||
Issue 9.44y
|
|
||||||
|
|
||||||
+ template <class Dereferenceable>
|
|
||||||
+ struct pointee;
|
|
||||||
+
|
|
||||||
+ template <class Dereferenceable>
|
|
||||||
+ struct indirect_reference;
|
|
||||||
+
|
|
||||||
template <class Iterator>
|
|
||||||
class reverse_iterator;
|
|
||||||
|
|
||||||
@@ -277,8 +287,7 @@ Issue 9.1 et al.
|
|
||||||
|
|
||||||
template <
|
|
||||||
class Incrementable
|
|
||||||
- , unsigned Access = use_default_access
|
|
||||||
- , class Traversal = use_default
|
|
||||||
+ , class CategoryOrTraversal = use_default
|
|
||||||
, class Difference = use_default
|
|
||||||
>
|
|
||||||
class counting_iterator
|
|
||||||
@@ -312,17 +321,35 @@ Issue 9.8
|
|
||||||
Specialized adaptors [lib.iterator.special.adaptors]
|
|
||||||
====================================================
|
|
||||||
|
|
||||||
-.. The requirements for all of these need to be written *much* more
|
|
||||||
- formally -DWA
|
|
||||||
-
|
|
||||||
|
|
||||||
-[*Note:* The ``enable_if_convertible<X,Y>::type`` expression used in
|
|
||||||
+The ``enable_if_convertible<X,Y>::type`` expression used in
|
|
||||||
this section is for exposition purposes. The converting constructors
|
|
||||||
for specialized adaptors should be only be in an overload set provided
|
|
||||||
that an object of type ``X`` is implicitly convertible to an object of
|
|
||||||
-type ``Y``. The ``enable_if_convertible`` approach uses SFINAE to
|
|
||||||
+type ``Y``.
|
|
||||||
+The signatures involving ``enable_if_convertible`` should behave
|
|
||||||
+*as-if* ``enable_if_convertible`` were defined to be::
|
|
||||||
+
|
|
||||||
+ template <bool> enable_if_convertible_impl
|
|
||||||
+ {};
|
|
||||||
+
|
|
||||||
+ template <> enable_if_convertible_impl<true>
|
|
||||||
+ { struct type; };
|
|
||||||
+
|
|
||||||
+ template<typename From, typename To>
|
|
||||||
+ struct enable_if_convertible
|
|
||||||
+ : enable_if_convertible_impl<is_convertible<From,To>::value>
|
|
||||||
+ {};
|
|
||||||
+
|
|
||||||
+If an expression other than the default argument is used to supply
|
|
||||||
+the value of a function parameter whose type is written in terms
|
|
||||||
+of ``enable_if_convertible``, the program is ill-formed, no
|
|
||||||
+diagnostic required.
|
|
||||||
+
|
|
||||||
+[*Note:* The ``enable_if_convertible`` approach uses SFINAE to
|
|
||||||
take the constructor out of the overload set when the types are not
|
|
||||||
-implicitly convertible.]
|
|
||||||
+implicitly convertible.
|
|
||||||
+]
|
|
||||||
|
|
||||||
|
|
||||||
Indirect iterator
|
|
||||||
@@ -330,6 +357,16 @@ Issue 9.44y
|
|
||||||
|
|
||||||
.. include:: indirect_iterator_abstract.rst
|
|
||||||
|
|
||||||
+Class template ``pointee``
|
|
||||||
+....................................
|
|
||||||
+
|
|
||||||
+.. include:: pointee_ref.rst
|
|
||||||
+
|
|
||||||
+Class template ``indirect_reference``
|
|
||||||
+.....................................
|
|
||||||
+
|
|
||||||
+.. include:: indirect_reference_ref.rst
|
|
||||||
+
|
|
||||||
Class template ``indirect_iterator``
|
|
||||||
....................................
|
|
||||||
|
|
||||||
@@ -393,8 +430,7 @@
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-..
|
|
||||||
- LocalWords: Abrahams Siek Witt istream ostream iter MTL strided interoperate
|
|
||||||
+.. LocalWords: Abrahams Siek Witt istream ostream iter MTL strided interoperate
|
|
||||||
LocalWords: CRTP metafunctions inlining lvalue JGS incrementable BGL LEDA cv
|
|
||||||
LocalWords: GraphBase struct ptrdiff UnaryFunction const int typename bool pp
|
|
||||||
LocalWords: lhs rhs SFINAE markup iff tmp OtherDerived OtherIterator DWA foo
|
|
461
doc/facade-and-adaptor.html
Executable file → Normal file
461
doc/facade-and-adaptor.html
Executable file → Normal file
File diff suppressed because it is too large
Load Diff
0
doc/facade-and-adaptor.pdf
Executable file → Normal file
0
doc/facade-and-adaptor.pdf
Executable file → Normal file
@ -1,3 +1,7 @@
|
|||||||
|
.. Distributed under the Boost
|
||||||
|
.. Software License, Version 1.0. (See accompanying
|
||||||
|
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
+++++++++++++++++++++++++++++
|
+++++++++++++++++++++++++++++
|
||||||
Iterator Facade and Adaptor
|
Iterator Facade and Adaptor
|
||||||
+++++++++++++++++++++++++++++
|
+++++++++++++++++++++++++++++
|
||||||
|
0
doc/facade_iterator_category.rst
Executable file → Normal file
0
doc/facade_iterator_category.rst
Executable file → Normal file
@ -3,15 +3,16 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="generator" content="Docutils 0.3.6: http://docutils.sourceforge.net/" />
|
<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
|
||||||
<title>Filter Iterator</title>
|
<title>Filter Iterator</title>
|
||||||
<meta name="author" content="David Abrahams, Jeremy Siek, Thomas Witt" />
|
<meta name="author" content="David Abrahams, Jeremy Siek, Thomas Witt" />
|
||||||
<meta name="organization" content="Boost Consulting, Indiana University Open Systems Lab, University of Hanover Institute for Transport Railway Operation and Construction" />
|
<meta name="organization" content="Boost Consulting, Indiana University Open Systems Lab, University of Hanover Institute for Transport Railway Operation and Construction" />
|
||||||
<meta name="date" content="2004-11-01" />
|
<meta name="date" content="2006-09-11" />
|
||||||
<meta name="copyright" content="Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003." />
|
<meta name="copyright" content="Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003." />
|
||||||
<link rel="stylesheet" href="default.css" type="text/css" />
|
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
<div class="document" id="filter-iterator">
|
||||||
<h1 class="title">Filter Iterator</h1>
|
<h1 class="title">Filter Iterator</h1>
|
||||||
<table class="docinfo" frame="void" rules="none">
|
<table class="docinfo" frame="void" rules="none">
|
||||||
<col class="docinfo-name" />
|
<col class="docinfo-name" />
|
||||||
@ -20,27 +21,32 @@
|
|||||||
<tr><th class="docinfo-name">Author:</th>
|
<tr><th class="docinfo-name">Author:</th>
|
||||||
<td>David Abrahams, Jeremy Siek, Thomas Witt</td></tr>
|
<td>David Abrahams, Jeremy Siek, Thomas Witt</td></tr>
|
||||||
<tr><th class="docinfo-name">Contact:</th>
|
<tr><th class="docinfo-name">Contact:</th>
|
||||||
<td><a class="first reference" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a>, <a class="reference" href="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</a>, <a class="last reference" href="mailto:witt@ive.uni-hannover.de">witt@ive.uni-hannover.de</a></td></tr>
|
<td><a class="first reference external" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a>, <a class="reference external" href="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</a>, <a class="last reference external" href="mailto:witt@ive.uni-hannover.de">witt@ive.uni-hannover.de</a></td></tr>
|
||||||
<tr><th class="docinfo-name">Organization:</th>
|
<tr><th class="docinfo-name">Organization:</th>
|
||||||
<td><a class="first reference" href="http://www.boost-consulting.com">Boost Consulting</a>, Indiana University <a class="reference" href="http://www.osl.iu.edu">Open Systems
|
<td><a class="first reference external" href="http://www.boost-consulting.com">Boost Consulting</a>, Indiana University <a class="reference external" href="http://www.osl.iu.edu">Open Systems
|
||||||
Lab</a>, University of Hanover <a class="last reference" href="http://www.ive.uni-hannover.de">Institute for Transport
|
Lab</a>, University of Hanover <a class="last reference external" href="http://www.ive.uni-hannover.de">Institute for Transport
|
||||||
Railway Operation and Construction</a></td></tr>
|
Railway Operation and Construction</a></td></tr>
|
||||||
<tr><th class="docinfo-name">Date:</th>
|
<tr><th class="docinfo-name">Date:</th>
|
||||||
<td>2004-11-01</td></tr>
|
<td>2006-09-11</td></tr>
|
||||||
<tr><th class="docinfo-name">Copyright:</th>
|
<tr><th class="docinfo-name">Copyright:</th>
|
||||||
<td>Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003.</td></tr>
|
<td>Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003.</td></tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<div class="document" id="filter-iterator">
|
<!-- Distributed under the Boost -->
|
||||||
<table class="field-list" frame="void" rules="none">
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
|
<table class="docutils field-list" frame="void" rules="none">
|
||||||
<col class="field-name" />
|
<col class="field-name" />
|
||||||
<col class="field-body" />
|
<col class="field-body" />
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<tr class="field"><th class="field-name">abstract:</th><td class="field-body">The filter iterator adaptor creates a view of an iterator range in
|
<tr class="field"><th class="field-name">abstract:</th><td class="field-body"><!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
||||||
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
|
The filter iterator adaptor creates a view of an iterator range in
|
||||||
which some elements of the range are skipped. A predicate function
|
which some elements of the range are skipped. A predicate function
|
||||||
object controls which elements are skipped. When the predicate is
|
object controls which elements are skipped. When the predicate is
|
||||||
applied to an element, if it returns <tt class="literal"><span class="pre">true</span></tt> then the element is
|
applied to an element, if it returns <tt class="docutils literal"><span class="pre">true</span></tt> then the element is
|
||||||
retained and if it returns <tt class="literal"><span class="pre">false</span></tt> then the element is skipped
|
retained and if it returns <tt class="docutils literal"><span class="pre">false</span></tt> then the element is skipped
|
||||||
over. When skipping over elements, it is necessary for the filter
|
over. When skipping over elements, it is necessary for the filter
|
||||||
adaptor to know when to stop so as to avoid going past the end of the
|
adaptor to know when to stop so as to avoid going past the end of the
|
||||||
underlying range. A filter iterator is therefore constructed with pair
|
underlying range. A filter iterator is therefore constructed with pair
|
||||||
@ -50,17 +56,17 @@ sequence to be traversed.</td>
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<div class="contents topic" id="table-of-contents">
|
<div class="contents topic" id="table-of-contents">
|
||||||
<p class="topic-title first"><a name="table-of-contents">Table of Contents</a></p>
|
<p class="topic-title first">Table of Contents</p>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li><a class="reference" href="#filter-iterator-synopsis" id="id3" name="id3"><tt class="literal"><span class="pre">filter_iterator</span></tt> synopsis</a></li>
|
<li><a class="reference internal" href="#filter-iterator-synopsis" id="id2"><tt class="docutils literal"><span class="pre">filter_iterator</span></tt> synopsis</a></li>
|
||||||
<li><a class="reference" href="#filter-filter-iterator" id="id4" name="id4"><tt class="literal"><span class="pre">filter_iterator</span></tt> requirements</a></li>
|
<li><a class="reference internal" href="#filter-iterator-requirements" id="id3"><tt class="docutils literal"><span class="pre">filter_iterator</span></tt> requirements</a></li>
|
||||||
<li><a class="reference" href="#filter-iterator-models" id="id5" name="id5"><tt class="literal"><span class="pre">filter_iterator</span></tt> models</a></li>
|
<li><a class="reference internal" href="#filter-iterator-models" id="id4"><tt class="docutils literal"><span class="pre">filter_iterator</span></tt> models</a></li>
|
||||||
<li><a class="reference" href="#id1" id="id6" name="id6"><tt class="literal"><span class="pre">filter_iterator</span></tt> operations</a></li>
|
<li><a class="reference internal" href="#filter-iterator-operations" id="id5"><tt class="docutils literal"><span class="pre">filter_iterator</span></tt> operations</a></li>
|
||||||
<li><a class="reference" href="#example" id="id7" name="id7">Example</a></li>
|
<li><a class="reference internal" href="#example" id="id6">Example</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="filter-iterator-synopsis">
|
<div class="section" id="filter-iterator-synopsis">
|
||||||
<h1><a class="toc-backref" href="#id3" name="filter-iterator-synopsis"><tt class="literal"><span class="pre">filter_iterator</span></tt> synopsis</a></h1>
|
<h1><a class="toc-backref" href="#id2"><tt class="docutils literal"><span class="pre">filter_iterator</span></tt> synopsis</a></h1>
|
||||||
<!-- Copyright David Abrahams, Jeremy Siek, and Thomas Witt -->
|
<!-- Copyright David Abrahams, Jeremy Siek, and Thomas Witt -->
|
||||||
<!-- 2004. Use, modification and distribution is subject to the Boost -->
|
<!-- 2004. Use, modification and distribution is subject to the Boost -->
|
||||||
<!-- Software License, Version 1.0. (See accompanying file -->
|
<!-- Software License, Version 1.0. (See accompanying file -->
|
||||||
@ -95,39 +101,39 @@ private:
|
|||||||
Iterator m_end; // exposition only
|
Iterator m_end; // exposition only
|
||||||
};
|
};
|
||||||
</pre>
|
</pre>
|
||||||
<p>If <tt class="literal"><span class="pre">Iterator</span></tt> models Readable Lvalue Iterator and Bidirectional Traversal
|
<p>If <tt class="docutils literal"><span class="pre">Iterator</span></tt> models Readable Lvalue Iterator and Bidirectional Traversal
|
||||||
Iterator then <tt class="literal"><span class="pre">iterator_category</span></tt> is convertible to
|
Iterator then <tt class="docutils literal"><span class="pre">iterator_category</span></tt> is convertible to
|
||||||
<tt class="literal"><span class="pre">std::bidirectional_iterator_tag</span></tt>.
|
<tt class="docutils literal"><span class="pre">std::bidirectional_iterator_tag</span></tt>.
|
||||||
Otherwise, if <tt class="literal"><span class="pre">Iterator</span></tt> models Readable Lvalue Iterator and Forward Traversal
|
Otherwise, if <tt class="docutils literal"><span class="pre">Iterator</span></tt> models Readable Lvalue Iterator and Forward Traversal
|
||||||
Iterator then <tt class="literal"><span class="pre">iterator_category</span></tt> is convertible to
|
Iterator then <tt class="docutils literal"><span class="pre">iterator_category</span></tt> is convertible to
|
||||||
<tt class="literal"><span class="pre">std::forward_iterator_tag</span></tt>.
|
<tt class="docutils literal"><span class="pre">std::forward_iterator_tag</span></tt>.
|
||||||
Otherwise <tt class="literal"><span class="pre">iterator_category</span></tt> is
|
Otherwise <tt class="docutils literal"><span class="pre">iterator_category</span></tt> is
|
||||||
convertible to <tt class="literal"><span class="pre">std::input_iterator_tag</span></tt>.</p>
|
convertible to <tt class="docutils literal"><span class="pre">std::input_iterator_tag</span></tt>.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="filter-filter-iterator">
|
<div class="section" id="filter-iterator-requirements">
|
||||||
<h1><a class="toc-backref" href="#id4" name="filter-filter-iterator"><tt class="literal"><span class="pre">filter_iterator</span></tt> requirements</a></h1>
|
<h1><a class="toc-backref" href="#id3"><tt class="docutils literal"><span class="pre">filter_iterator</span></tt> requirements</a></h1>
|
||||||
<p>The <tt class="literal"><span class="pre">Iterator</span></tt> argument shall meet the requirements of Readable
|
<p>The <tt class="docutils literal"><span class="pre">Iterator</span></tt> argument shall meet the requirements of Readable
|
||||||
Iterator and Single Pass Iterator or it shall meet the requirements of
|
Iterator and Single Pass Iterator or it shall meet the requirements of
|
||||||
Input Iterator.</p>
|
Input Iterator.</p>
|
||||||
<p>The <tt class="literal"><span class="pre">Predicate</span></tt> argument must be Assignable, Copy Constructible, and
|
<p>The <tt class="docutils literal"><span class="pre">Predicate</span></tt> argument must be Assignable, Copy Constructible, and
|
||||||
the expression <tt class="literal"><span class="pre">p(x)</span></tt> must be valid where <tt class="literal"><span class="pre">p</span></tt> is an object of type
|
the expression <tt class="docutils literal"><span class="pre">p(x)</span></tt> must be valid where <tt class="docutils literal"><span class="pre">p</span></tt> is an object of type
|
||||||
<tt class="literal"><span class="pre">Predicate</span></tt>, <tt class="literal"><span class="pre">x</span></tt> is an object of type
|
<tt class="docutils literal"><span class="pre">Predicate</span></tt>, <tt class="docutils literal"><span class="pre">x</span></tt> is an object of type
|
||||||
<tt class="literal"><span class="pre">iterator_traits<Iterator>::value_type</span></tt>, and where the type of
|
<tt class="docutils literal"><span class="pre">iterator_traits<Iterator>::value_type</span></tt>, and where the type of
|
||||||
<tt class="literal"><span class="pre">p(x)</span></tt> must be convertible to <tt class="literal"><span class="pre">bool</span></tt>.</p>
|
<tt class="docutils literal"><span class="pre">p(x)</span></tt> must be convertible to <tt class="docutils literal"><span class="pre">bool</span></tt>.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="filter-iterator-models">
|
<div class="section" id="filter-iterator-models">
|
||||||
<h1><a class="toc-backref" href="#id5" name="filter-iterator-models"><tt class="literal"><span class="pre">filter_iterator</span></tt> models</a></h1>
|
<h1><a class="toc-backref" href="#id4"><tt class="docutils literal"><span class="pre">filter_iterator</span></tt> models</a></h1>
|
||||||
<p>The concepts that <tt class="literal"><span class="pre">filter_iterator</span></tt> models are dependent on which
|
<p>The concepts that <tt class="docutils literal"><span class="pre">filter_iterator</span></tt> models are dependent on which
|
||||||
concepts the <tt class="literal"><span class="pre">Iterator</span></tt> argument models, as specified in the
|
concepts the <tt class="docutils literal"><span class="pre">Iterator</span></tt> argument models, as specified in the
|
||||||
following tables.</p>
|
following tables.</p>
|
||||||
<table border="1" class="table">
|
<table border="1" class="docutils">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col width="44%" />
|
<col width="44%" />
|
||||||
<col width="56%" />
|
<col width="56%" />
|
||||||
</colgroup>
|
</colgroup>
|
||||||
<thead valign="bottom">
|
<thead valign="bottom">
|
||||||
<tr><th>If <tt class="literal"><span class="pre">Iterator</span></tt> models</th>
|
<tr><th class="head">If <tt class="docutils literal"><span class="pre">Iterator</span></tt> models</th>
|
||||||
<th>then <tt class="literal"><span class="pre">filter_iterator</span></tt> models</th>
|
<th class="head">then <tt class="docutils literal"><span class="pre">filter_iterator</span></tt> models</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
@ -142,14 +148,14 @@ following tables.</p>
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<table border="1" class="table">
|
<table border="1" class="docutils">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col width="41%" />
|
<col width="41%" />
|
||||||
<col width="59%" />
|
<col width="59%" />
|
||||||
</colgroup>
|
</colgroup>
|
||||||
<thead valign="bottom">
|
<thead valign="bottom">
|
||||||
<tr><th>If <tt class="literal"><span class="pre">Iterator</span></tt> models</th>
|
<tr><th class="head">If <tt class="docutils literal"><span class="pre">Iterator</span></tt> models</th>
|
||||||
<th>then <tt class="literal"><span class="pre">filter_iterator</span></tt> models</th>
|
<th class="head">then <tt class="docutils literal"><span class="pre">filter_iterator</span></tt> models</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
@ -164,14 +170,14 @@ following tables.</p>
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<table border="1" class="table">
|
<table border="1" class="docutils">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col width="63%" />
|
<col width="63%" />
|
||||||
<col width="38%" />
|
<col width="38%" />
|
||||||
</colgroup>
|
</colgroup>
|
||||||
<thead valign="bottom">
|
<thead valign="bottom">
|
||||||
<tr><th>If <tt class="literal"><span class="pre">Iterator</span></tt> models</th>
|
<tr><th class="head">If <tt class="docutils literal"><span class="pre">Iterator</span></tt> models</th>
|
||||||
<th>then <tt class="literal"><span class="pre">filter_iterator</span></tt> models</th>
|
<th class="head">then <tt class="docutils literal"><span class="pre">filter_iterator</span></tt> models</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
@ -189,49 +195,49 @@ following tables.</p>
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<p><tt class="literal"><span class="pre">filter_iterator<P1,</span> <span class="pre">X></span></tt> is interoperable with <tt class="literal"><span class="pre">filter_iterator<P2,</span> <span class="pre">Y></span></tt>
|
<p><tt class="docutils literal"><span class="pre">filter_iterator<P1,</span> <span class="pre">X></span></tt> is interoperable with <tt class="docutils literal"><span class="pre">filter_iterator<P2,</span> <span class="pre">Y></span></tt>
|
||||||
if and only if <tt class="literal"><span class="pre">X</span></tt> is interoperable with <tt class="literal"><span class="pre">Y</span></tt>.</p>
|
if and only if <tt class="docutils literal"><span class="pre">X</span></tt> is interoperable with <tt class="docutils literal"><span class="pre">Y</span></tt>.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="id1">
|
<div class="section" id="filter-iterator-operations">
|
||||||
<h1><a class="toc-backref" href="#id6" name="id1"><tt class="literal"><span class="pre">filter_iterator</span></tt> operations</a></h1>
|
<h1><a class="toc-backref" href="#id5"><tt class="docutils literal"><span class="pre">filter_iterator</span></tt> operations</a></h1>
|
||||||
<p>In addition to those operations required by the concepts that
|
<p>In addition to those operations required by the concepts that
|
||||||
<tt class="literal"><span class="pre">filter_iterator</span></tt> models, <tt class="literal"><span class="pre">filter_iterator</span></tt> provides the following
|
<tt class="docutils literal"><span class="pre">filter_iterator</span></tt> models, <tt class="docutils literal"><span class="pre">filter_iterator</span></tt> provides the following
|
||||||
operations.</p>
|
operations.</p>
|
||||||
<p><tt class="literal"><span class="pre">filter_iterator();</span></tt></p>
|
<p><tt class="docutils literal"><span class="pre">filter_iterator();</span></tt></p>
|
||||||
<table class="field-list" frame="void" rules="none">
|
<table class="docutils field-list" frame="void" rules="none">
|
||||||
<col class="field-name" />
|
<col class="field-name" />
|
||||||
<col class="field-body" />
|
<col class="field-body" />
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<tr class="field"><th class="field-name">Requires:</th><td class="field-body"><tt class="literal"><span class="pre">Predicate</span></tt> and <tt class="literal"><span class="pre">Iterator</span></tt> must be Default Constructible.</td>
|
<tr class="field"><th class="field-name">Requires:</th><td class="field-body"><tt class="docutils literal"><span class="pre">Predicate</span></tt> and <tt class="docutils literal"><span class="pre">Iterator</span></tt> must be Default Constructible.</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="field"><th class="field-name">Effects:</th><td class="field-body">Constructs a <tt class="literal"><span class="pre">filter_iterator</span></tt> whose``m_pred``, <tt class="literal"><span class="pre">m_iter</span></tt>, and <tt class="literal"><span class="pre">m_end</span></tt>
|
<tr class="field"><th class="field-name">Effects:</th><td class="field-body">Constructs a <tt class="docutils literal"><span class="pre">filter_iterator</span></tt> whose``m_pred``, <tt class="docutils literal"><span class="pre">m_iter</span></tt>, and <tt class="docutils literal"><span class="pre">m_end</span></tt>
|
||||||
members are a default constructed.</td>
|
members are a default constructed.</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<p><tt class="literal"><span class="pre">filter_iterator(Predicate</span> <span class="pre">f,</span> <span class="pre">Iterator</span> <span class="pre">x,</span> <span class="pre">Iterator</span> <span class="pre">end</span> <span class="pre">=</span> <span class="pre">Iterator());</span></tt></p>
|
<p><tt class="docutils literal"><span class="pre">filter_iterator(Predicate</span> <span class="pre">f,</span> <span class="pre">Iterator</span> <span class="pre">x,</span> <span class="pre">Iterator</span> <span class="pre">end</span> <span class="pre">=</span> <span class="pre">Iterator());</span></tt></p>
|
||||||
<table class="field-list" frame="void" rules="none">
|
<table class="docutils field-list" frame="void" rules="none">
|
||||||
<col class="field-name" />
|
<col class="field-name" />
|
||||||
<col class="field-body" />
|
<col class="field-body" />
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<tr class="field"><th class="field-name">Effects:</th><td class="field-body">Constructs a <tt class="literal"><span class="pre">filter_iterator</span></tt> where <tt class="literal"><span class="pre">m_iter</span></tt> is either
|
<tr class="field"><th class="field-name">Effects:</th><td class="field-body">Constructs a <tt class="docutils literal"><span class="pre">filter_iterator</span></tt> where <tt class="docutils literal"><span class="pre">m_iter</span></tt> is either
|
||||||
the first position in the range <tt class="literal"><span class="pre">[x,end)</span></tt> such that <tt class="literal"><span class="pre">f(*m_iter)</span> <span class="pre">==</span> <span class="pre">true</span></tt>
|
the first position in the range <tt class="docutils literal"><span class="pre">[x,end)</span></tt> such that <tt class="docutils literal"><span class="pre">f(*m_iter)</span> <span class="pre">==</span> <span class="pre">true</span></tt>
|
||||||
or else``m_iter == end``. The member <tt class="literal"><span class="pre">m_pred</span></tt> is constructed from
|
or else``m_iter == end``. The member <tt class="docutils literal"><span class="pre">m_pred</span></tt> is constructed from
|
||||||
<tt class="literal"><span class="pre">f</span></tt> and <tt class="literal"><span class="pre">m_end</span></tt> from <tt class="literal"><span class="pre">end</span></tt>.</td>
|
<tt class="docutils literal"><span class="pre">f</span></tt> and <tt class="docutils literal"><span class="pre">m_end</span></tt> from <tt class="docutils literal"><span class="pre">end</span></tt>.</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<p><tt class="literal"><span class="pre">filter_iterator(Iterator</span> <span class="pre">x,</span> <span class="pre">Iterator</span> <span class="pre">end</span> <span class="pre">=</span> <span class="pre">Iterator());</span></tt></p>
|
<p><tt class="docutils literal"><span class="pre">filter_iterator(Iterator</span> <span class="pre">x,</span> <span class="pre">Iterator</span> <span class="pre">end</span> <span class="pre">=</span> <span class="pre">Iterator());</span></tt></p>
|
||||||
<table class="field-list" frame="void" rules="none">
|
<table class="docutils field-list" frame="void" rules="none">
|
||||||
<col class="field-name" />
|
<col class="field-name" />
|
||||||
<col class="field-body" />
|
<col class="field-body" />
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<tr class="field"><th class="field-name">Requires:</th><td class="field-body"><tt class="literal"><span class="pre">Predicate</span></tt> must be Default Constructible and
|
<tr class="field"><th class="field-name">Requires:</th><td class="field-body"><tt class="docutils literal"><span class="pre">Predicate</span></tt> must be Default Constructible and
|
||||||
<tt class="literal"><span class="pre">Predicate</span></tt> is a class type (not a function pointer).</td>
|
<tt class="docutils literal"><span class="pre">Predicate</span></tt> is a class type (not a function pointer).</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="field"><th class="field-name">Effects:</th><td class="field-body">Constructs a <tt class="literal"><span class="pre">filter_iterator</span></tt> where <tt class="literal"><span class="pre">m_iter</span></tt> is either
|
<tr class="field"><th class="field-name">Effects:</th><td class="field-body">Constructs a <tt class="docutils literal"><span class="pre">filter_iterator</span></tt> where <tt class="docutils literal"><span class="pre">m_iter</span></tt> is either
|
||||||
the first position in the range <tt class="literal"><span class="pre">[x,end)</span></tt> such that <tt class="literal"><span class="pre">m_pred(*m_iter)</span> <span class="pre">==</span> <span class="pre">true</span></tt>
|
the first position in the range <tt class="docutils literal"><span class="pre">[x,end)</span></tt> such that <tt class="docutils literal"><span class="pre">m_pred(*m_iter)</span> <span class="pre">==</span> <span class="pre">true</span></tt>
|
||||||
or else``m_iter == end``. The member <tt class="literal"><span class="pre">m_pred</span></tt> is default constructed.</td>
|
or else``m_iter == end``. The member <tt class="docutils literal"><span class="pre">m_pred</span></tt> is default constructed.</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
@ -242,71 +248,74 @@ filter_iterator(
|
|||||||
, typename enable_if_convertible<OtherIterator, Iterator>::type* = 0 // exposition
|
, typename enable_if_convertible<OtherIterator, Iterator>::type* = 0 // exposition
|
||||||
);``
|
);``
|
||||||
</pre>
|
</pre>
|
||||||
<table class="field-list" frame="void" rules="none">
|
<table class="docutils field-list" frame="void" rules="none">
|
||||||
<col class="field-name" />
|
<col class="field-name" />
|
||||||
<col class="field-body" />
|
<col class="field-body" />
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<tr class="field"><th class="field-name">Requires:</th><td class="field-body"><tt class="literal"><span class="pre">OtherIterator</span></tt> is implicitly convertible to <tt class="literal"><span class="pre">Iterator</span></tt>.</td>
|
<tr class="field"><th class="field-name">Requires:</th><td class="field-body"><tt class="docutils literal"><span class="pre">OtherIterator</span></tt> is implicitly convertible to <tt class="docutils literal"><span class="pre">Iterator</span></tt>.</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="field"><th class="field-name">Effects:</th><td class="field-body">Constructs a filter iterator whose members are copied from <tt class="literal"><span class="pre">t</span></tt>.</td>
|
<tr class="field"><th class="field-name">Effects:</th><td class="field-body">Constructs a filter iterator whose members are copied from <tt class="docutils literal"><span class="pre">t</span></tt>.</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<p><tt class="literal"><span class="pre">Predicate</span> <span class="pre">predicate()</span> <span class="pre">const;</span></tt></p>
|
<p><tt class="docutils literal"><span class="pre">Predicate</span> <span class="pre">predicate()</span> <span class="pre">const;</span></tt></p>
|
||||||
<table class="field-list" frame="void" rules="none">
|
<table class="docutils field-list" frame="void" rules="none">
|
||||||
<col class="field-name" />
|
<col class="field-name" />
|
||||||
<col class="field-body" />
|
<col class="field-body" />
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<tr class="field"><th class="field-name">Returns:</th><td class="field-body"><tt class="literal"><span class="pre">m_pred</span></tt></td>
|
<tr class="field"><th class="field-name">Returns:</th><td class="field-body"><tt class="docutils literal"><span class="pre">m_pred</span></tt></td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<p><tt class="literal"><span class="pre">Iterator</span> <span class="pre">end()</span> <span class="pre">const;</span></tt></p>
|
<p><tt class="docutils literal"><span class="pre">Iterator</span> <span class="pre">end()</span> <span class="pre">const;</span></tt></p>
|
||||||
<table class="field-list" frame="void" rules="none">
|
<table class="docutils field-list" frame="void" rules="none">
|
||||||
<col class="field-name" />
|
<col class="field-name" />
|
||||||
<col class="field-body" />
|
<col class="field-body" />
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<tr class="field"><th class="field-name">Returns:</th><td class="field-body"><tt class="literal"><span class="pre">m_end</span></tt></td>
|
<tr class="field"><th class="field-name">Returns:</th><td class="field-body"><tt class="docutils literal"><span class="pre">m_end</span></tt></td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<p><tt class="literal"><span class="pre">Iterator</span> <span class="pre">const&</span> <span class="pre">base()</span> <span class="pre">const;</span></tt></p>
|
<p><tt class="docutils literal"><span class="pre">Iterator</span> <span class="pre">const&</span> <span class="pre">base()</span> <span class="pre">const;</span></tt></p>
|
||||||
<table class="field-list" frame="void" rules="none">
|
<table class="docutils field-list" frame="void" rules="none">
|
||||||
<col class="field-name" />
|
<col class="field-name" />
|
||||||
<col class="field-body" />
|
<col class="field-body" />
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<tr class="field"><th class="field-name">Returns:</th><td class="field-body"><tt class="literal"><span class="pre">m_iterator</span></tt></td>
|
<tr class="field"><th class="field-name">Returns:</th><td class="field-body"><tt class="docutils literal"><span class="pre">m_iterator</span></tt></td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<p><tt class="literal"><span class="pre">reference</span> <span class="pre">operator*()</span> <span class="pre">const;</span></tt></p>
|
<p><tt class="docutils literal"><span class="pre">reference</span> <span class="pre">operator*()</span> <span class="pre">const;</span></tt></p>
|
||||||
<table class="field-list" frame="void" rules="none">
|
<table class="docutils field-list" frame="void" rules="none">
|
||||||
<col class="field-name" />
|
<col class="field-name" />
|
||||||
<col class="field-body" />
|
<col class="field-body" />
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<tr class="field"><th class="field-name">Returns:</th><td class="field-body"><tt class="literal"><span class="pre">*m_iter</span></tt></td>
|
<tr class="field"><th class="field-name">Returns:</th><td class="field-body"><tt class="docutils literal"><span class="pre">*m_iter</span></tt></td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<p><tt class="literal"><span class="pre">filter_iterator&</span> <span class="pre">operator++();</span></tt></p>
|
<p><tt class="docutils literal"><span class="pre">filter_iterator&</span> <span class="pre">operator++();</span></tt></p>
|
||||||
<table class="field-list" frame="void" rules="none">
|
<table class="docutils field-list" frame="void" rules="none">
|
||||||
<col class="field-name" />
|
<col class="field-name" />
|
||||||
<col class="field-body" />
|
<col class="field-body" />
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<tr class="field"><th class="field-name">Effects:</th><td class="field-body">Increments <tt class="literal"><span class="pre">m_iter</span></tt> and then continues to
|
<tr class="field"><th class="field-name">Effects:</th><td class="field-body">Increments <tt class="docutils literal"><span class="pre">m_iter</span></tt> and then continues to
|
||||||
increment <tt class="literal"><span class="pre">m_iter</span></tt> until either <tt class="literal"><span class="pre">m_iter</span> <span class="pre">==</span> <span class="pre">m_end</span></tt>
|
increment <tt class="docutils literal"><span class="pre">m_iter</span></tt> until either <tt class="docutils literal"><span class="pre">m_iter</span> <span class="pre">==</span> <span class="pre">m_end</span></tt>
|
||||||
or <tt class="literal"><span class="pre">m_pred(*m_iter)</span> <span class="pre">==</span> <span class="pre">true</span></tt>.</td>
|
or <tt class="docutils literal"><span class="pre">m_pred(*m_iter)</span> <span class="pre">==</span> <span class="pre">true</span></tt>.</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="field"><th class="field-name">Returns:</th><td class="field-body"><tt class="literal"><span class="pre">*this</span></tt></td>
|
<tr class="field"><th class="field-name">Returns:</th><td class="field-body"><tt class="docutils literal"><span class="pre">*this</span></tt></td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
||||||
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
<pre class="literal-block">
|
<pre class="literal-block">
|
||||||
template <class Predicate, class Iterator>
|
template <class Predicate, class Iterator>
|
||||||
filter_iterator<Predicate,Iterator>
|
filter_iterator<Predicate,Iterator>
|
||||||
make_filter_iterator(Predicate f, Iterator x, Iterator end = Iterator());
|
make_filter_iterator(Predicate f, Iterator x, Iterator end = Iterator());
|
||||||
</pre>
|
</pre>
|
||||||
<table class="field-list" frame="void" rules="none">
|
<table class="docutils field-list" frame="void" rules="none">
|
||||||
<col class="field-name" />
|
<col class="field-name" />
|
||||||
<col class="field-body" />
|
<col class="field-body" />
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
@ -319,7 +328,7 @@ template <class Predicate, class Iterator>
|
|||||||
filter_iterator<Predicate,Iterator>
|
filter_iterator<Predicate,Iterator>
|
||||||
make_filter_iterator(Iterator x, Iterator end = Iterator());
|
make_filter_iterator(Iterator x, Iterator end = Iterator());
|
||||||
</pre>
|
</pre>
|
||||||
<table class="field-list" frame="void" rules="none">
|
<table class="docutils field-list" frame="void" rules="none">
|
||||||
<col class="field-name" />
|
<col class="field-name" />
|
||||||
<col class="field-body" />
|
<col class="field-body" />
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
@ -327,13 +336,16 @@ make_filter_iterator(Iterator x, Iterator end = Iterator());
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
||||||
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="example">
|
<div class="section" id="example">
|
||||||
<h1><a class="toc-backref" href="#id7" name="example">Example</a></h1>
|
<h1><a class="toc-backref" href="#id6">Example</a></h1>
|
||||||
<p>This example uses <tt class="literal"><span class="pre">filter_iterator</span></tt> and then
|
<p>This example uses <tt class="docutils literal"><span class="pre">filter_iterator</span></tt> and then
|
||||||
<tt class="literal"><span class="pre">make_filter_iterator</span></tt> to output only the positive integers from an
|
<tt class="docutils literal"><span class="pre">make_filter_iterator</span></tt> to output only the positive integers from an
|
||||||
array of integers. Then <tt class="literal"><span class="pre">make_filter_iterator</span></tt> is is used to output
|
array of integers. Then <tt class="docutils literal"><span class="pre">make_filter_iterator</span></tt> is is used to output
|
||||||
the integers greater than <tt class="literal"><span class="pre">-2</span></tt>.</p>
|
the integers greater than <tt class="docutils literal"><span class="pre">-2</span></tt>.</p>
|
||||||
<pre class="literal-block">
|
<pre class="literal-block">
|
||||||
struct is_positive_number {
|
struct is_positive_number {
|
||||||
bool operator()(int x) { return 0 < x; }
|
bool operator()(int x) { return 0 < x; }
|
||||||
@ -388,13 +400,14 @@ int main()
|
|||||||
4 5 8
|
4 5 8
|
||||||
0 -1 4 5 8
|
0 -1 4 5 8
|
||||||
</pre>
|
</pre>
|
||||||
<p>The source code for this example can be found <a class="reference" href="../example/filter_iterator_example.cpp">here</a>.</p>
|
<p>The source code for this example can be found <a class="reference external" href="../example/filter_iterator_example.cpp">here</a>.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<hr class="footer" />
|
|
||||||
<div class="footer">
|
<div class="footer">
|
||||||
<a class="reference" href="filter_iterator.rst">View document source</a>.
|
<hr class="footer" />
|
||||||
Generated by <a class="reference" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
<a class="reference external" href="filter_iterator.rst">View document source</a>.
|
||||||
|
Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
0
doc/filter_iterator.pdf
Executable file → Normal file
0
doc/filter_iterator.pdf
Executable file → Normal file
@ -1,3 +1,7 @@
|
|||||||
|
.. Distributed under the Boost
|
||||||
|
.. Software License, Version 1.0. (See accompanying
|
||||||
|
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
+++++++++++++++++
|
+++++++++++++++++
|
||||||
Filter Iterator
|
Filter Iterator
|
||||||
+++++++++++++++++
|
+++++++++++++++++
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
.. Copyright David Abrahams 2006. Distributed under the Boost
|
||||||
|
.. Software License, Version 1.0. (See accompanying
|
||||||
|
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
The filter iterator adaptor creates a view of an iterator range in
|
The filter iterator adaptor creates a view of an iterator range in
|
||||||
which some elements of the range are skipped. A predicate function
|
which some elements of the range are skipped. A predicate function
|
||||||
object controls which elements are skipped. When the predicate is
|
object controls which elements are skipped. When the predicate is
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
|
.. Copyright David Abrahams 2006. Distributed under the Boost
|
||||||
|
.. Software License, Version 1.0. (See accompanying
|
||||||
|
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
Example
|
Example
|
||||||
.......
|
.......
|
||||||
|
@ -1,259 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" ?>
|
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
|
||||||
<head>
|
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
||||||
<meta name="generator" content="Docutils 0.3.6: http://docutils.sourceforge.net/" />
|
|
||||||
<title></title>
|
|
||||||
<link rel="stylesheet" href="default.css" type="text/css" />
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="document">
|
|
||||||
<!-- Copyright David Abrahams, Jeremy Siek, and Thomas Witt -->
|
|
||||||
<!-- 2004. Use, modification and distribution is subject to the Boost -->
|
|
||||||
<!-- Software License, Version 1.0. (See accompanying file -->
|
|
||||||
<!-- LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
|
||||||
<pre class="literal-block">
|
|
||||||
template <class Predicate, class Iterator>
|
|
||||||
class filter_iterator
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
typedef iterator_traits<Iterator>::value_type value_type;
|
|
||||||
typedef iterator_traits<Iterator>::reference reference;
|
|
||||||
typedef iterator_traits<Iterator>::pointer pointer;
|
|
||||||
typedef iterator_traits<Iterator>::difference_type difference_type;
|
|
||||||
typedef /* see below */ iterator_category;
|
|
||||||
|
|
||||||
filter_iterator();
|
|
||||||
filter_iterator(Predicate f, Iterator x, Iterator end = Iterator());
|
|
||||||
filter_iterator(Iterator x, Iterator end = Iterator());
|
|
||||||
template<class OtherIterator>
|
|
||||||
filter_iterator(
|
|
||||||
filter_iterator<Predicate, OtherIterator> const& t
|
|
||||||
, typename enable_if_convertible<OtherIterator, Iterator>::type* = 0 // exposition
|
|
||||||
);
|
|
||||||
Predicate predicate() const;
|
|
||||||
Iterator end() const;
|
|
||||||
Iterator const& base() const;
|
|
||||||
reference operator*() const;
|
|
||||||
filter_iterator& operator++();
|
|
||||||
private:
|
|
||||||
Predicate m_pred; // exposition only
|
|
||||||
Iterator m_iter; // exposition only
|
|
||||||
Iterator m_end; // exposition only
|
|
||||||
};
|
|
||||||
</pre>
|
|
||||||
<p>If <tt class="literal"><span class="pre">Iterator</span></tt> models Readable Lvalue Iterator and Bidirectional Traversal
|
|
||||||
Iterator then <tt class="literal"><span class="pre">iterator_category</span></tt> is convertible to
|
|
||||||
<tt class="literal"><span class="pre">std::bidirectional_iterator_tag</span></tt>.
|
|
||||||
Otherwise, if <tt class="literal"><span class="pre">Iterator</span></tt> models Readable Lvalue Iterator and Forward Traversal
|
|
||||||
Iterator then <tt class="literal"><span class="pre">iterator_category</span></tt> is convertible to
|
|
||||||
<tt class="literal"><span class="pre">std::forward_iterator_tag</span></tt>.
|
|
||||||
Otherwise <tt class="literal"><span class="pre">iterator_category</span></tt> is
|
|
||||||
convertible to <tt class="literal"><span class="pre">std::input_iterator_tag</span></tt>.</p>
|
|
||||||
<div class="section" id="filter-iterator">
|
|
||||||
<h1><a name="filter-iterator"><tt class="literal"><span class="pre">filter_iterator</span></tt> requirements</a></h1>
|
|
||||||
<p>The <tt class="literal"><span class="pre">Iterator</span></tt> argument shall meet the requirements of Readable
|
|
||||||
Iterator and Single Pass Iterator or it shall meet the requirements of
|
|
||||||
Input Iterator.</p>
|
|
||||||
<p>The <tt class="literal"><span class="pre">Predicate</span></tt> argument must be Assignable, Copy Constructible, and
|
|
||||||
the expression <tt class="literal"><span class="pre">p(x)</span></tt> must be valid where <tt class="literal"><span class="pre">p</span></tt> is an object of type
|
|
||||||
<tt class="literal"><span class="pre">Predicate</span></tt>, <tt class="literal"><span class="pre">x</span></tt> is an object of type
|
|
||||||
<tt class="literal"><span class="pre">iterator_traits<Iterator>::value_type</span></tt>, and where the type of
|
|
||||||
<tt class="literal"><span class="pre">p(x)</span></tt> must be convertible to <tt class="literal"><span class="pre">bool</span></tt>.</p>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="filter-iterator-models">
|
|
||||||
<h1><a name="filter-iterator-models"><tt class="literal"><span class="pre">filter_iterator</span></tt> models</a></h1>
|
|
||||||
<p>The concepts that <tt class="literal"><span class="pre">filter_iterator</span></tt> models are dependent on which
|
|
||||||
concepts the <tt class="literal"><span class="pre">Iterator</span></tt> argument models, as specified in the
|
|
||||||
following tables.</p>
|
|
||||||
<table border="1" class="table">
|
|
||||||
<colgroup>
|
|
||||||
<col width="44%" />
|
|
||||||
<col width="56%" />
|
|
||||||
</colgroup>
|
|
||||||
<thead valign="bottom">
|
|
||||||
<tr><th>If <tt class="literal"><span class="pre">Iterator</span></tt> models</th>
|
|
||||||
<th>then <tt class="literal"><span class="pre">filter_iterator</span></tt> models</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody valign="top">
|
|
||||||
<tr><td>Single Pass Iterator</td>
|
|
||||||
<td>Single Pass Iterator</td>
|
|
||||||
</tr>
|
|
||||||
<tr><td>Forward Traversal Iterator</td>
|
|
||||||
<td>Forward Traversal Iterator</td>
|
|
||||||
</tr>
|
|
||||||
<tr><td>Bidirectional Traversal Iterator</td>
|
|
||||||
<td>Bidirectional Traversal Iterator</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<table border="1" class="table">
|
|
||||||
<colgroup>
|
|
||||||
<col width="41%" />
|
|
||||||
<col width="59%" />
|
|
||||||
</colgroup>
|
|
||||||
<thead valign="bottom">
|
|
||||||
<tr><th>If <tt class="literal"><span class="pre">Iterator</span></tt> models</th>
|
|
||||||
<th>then <tt class="literal"><span class="pre">filter_iterator</span></tt> models</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody valign="top">
|
|
||||||
<tr><td>Readable Iterator</td>
|
|
||||||
<td>Readable Iterator</td>
|
|
||||||
</tr>
|
|
||||||
<tr><td>Writable Iterator</td>
|
|
||||||
<td>Writable Iterator</td>
|
|
||||||
</tr>
|
|
||||||
<tr><td>Lvalue Iterator</td>
|
|
||||||
<td>Lvalue Iterator</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<table border="1" class="table">
|
|
||||||
<colgroup>
|
|
||||||
<col width="63%" />
|
|
||||||
<col width="38%" />
|
|
||||||
</colgroup>
|
|
||||||
<thead valign="bottom">
|
|
||||||
<tr><th>If <tt class="literal"><span class="pre">Iterator</span></tt> models</th>
|
|
||||||
<th>then <tt class="literal"><span class="pre">filter_iterator</span></tt> models</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody valign="top">
|
|
||||||
<tr><td>Readable Iterator, Single Pass Iterator</td>
|
|
||||||
<td>Input Iterator</td>
|
|
||||||
</tr>
|
|
||||||
<tr><td>Readable Lvalue Iterator, Forward Traversal Iterator</td>
|
|
||||||
<td>Forward Iterator</td>
|
|
||||||
</tr>
|
|
||||||
<tr><td>Writable Lvalue Iterator, Forward Traversal Iterator</td>
|
|
||||||
<td>Mutable Forward Iterator</td>
|
|
||||||
</tr>
|
|
||||||
<tr><td>Writable Lvalue Iterator, Bidirectional Iterator</td>
|
|
||||||
<td>Mutable Bidirectional Iterator</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<p><tt class="literal"><span class="pre">filter_iterator<P1,</span> <span class="pre">X></span></tt> is interoperable with <tt class="literal"><span class="pre">filter_iterator<P2,</span> <span class="pre">Y></span></tt>
|
|
||||||
if and only if <tt class="literal"><span class="pre">X</span></tt> is interoperable with <tt class="literal"><span class="pre">Y</span></tt>.</p>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="id1">
|
|
||||||
<h1><a name="id1"><tt class="literal"><span class="pre">filter_iterator</span></tt> operations</a></h1>
|
|
||||||
<p>In addition to those operations required by the concepts that
|
|
||||||
<tt class="literal"><span class="pre">filter_iterator</span></tt> models, <tt class="literal"><span class="pre">filter_iterator</span></tt> provides the following
|
|
||||||
operations.</p>
|
|
||||||
<p><tt class="literal"><span class="pre">filter_iterator();</span></tt></p>
|
|
||||||
<table class="field-list" frame="void" rules="none">
|
|
||||||
<col class="field-name" />
|
|
||||||
<col class="field-body" />
|
|
||||||
<tbody valign="top">
|
|
||||||
<tr class="field"><th class="field-name">Requires:</th><td class="field-body"><tt class="literal"><span class="pre">Predicate</span></tt> and <tt class="literal"><span class="pre">Iterator</span></tt> must be Default Constructible.</td>
|
|
||||||
</tr>
|
|
||||||
<tr class="field"><th class="field-name">Effects:</th><td class="field-body">Constructs a <tt class="literal"><span class="pre">filter_iterator</span></tt> whose``m_pred``, <tt class="literal"><span class="pre">m_iter</span></tt>, and <tt class="literal"><span class="pre">m_end</span></tt>
|
|
||||||
members are a default constructed.</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<p><tt class="literal"><span class="pre">filter_iterator(Predicate</span> <span class="pre">f,</span> <span class="pre">Iterator</span> <span class="pre">x,</span> <span class="pre">Iterator</span> <span class="pre">end</span> <span class="pre">=</span> <span class="pre">Iterator());</span></tt></p>
|
|
||||||
<table class="field-list" frame="void" rules="none">
|
|
||||||
<col class="field-name" />
|
|
||||||
<col class="field-body" />
|
|
||||||
<tbody valign="top">
|
|
||||||
<tr class="field"><th class="field-name">Effects:</th><td class="field-body">Constructs a <tt class="literal"><span class="pre">filter_iterator</span></tt> where <tt class="literal"><span class="pre">m_iter</span></tt> is either
|
|
||||||
the first position in the range <tt class="literal"><span class="pre">[x,end)</span></tt> such that <tt class="literal"><span class="pre">f(*m_iter)</span> <span class="pre">==</span> <span class="pre">true</span></tt>
|
|
||||||
or else``m_iter == end``. The member <tt class="literal"><span class="pre">m_pred</span></tt> is constructed from
|
|
||||||
<tt class="literal"><span class="pre">f</span></tt> and <tt class="literal"><span class="pre">m_end</span></tt> from <tt class="literal"><span class="pre">end</span></tt>.</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<p><tt class="literal"><span class="pre">filter_iterator(Iterator</span> <span class="pre">x,</span> <span class="pre">Iterator</span> <span class="pre">end</span> <span class="pre">=</span> <span class="pre">Iterator());</span></tt></p>
|
|
||||||
<table class="field-list" frame="void" rules="none">
|
|
||||||
<col class="field-name" />
|
|
||||||
<col class="field-body" />
|
|
||||||
<tbody valign="top">
|
|
||||||
<tr class="field"><th class="field-name">Requires:</th><td class="field-body"><tt class="literal"><span class="pre">Predicate</span></tt> must be Default Constructible and
|
|
||||||
<tt class="literal"><span class="pre">Predicate</span></tt> is a class type (not a function pointer).</td>
|
|
||||||
</tr>
|
|
||||||
<tr class="field"><th class="field-name">Effects:</th><td class="field-body">Constructs a <tt class="literal"><span class="pre">filter_iterator</span></tt> where <tt class="literal"><span class="pre">m_iter</span></tt> is either
|
|
||||||
the first position in the range <tt class="literal"><span class="pre">[x,end)</span></tt> such that <tt class="literal"><span class="pre">m_pred(*m_iter)</span> <span class="pre">==</span> <span class="pre">true</span></tt>
|
|
||||||
or else``m_iter == end``. The member <tt class="literal"><span class="pre">m_pred</span></tt> is default constructed.</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<pre class="literal-block">
|
|
||||||
template <class OtherIterator>
|
|
||||||
filter_iterator(
|
|
||||||
filter_iterator<Predicate, OtherIterator> const& t
|
|
||||||
, typename enable_if_convertible<OtherIterator, Iterator>::type* = 0 // exposition
|
|
||||||
);``
|
|
||||||
</pre>
|
|
||||||
<table class="field-list" frame="void" rules="none">
|
|
||||||
<col class="field-name" />
|
|
||||||
<col class="field-body" />
|
|
||||||
<tbody valign="top">
|
|
||||||
<tr class="field"><th class="field-name">Requires:</th><td class="field-body"><tt class="literal"><span class="pre">OtherIterator</span></tt> is implicitly convertible to <tt class="literal"><span class="pre">Iterator</span></tt>.</td>
|
|
||||||
</tr>
|
|
||||||
<tr class="field"><th class="field-name">Effects:</th><td class="field-body">Constructs a filter iterator whose members are copied from <tt class="literal"><span class="pre">t</span></tt>.</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<p><tt class="literal"><span class="pre">Predicate</span> <span class="pre">predicate()</span> <span class="pre">const;</span></tt></p>
|
|
||||||
<table class="field-list" frame="void" rules="none">
|
|
||||||
<col class="field-name" />
|
|
||||||
<col class="field-body" />
|
|
||||||
<tbody valign="top">
|
|
||||||
<tr class="field"><th class="field-name">Returns:</th><td class="field-body"><tt class="literal"><span class="pre">m_pred</span></tt></td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<p><tt class="literal"><span class="pre">Iterator</span> <span class="pre">end()</span> <span class="pre">const;</span></tt></p>
|
|
||||||
<table class="field-list" frame="void" rules="none">
|
|
||||||
<col class="field-name" />
|
|
||||||
<col class="field-body" />
|
|
||||||
<tbody valign="top">
|
|
||||||
<tr class="field"><th class="field-name">Returns:</th><td class="field-body"><tt class="literal"><span class="pre">m_end</span></tt></td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<p><tt class="literal"><span class="pre">Iterator</span> <span class="pre">const&</span> <span class="pre">base()</span> <span class="pre">const;</span></tt></p>
|
|
||||||
<table class="field-list" frame="void" rules="none">
|
|
||||||
<col class="field-name" />
|
|
||||||
<col class="field-body" />
|
|
||||||
<tbody valign="top">
|
|
||||||
<tr class="field"><th class="field-name">Returns:</th><td class="field-body"><tt class="literal"><span class="pre">m_iterator</span></tt></td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<p><tt class="literal"><span class="pre">reference</span> <span class="pre">operator*()</span> <span class="pre">const;</span></tt></p>
|
|
||||||
<table class="field-list" frame="void" rules="none">
|
|
||||||
<col class="field-name" />
|
|
||||||
<col class="field-body" />
|
|
||||||
<tbody valign="top">
|
|
||||||
<tr class="field"><th class="field-name">Returns:</th><td class="field-body"><tt class="literal"><span class="pre">*m_iter</span></tt></td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<p><tt class="literal"><span class="pre">filter_iterator&</span> <span class="pre">operator++();</span></tt></p>
|
|
||||||
<table class="field-list" frame="void" rules="none">
|
|
||||||
<col class="field-name" />
|
|
||||||
<col class="field-body" />
|
|
||||||
<tbody valign="top">
|
|
||||||
<tr class="field"><th class="field-name">Effects:</th><td class="field-body">Increments <tt class="literal"><span class="pre">m_iter</span></tt> and then continues to
|
|
||||||
increment <tt class="literal"><span class="pre">m_iter</span></tt> until either <tt class="literal"><span class="pre">m_iter</span> <span class="pre">==</span> <span class="pre">m_end</span></tt>
|
|
||||||
or <tt class="literal"><span class="pre">m_pred(*m_iter)</span> <span class="pre">==</span> <span class="pre">true</span></tt>.</td>
|
|
||||||
</tr>
|
|
||||||
<tr class="field"><th class="field-name">Returns:</th><td class="field-body"><tt class="literal"><span class="pre">*this</span></tt></td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<hr class="footer" />
|
|
||||||
<div class="footer">
|
|
||||||
<a class="reference" href="filter_iterator_ref.rst">View document source</a>.
|
|
||||||
Generated by <a class="reference" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@ -1,3 +1,7 @@
|
|||||||
|
.. Copyright David Abrahams 2006. Distributed under the Boost
|
||||||
|
.. Software License, Version 1.0. (See accompanying
|
||||||
|
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
The function output iterator adaptor makes it easier to create custom
|
The function output iterator adaptor makes it easier to create custom
|
||||||
output iterators. The adaptor takes a unary function and creates a
|
output iterators. The adaptor takes a unary function and creates a
|
||||||
model of Output Iterator. Each item assigned to the output iterator is
|
model of Output Iterator. Each item assigned to the output iterator is
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
.. Copyright David Abrahams 2006. Distributed under the Boost
|
||||||
|
.. Software License, Version 1.0. (See accompanying
|
||||||
|
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
Header
|
Header
|
||||||
......
|
......
|
||||||
|
|
||||||
|
@ -3,13 +3,13 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="generator" content="Docutils 0.3.8: http://docutils.sourceforge.net/" />
|
<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
|
||||||
<title>Function Output Iterator</title>
|
<title>Function Output Iterator</title>
|
||||||
<meta name="author" content="David Abrahams, Jeremy Siek, Thomas Witt" />
|
<meta name="author" content="David Abrahams, Jeremy Siek, Thomas Witt" />
|
||||||
<meta name="organization" content="Boost Consulting, Indiana University Open Systems Lab, University of Hanover Institute for Transport Railway Operation and Construction" />
|
<meta name="organization" content="Boost Consulting, Indiana University Open Systems Lab, University of Hanover Institute for Transport Railway Operation and Construction" />
|
||||||
<meta name="date" content="2004-11-01" />
|
<meta name="date" content="2006-09-11" />
|
||||||
<meta name="copyright" content="Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003." />
|
<meta name="copyright" content="Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003." />
|
||||||
<link rel="stylesheet" href="default.css" type="text/css" />
|
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="document" id="function-output-iterator">
|
<div class="document" id="function-output-iterator">
|
||||||
@ -21,22 +21,28 @@
|
|||||||
<tr><th class="docinfo-name">Author:</th>
|
<tr><th class="docinfo-name">Author:</th>
|
||||||
<td>David Abrahams, Jeremy Siek, Thomas Witt</td></tr>
|
<td>David Abrahams, Jeremy Siek, Thomas Witt</td></tr>
|
||||||
<tr><th class="docinfo-name">Contact:</th>
|
<tr><th class="docinfo-name">Contact:</th>
|
||||||
<td><a class="first reference" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a>, <a class="reference" href="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</a>, <a class="last reference" href="mailto:witt@ive.uni-hannover.de">witt@ive.uni-hannover.de</a></td></tr>
|
<td><a class="first reference external" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a>, <a class="reference external" href="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</a>, <a class="last reference external" href="mailto:witt@ive.uni-hannover.de">witt@ive.uni-hannover.de</a></td></tr>
|
||||||
<tr><th class="docinfo-name">Organization:</th>
|
<tr><th class="docinfo-name">Organization:</th>
|
||||||
<td><a class="first reference" href="http://www.boost-consulting.com">Boost Consulting</a>, Indiana University <a class="reference" href="http://www.osl.iu.edu">Open Systems
|
<td><a class="first reference external" href="http://www.boost-consulting.com">Boost Consulting</a>, Indiana University <a class="reference external" href="http://www.osl.iu.edu">Open Systems
|
||||||
Lab</a>, University of Hanover <a class="last reference" href="http://www.ive.uni-hannover.de">Institute for Transport
|
Lab</a>, University of Hanover <a class="last reference external" href="http://www.ive.uni-hannover.de">Institute for Transport
|
||||||
Railway Operation and Construction</a></td></tr>
|
Railway Operation and Construction</a></td></tr>
|
||||||
<tr><th class="docinfo-name">Date:</th>
|
<tr><th class="docinfo-name">Date:</th>
|
||||||
<td>2004-11-01</td></tr>
|
<td>2006-09-11</td></tr>
|
||||||
<tr><th class="docinfo-name">Copyright:</th>
|
<tr><th class="docinfo-name">Copyright:</th>
|
||||||
<td>Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003.</td></tr>
|
<td>Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003.</td></tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
<!-- Distributed under the Boost -->
|
||||||
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
<table class="docutils field-list" frame="void" rules="none">
|
<table class="docutils field-list" frame="void" rules="none">
|
||||||
<col class="field-name" />
|
<col class="field-name" />
|
||||||
<col class="field-body" />
|
<col class="field-body" />
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<tr class="field"><th class="field-name">abstract:</th><td class="field-body">The function output iterator adaptor makes it easier to create custom
|
<tr class="field"><th class="field-name">abstract:</th><td class="field-body"><!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
||||||
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
|
The function output iterator adaptor makes it easier to create custom
|
||||||
output iterators. The adaptor takes a unary function and creates a
|
output iterators. The adaptor takes a unary function and creates a
|
||||||
model of Output Iterator. Each item assigned to the output iterator is
|
model of Output Iterator. Each item assigned to the output iterator is
|
||||||
passed as an argument to the unary function. The motivation for this
|
passed as an argument to the unary function. The motivation for this
|
||||||
@ -47,17 +53,20 @@ proxy object.</td>
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<div class="contents topic" id="table-of-contents">
|
<div class="contents topic" id="table-of-contents">
|
||||||
<p class="topic-title first"><a name="table-of-contents">Table of Contents</a></p>
|
<p class="topic-title first">Table of Contents</p>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li><a class="reference" href="#header" id="id1" name="id1">Header</a></li>
|
<li><a class="reference internal" href="#header" id="id1">Header</a></li>
|
||||||
<li><a class="reference" href="#function-output-iterator-requirements" id="id2" name="id2"><tt class="docutils literal"><span class="pre">function_output_iterator</span></tt> requirements</a></li>
|
<li><a class="reference internal" href="#function-output-iterator-requirements" id="id2"><tt class="docutils literal"><span class="pre">function_output_iterator</span></tt> requirements</a></li>
|
||||||
<li><a class="reference" href="#function-output-iterator-models" id="id3" name="id3"><tt class="docutils literal"><span class="pre">function_output_iterator</span></tt> models</a></li>
|
<li><a class="reference internal" href="#function-output-iterator-models" id="id3"><tt class="docutils literal"><span class="pre">function_output_iterator</span></tt> models</a></li>
|
||||||
<li><a class="reference" href="#function-output-iterator-operations" id="id4" name="id4"><tt class="docutils literal"><span class="pre">function_output_iterator</span></tt> operations</a></li>
|
<li><a class="reference internal" href="#function-output-iterator-operations" id="id4"><tt class="docutils literal"><span class="pre">function_output_iterator</span></tt> operations</a></li>
|
||||||
<li><a class="reference" href="#example" id="id5" name="id5">Example</a></li>
|
<li><a class="reference internal" href="#example" id="id5">Example</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
||||||
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
<div class="section" id="header">
|
<div class="section" id="header">
|
||||||
<h1><a class="toc-backref" href="#id1" name="header">Header</a></h1>
|
<h1><a class="toc-backref" href="#id1">Header</a></h1>
|
||||||
<pre class="literal-block">
|
<pre class="literal-block">
|
||||||
#include <boost/function_output_iterator.hpp>
|
#include <boost/function_output_iterator.hpp>
|
||||||
</pre>
|
</pre>
|
||||||
@ -84,16 +93,16 @@ private:
|
|||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="function-output-iterator-requirements">
|
<div class="section" id="function-output-iterator-requirements">
|
||||||
<h1><a class="toc-backref" href="#id2" name="function-output-iterator-requirements"><tt class="docutils literal"><span class="pre">function_output_iterator</span></tt> requirements</a></h1>
|
<h1><a class="toc-backref" href="#id2"><tt class="docutils literal"><span class="pre">function_output_iterator</span></tt> requirements</a></h1>
|
||||||
<p><tt class="docutils literal"><span class="pre">UnaryFunction</span></tt> must be Assignable and Copy Constructible.</p>
|
<p><tt class="docutils literal"><span class="pre">UnaryFunction</span></tt> must be Assignable and Copy Constructible.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="function-output-iterator-models">
|
<div class="section" id="function-output-iterator-models">
|
||||||
<h1><a class="toc-backref" href="#id3" name="function-output-iterator-models"><tt class="docutils literal"><span class="pre">function_output_iterator</span></tt> models</a></h1>
|
<h1><a class="toc-backref" href="#id3"><tt class="docutils literal"><span class="pre">function_output_iterator</span></tt> models</a></h1>
|
||||||
<p><tt class="docutils literal"><span class="pre">function_output_iterator</span></tt> is a model of the Writable and
|
<p><tt class="docutils literal"><span class="pre">function_output_iterator</span></tt> is a model of the Writable and
|
||||||
Incrementable Iterator concepts.</p>
|
Incrementable Iterator concepts.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="function-output-iterator-operations">
|
<div class="section" id="function-output-iterator-operations">
|
||||||
<h1><a class="toc-backref" href="#id4" name="function-output-iterator-operations"><tt class="docutils literal"><span class="pre">function_output_iterator</span></tt> operations</a></h1>
|
<h1><a class="toc-backref" href="#id4"><tt class="docutils literal"><span class="pre">function_output_iterator</span></tt> operations</a></h1>
|
||||||
<p><tt class="docutils literal"><span class="pre">explicit</span> <span class="pre">function_output_iterator(const</span> <span class="pre">UnaryFunction&</span> <span class="pre">f</span> <span class="pre">=</span> <span class="pre">UnaryFunction());</span></tt></p>
|
<p><tt class="docutils literal"><span class="pre">explicit</span> <span class="pre">function_output_iterator(const</span> <span class="pre">UnaryFunction&</span> <span class="pre">f</span> <span class="pre">=</span> <span class="pre">UnaryFunction());</span></tt></p>
|
||||||
<table class="docutils field-list" frame="void" rules="none">
|
<table class="docutils field-list" frame="void" rules="none">
|
||||||
<col class="field-name" />
|
<col class="field-name" />
|
||||||
@ -132,9 +141,12 @@ is equivalent to <tt class="docutils literal"><span class="pre">m_f(t)</span></t
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
||||||
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="example">
|
<div class="section" id="example">
|
||||||
<h1><a class="toc-backref" href="#id5" name="example">Example</a></h1>
|
<h1><a class="toc-backref" href="#id5">Example</a></h1>
|
||||||
<pre class="literal-block">
|
<pre class="literal-block">
|
||||||
struct string_appender
|
struct string_appender
|
||||||
{
|
{
|
||||||
@ -169,10 +181,11 @@ int main(int, char*[])
|
|||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<hr class="docutils footer" />
|
|
||||||
<div class="footer">
|
<div class="footer">
|
||||||
<a class="reference" href="function_output_iterator.rst">View document source</a>.
|
<hr class="footer" />
|
||||||
Generated by <a class="reference" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
<a class="reference external" href="function_output_iterator.rst">View document source</a>.
|
||||||
|
Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
0
doc/function_output_iterator.pdf
Executable file → Normal file
0
doc/function_output_iterator.pdf
Executable file → Normal file
@ -1,3 +1,7 @@
|
|||||||
|
.. Distributed under the Boost
|
||||||
|
.. Software License, Version 1.0. (See accompanying
|
||||||
|
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
++++++++++++++++++++++++++
|
++++++++++++++++++++++++++
|
||||||
Function Output Iterator
|
Function Output Iterator
|
||||||
++++++++++++++++++++++++++
|
++++++++++++++++++++++++++
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
.. Copyright David Abrahams 2006. Distributed under the Boost
|
||||||
|
.. Software License, Version 1.0. (See accompanying
|
||||||
|
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
Example
|
Example
|
||||||
.......
|
.......
|
||||||
|
|
||||||
|
114
doc/index.html
Executable file → Normal file
114
doc/index.html
Executable file → Normal file
@ -3,13 +3,20 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="generator" content="Docutils 0.3.8: http://docutils.sourceforge.net/" />
|
<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
|
||||||
<title>The Boost.Iterator Library Boost</title>
|
<title>The Boost.Iterator Library Boost</title>
|
||||||
<link rel="stylesheet" href="default.css" type="text/css" />
|
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="document" id="the-boost-iterator-library-logo">
|
<div class="document" id="the-boost-iterator-library-logo">
|
||||||
<h1 class="title">The Boost.Iterator Library <a class="reference" href="../../../index.htm"><img alt="Boost" src="../../../boost.png" /></a></h1>
|
<h1 class="title">The Boost.Iterator Library <a class="reference external" href="../../../index.htm"><img alt="Boost" src="../../../boost.png" /></a></h1>
|
||||||
|
|
||||||
|
<!-- Distributed under the Boost -->
|
||||||
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
|
<!-- Distributed under the Boost -->
|
||||||
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
<hr class="docutils" />
|
<hr class="docutils" />
|
||||||
<table class="docutils field-list" frame="void" rules="none">
|
<table class="docutils field-list" frame="void" rules="none">
|
||||||
<col class="field-name" />
|
<col class="field-name" />
|
||||||
@ -17,10 +24,10 @@
|
|||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<tr class="field"><th class="field-name">Authors:</th><td class="field-body">David Abrahams, Jeremy Siek, Thomas Witt</td>
|
<tr class="field"><th class="field-name">Authors:</th><td class="field-body">David Abrahams, Jeremy Siek, Thomas Witt</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="field"><th class="field-name">Contact:</th><td class="field-body"><a class="reference" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a>, <a class="reference" href="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</a>, <a class="reference" href="mailto:witt@styleadvisor.com">witt@styleadvisor.com</a></td>
|
<tr class="field"><th class="field-name">Contact:</th><td class="field-body"><a class="reference external" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a>, <a class="reference external" href="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</a>, <a class="reference external" href="mailto:witt@styleadvisor.com">witt@styleadvisor.com</a></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="field"><th class="field-name">organizations:</th><td class="field-body"><a class="reference" href="http://www.boost-consulting.com">Boost Consulting</a>, Indiana University <a class="reference" href="http://www.osl.iu.edu">Open Systems
|
<tr class="field"><th class="field-name">organizations:</th><td class="field-body"><a class="reference external" href="http://www.boost-consulting.com">Boost Consulting</a>, Indiana University <a class="reference external" href="http://www.osl.iu.edu">Open Systems
|
||||||
Lab</a>, <a class="reference" href="http://www.styleadvisor.com">Zephyr Associates, Inc.</a></td>
|
Lab</a>, <a class="reference external" href="http://www.styleadvisor.com">Zephyr Associates, Inc.</a></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="field"><th class="field-name">date:</th><td class="field-body">$Date$</td>
|
<tr class="field"><th class="field-name">date:</th><td class="field-body">$Date$</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -33,7 +40,7 @@ Lab</a>, <a class="reference" href="http://www.styleadvisor.com">Zephyr Associat
|
|||||||
<col class="field-body" />
|
<col class="field-body" />
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<tr class="field"><th class="field-name">Abstract:</th><td class="field-body">The Boost Iterator Library contains two parts. The first
|
<tr class="field"><th class="field-name">Abstract:</th><td class="field-body">The Boost Iterator Library contains two parts. The first
|
||||||
is a system of <a class="reference" href="../../../more/generic_programming.html#concept">concepts</a> which extend the C++ standard
|
is a system of <a class="reference external" href="http://www.boost.org/more/generic_programming.html#concept">concepts</a> which extend the C++ standard
|
||||||
iterator requirements. The second is a framework of
|
iterator requirements. The second is a framework of
|
||||||
components for building iterators based on these
|
components for building iterators based on these
|
||||||
extended concepts and includes several useful iterator
|
extended concepts and includes several useful iterator
|
||||||
@ -51,23 +58,23 @@ older Boost Iterator Adaptor Library.</td>
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<div class="contents topic" id="table-of-contents">
|
<div class="contents topic" id="table-of-contents">
|
||||||
<p class="topic-title first"><a name="table-of-contents"><strong>Table of Contents</strong></a></p>
|
<p class="topic-title first"><strong>Table of Contents</strong></p>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li><a class="reference" href="#new-style-iterators" id="id22" name="id22">New-Style Iterators</a></li>
|
<li><a class="reference internal" href="#new-style-iterators" id="id22">New-Style Iterators</a></li>
|
||||||
<li><a class="reference" href="#iterator-facade-and-adaptor" id="id23" name="id23">Iterator Facade and Adaptor</a></li>
|
<li><a class="reference internal" href="#iterator-facade-and-adaptor" id="id23">Iterator Facade and Adaptor</a></li>
|
||||||
<li><a class="reference" href="#specialized-adaptors" id="id24" name="id24">Specialized Adaptors</a></li>
|
<li><a class="reference internal" href="#specialized-adaptors" id="id24">Specialized Adaptors</a></li>
|
||||||
<li><a class="reference" href="#iterator-utilities" id="id25" name="id25">Iterator Utilities</a><ul>
|
<li><a class="reference internal" href="#iterator-utilities" id="id25">Iterator Utilities</a><ul>
|
||||||
<li><a class="reference" href="#traits" id="id26" name="id26">Traits</a></li>
|
<li><a class="reference internal" href="#traits" id="id26">Traits</a></li>
|
||||||
<li><a class="reference" href="#testing-and-concept-checking" id="id27" name="id27">Testing and Concept Checking</a></li>
|
<li><a class="reference internal" href="#testing-and-concept-checking" id="id27">Testing and Concept Checking</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a class="reference" href="#upgrading-from-the-old-boost-iterator-adaptor-library" id="id28" name="id28">Upgrading from the old Boost Iterator Adaptor Library</a></li>
|
<li><a class="reference internal" href="#upgrading-from-the-old-boost-iterator-adaptor-library" id="id28">Upgrading from the old Boost Iterator Adaptor Library</a></li>
|
||||||
<li><a class="reference" href="#history" id="id29" name="id29">History</a></li>
|
<li><a class="reference internal" href="#history" id="id29">History</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<hr class="docutils" />
|
<hr class="docutils" />
|
||||||
<div class="section" id="new-style-iterators">
|
<div class="section" id="new-style-iterators">
|
||||||
<h1><a class="toc-backref" href="#id22" name="new-style-iterators">New-Style Iterators</a></h1>
|
<h1><a class="toc-backref" href="#id22">New-Style Iterators</a></h1>
|
||||||
<p>The iterator categories defined in C++98 are extremely limiting
|
<p>The iterator categories defined in C++98 are extremely limiting
|
||||||
because they bind together two orthogonal concepts: traversal and
|
because they bind together two orthogonal concepts: traversal and
|
||||||
element access. For example, because a random access iterator is
|
element access. For example, because a random access iterator is
|
||||||
@ -76,17 +83,17 @@ it is impossible to capture the capabilities of
|
|||||||
<tt class="docutils literal"><span class="pre">vector<bool>::iterator</span></tt> using the C++98 categories. This is the
|
<tt class="docutils literal"><span class="pre">vector<bool>::iterator</span></tt> using the C++98 categories. This is the
|
||||||
infamous "<tt class="docutils literal"><span class="pre">vector<bool></span></tt> is not a container, and its iterators
|
infamous "<tt class="docutils literal"><span class="pre">vector<bool></span></tt> is not a container, and its iterators
|
||||||
aren't random access iterators", debacle about which Herb Sutter
|
aren't random access iterators", debacle about which Herb Sutter
|
||||||
wrote two papers for the standards comittee (<a class="reference" href="http://www.gotw.ca/publications/N1185.pdf">n1185</a> and <a class="reference" href="http://www.gotw.ca/publications/N1211.pdf">n1211</a>),
|
wrote two papers for the standards comittee (<a class="reference external" href="http://www.gotw.ca/publications/N1185.pdf">n1185</a> and <a class="reference external" href="http://www.gotw.ca/publications/N1211.pdf">n1211</a>),
|
||||||
and a <a class="reference" href="http://www.gotw.ca/gotw/050.htm">Guru of the Week</a>. New-style iterators go well beyond
|
and a <a class="reference external" href="http://www.gotw.ca/gotw/050.htm">Guru of the Week</a>. New-style iterators go well beyond
|
||||||
patching up <tt class="docutils literal"><span class="pre">vector<bool></span></tt>, though: there are lots of other
|
patching up <tt class="docutils literal"><span class="pre">vector<bool></span></tt>, though: there are lots of other
|
||||||
iterators already in use which can't be adequately represented by
|
iterators already in use which can't be adequately represented by
|
||||||
the existing concepts. For details about the new iterator
|
the existing concepts. For details about the new iterator
|
||||||
concepts, see our</p>
|
concepts, see our</p>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<a class="reference" href="new-iter-concepts.html">Standard Proposal For New-Style Iterators</a> (<a class="reference" href="new-iter-concepts.pdf">PDF</a>)</blockquote>
|
<a class="reference external" href="new-iter-concepts.html">Standard Proposal For New-Style Iterators</a> (<a class="reference external" href="new-iter-concepts.pdf">PDF</a>)</blockquote>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="iterator-facade-and-adaptor">
|
<div class="section" id="iterator-facade-and-adaptor">
|
||||||
<h1><a class="toc-backref" href="#id23" name="iterator-facade-and-adaptor">Iterator Facade and Adaptor</a></h1>
|
<h1><a class="toc-backref" href="#id23">Iterator Facade and Adaptor</a></h1>
|
||||||
<p>Writing standard-conforming iterators is tricky, but the need comes
|
<p>Writing standard-conforming iterators is tricky, but the need comes
|
||||||
up often. In order to ease the implementation of new iterators,
|
up often. In order to ease the implementation of new iterators,
|
||||||
the Boost.Iterator library provides the <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> class template,
|
the Boost.Iterator library provides the <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> class template,
|
||||||
@ -102,54 +109,54 @@ behavior as possible.</p>
|
|||||||
<p>The documentation for these two classes can be found at the following
|
<p>The documentation for these two classes can be found at the following
|
||||||
web pages:</p>
|
web pages:</p>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li><a class="reference" href="iterator_facade.html"><tt class="docutils literal"><span class="pre">iterator_facade</span></tt></a> (<a class="reference" href="iterator_facade.pdf">PDF</a>)</li>
|
<li><a class="reference external" href="iterator_facade.html"><tt class="docutils literal"><span class="pre">iterator_facade</span></tt></a> (<a class="reference external" href="iterator_facade.pdf">PDF</a>)</li>
|
||||||
<li><a class="reference" href="iterator_adaptor.html"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt></a> (<a class="reference" href="iterator_adaptor.pdf">PDF</a>)</li>
|
<li><a class="reference external" href="iterator_adaptor.html"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt></a> (<a class="reference external" href="iterator_adaptor.pdf">PDF</a>)</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p>Both <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> and <tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> as well as many of the <a class="reference" href="#specialized-adaptors">specialized
|
<p>Both <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> and <tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> as well as many of the <a class="reference internal" href="#specialized-adaptors">specialized
|
||||||
adaptors</a> mentioned below have been proposed for standardization,
|
adaptors</a> mentioned below have been proposed for standardization,
|
||||||
and accepted into the first C++ technical report; see our</p>
|
and accepted into the first C++ technical report; see our</p>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<a class="reference" href="facade-and-adaptor.html">Standard Proposal For Iterator Facade and Adaptor</a> (<a class="reference" href="facade-and-adaptor.pdf">PDF</a>)</blockquote>
|
<a class="reference external" href="facade-and-adaptor.html">Standard Proposal For Iterator Facade and Adaptor</a> (<a class="reference external" href="facade-and-adaptor.pdf">PDF</a>)</blockquote>
|
||||||
<p>for more details.</p>
|
<p>for more details.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="specialized-adaptors">
|
<div class="section" id="specialized-adaptors">
|
||||||
<h1><a class="toc-backref" href="#id24" name="specialized-adaptors">Specialized Adaptors</a></h1>
|
<h1><a class="toc-backref" href="#id24">Specialized Adaptors</a></h1>
|
||||||
<p>The iterator library supplies a useful suite of standard-conforming
|
<p>The iterator library supplies a useful suite of standard-conforming
|
||||||
iterator templates based on the Boost <a class="reference" href="#iterator-facade-and-adaptor">iterator facade and adaptor</a>.</p>
|
iterator templates based on the Boost <a class="reference internal" href="#iterator-facade-and-adaptor">iterator facade and adaptor</a>.</p>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li><a class="reference" href="counting_iterator.html"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt></a> (<a class="reference" href="counting_iterator.pdf">PDF</a>): an iterator over a sequence of consecutive values.
|
<li><a class="reference external" href="counting_iterator.html"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt></a> (<a class="reference external" href="counting_iterator.pdf">PDF</a>): an iterator over a sequence of consecutive values.
|
||||||
Implements a "lazy sequence"</li>
|
Implements a "lazy sequence"</li>
|
||||||
<li><a class="reference" href="filter_iterator.html"><tt class="docutils literal"><span class="pre">filter_iterator</span></tt></a> (<a class="reference" href="filter_iterator.pdf">PDF</a>): an iterator over the subset of elements of some
|
<li><a class="reference external" href="filter_iterator.html"><tt class="docutils literal"><span class="pre">filter_iterator</span></tt></a> (<a class="reference external" href="filter_iterator.pdf">PDF</a>): an iterator over the subset of elements of some
|
||||||
sequence which satisfy a given predicate</li>
|
sequence which satisfy a given predicate</li>
|
||||||
<li><a class="reference" href="function_output_iterator.html"><tt class="docutils literal"><span class="pre">function_output_iterator</span></tt></a> (<a class="reference" href="function_output_iterator.pdf">PDF</a>): an output iterator wrapping a unary function
|
<li><a class="reference external" href="function_output_iterator.html"><tt class="docutils literal"><span class="pre">function_output_iterator</span></tt></a> (<a class="reference external" href="function_output_iterator.pdf">PDF</a>): an output iterator wrapping a unary function
|
||||||
object; each time an element is written into the dereferenced
|
object; each time an element is written into the dereferenced
|
||||||
iterator, it is passed as a parameter to the function object.</li>
|
iterator, it is passed as a parameter to the function object.</li>
|
||||||
<li><a class="reference" href="indirect_iterator.html"><tt class="docutils literal"><span class="pre">indirect_iterator</span></tt></a> (<a class="reference" href="indirect_iterator.pdf">PDF</a>): an iterator over the objects <em>pointed-to</em> by the
|
<li><a class="reference external" href="indirect_iterator.html"><tt class="docutils literal"><span class="pre">indirect_iterator</span></tt></a> (<a class="reference external" href="indirect_iterator.pdf">PDF</a>): an iterator over the objects <em>pointed-to</em> by the
|
||||||
elements of some sequence.</li>
|
elements of some sequence.</li>
|
||||||
<li><a class="reference" href="permutation_iterator.html"><tt class="docutils literal"><span class="pre">permutation_iterator</span></tt></a> (<a class="reference" href="permutation_iterator.pdf">PDF</a>): an iterator over the elements of some random-access
|
<li><a class="reference external" href="permutation_iterator.html"><tt class="docutils literal"><span class="pre">permutation_iterator</span></tt></a> (<a class="reference external" href="permutation_iterator.pdf">PDF</a>): an iterator over the elements of some random-access
|
||||||
sequence, rearranged according to some sequence of integer indices.</li>
|
sequence, rearranged according to some sequence of integer indices.</li>
|
||||||
<li><a class="reference" href="reverse_iterator.html"><tt class="docutils literal"><span class="pre">reverse_iterator</span></tt></a> (<a class="reference" href="reverse_iterator.pdf">PDF</a>): an iterator which traverses the elements of some
|
<li><a class="reference external" href="reverse_iterator.html"><tt class="docutils literal"><span class="pre">reverse_iterator</span></tt></a> (<a class="reference external" href="reverse_iterator.pdf">PDF</a>): an iterator which traverses the elements of some
|
||||||
bidirectional sequence in reverse. Corrects many of the
|
bidirectional sequence in reverse. Corrects many of the
|
||||||
shortcomings of C++98's <tt class="docutils literal"><span class="pre">std::reverse_iterator</span></tt>.</li>
|
shortcomings of C++98's <tt class="docutils literal"><span class="pre">std::reverse_iterator</span></tt>.</li>
|
||||||
<li><a class="reference" href="../../utility/shared_container_iterator.html"><tt class="docutils literal"><span class="pre">shared_container_iterator</span></tt></a>: an iterator over elements of a container whose
|
<li><a class="reference external" href="../../utility/shared_container_iterator.html"><tt class="docutils literal"><span class="pre">shared_container_iterator</span></tt></a>: an iterator over elements of a container whose
|
||||||
lifetime is maintained by a <a class="reference" href="../../smart_ptr/shared_ptr.htm"><tt class="docutils literal"><span class="pre">shared_ptr</span></tt></a> stored in the iterator.</li>
|
lifetime is maintained by a <a class="reference external" href="../../smart_ptr/shared_ptr.htm"><tt class="docutils literal"><span class="pre">shared_ptr</span></tt></a> stored in the iterator.</li>
|
||||||
<li><a class="reference" href="transform_iterator.html"><tt class="docutils literal"><span class="pre">transform_iterator</span></tt></a> (<a class="reference" href="transform_iterator.pdf">PDF</a>): an iterator over elements which are the result of
|
<li><a class="reference external" href="transform_iterator.html"><tt class="docutils literal"><span class="pre">transform_iterator</span></tt></a> (<a class="reference external" href="transform_iterator.pdf">PDF</a>): an iterator over elements which are the result of
|
||||||
applying some functional transformation to the elements of an
|
applying some functional transformation to the elements of an
|
||||||
underlying sequence. This component also replaces the old
|
underlying sequence. This component also replaces the old
|
||||||
<tt class="docutils literal"><span class="pre">projection_iterator_adaptor</span></tt>.</li>
|
<tt class="docutils literal"><span class="pre">projection_iterator_adaptor</span></tt>.</li>
|
||||||
<li><a class="reference" href="zip_iterator.html"><tt class="docutils literal"><span class="pre">zip_iterator</span></tt></a> (<a class="reference" href="zip_iterator.pdf">PDF</a>): an iterator over tuples of the elements at corresponding
|
<li><a class="reference external" href="zip_iterator.html"><tt class="docutils literal"><span class="pre">zip_iterator</span></tt></a> (<a class="reference external" href="zip_iterator.pdf">PDF</a>): an iterator over tuples of the elements at corresponding
|
||||||
positions of heterogeneous underlying iterators.</li>
|
positions of heterogeneous underlying iterators.</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="iterator-utilities">
|
<div class="section" id="iterator-utilities">
|
||||||
<h1><a class="toc-backref" href="#id25" name="iterator-utilities">Iterator Utilities</a></h1>
|
<h1><a class="toc-backref" href="#id25">Iterator Utilities</a></h1>
|
||||||
<div class="section" id="traits">
|
<div class="section" id="traits">
|
||||||
<h2><a class="toc-backref" href="#id26" name="traits">Traits</a></h2>
|
<h2><a class="toc-backref" href="#id26">Traits</a></h2>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li><a class="reference" href="pointee.html"><tt class="docutils literal"><span class="pre">pointee.hpp</span></tt></a> (<a class="reference" href="pointee.pdf">PDF</a>): Provides the capability to deduce the referent types
|
<li><a class="reference external" href="pointee.html"><tt class="docutils literal"><span class="pre">pointee.hpp</span></tt></a> (<a class="reference external" href="pointee.pdf">PDF</a>): Provides the capability to deduce the referent types
|
||||||
of pointers, smart pointers and iterators in generic code. Used
|
of pointers, smart pointers and iterators in generic code. Used
|
||||||
in <tt class="docutils literal"><span class="pre">indirect_iterator</span></tt>.</li>
|
in <tt class="docutils literal"><span class="pre">indirect_iterator</span></tt>.</li>
|
||||||
<li><a class="reference" href="iterator_traits.html"><tt class="docutils literal"><span class="pre">iterator_traits.hpp</span></tt></a> (<a class="reference" href="iterator_traits.pdf">PDF</a>): Provides <a class="reference" href="../../mpl/doc/index.html">MPL</a>-compatible metafunctions which
|
<li><a class="reference external" href="iterator_traits.html"><tt class="docutils literal"><span class="pre">iterator_traits.hpp</span></tt></a> (<a class="reference external" href="iterator_traits.pdf">PDF</a>): Provides <a class="reference external" href="../../mpl/doc/index.html">MPL</a>-compatible metafunctions which
|
||||||
retrieve an iterator's traits. Also corrects for the deficiencies
|
retrieve an iterator's traits. Also corrects for the deficiencies
|
||||||
of broken implementations of <tt class="docutils literal"><span class="pre">std::iterator_traits</span></tt>.</li>
|
of broken implementations of <tt class="docutils literal"><span class="pre">std::iterator_traits</span></tt>.</li>
|
||||||
</ul>
|
</ul>
|
||||||
@ -158,25 +165,25 @@ testing iterator interoperability -->
|
|||||||
<!-- comment! __ interoperable.pdf -->
|
<!-- comment! __ interoperable.pdf -->
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="testing-and-concept-checking">
|
<div class="section" id="testing-and-concept-checking">
|
||||||
<h2><a class="toc-backref" href="#id27" name="testing-and-concept-checking">Testing and Concept Checking</a></h2>
|
<h2><a class="toc-backref" href="#id27">Testing and Concept Checking</a></h2>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li><a class="reference" href="iterator_concepts.html"><tt class="docutils literal"><span class="pre">iterator_concepts.hpp</span></tt></a> (<a class="reference" href="iterator_concepts.pdf">PDF</a>): Concept checking classes for the new iterator concepts.</li>
|
<li><a class="reference external" href="iterator_concepts.html"><tt class="docutils literal"><span class="pre">iterator_concepts.hpp</span></tt></a> (<a class="reference external" href="iterator_concepts.pdf">PDF</a>): Concept checking classes for the new iterator concepts.</li>
|
||||||
<li><a class="reference" href="iterator_archetypes.html"><tt class="docutils literal"><span class="pre">iterator_archetypes.hpp</span></tt></a> (<a class="reference" href="iterator_archetypes.pdf">PDF</a>): Concept archetype classes for the new iterators concepts.</li>
|
<li><a class="reference external" href="iterator_archetypes.html"><tt class="docutils literal"><span class="pre">iterator_archetypes.hpp</span></tt></a> (<a class="reference external" href="iterator_archetypes.pdf">PDF</a>): Concept archetype classes for the new iterators concepts.</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="upgrading-from-the-old-boost-iterator-adaptor-library">
|
<div class="section" id="upgrading-from-the-old-boost-iterator-adaptor-library">
|
||||||
<h1><a class="toc-backref" href="#id28" name="upgrading-from-the-old-boost-iterator-adaptor-library">Upgrading from the old Boost Iterator Adaptor Library</a></h1>
|
<h1><a class="toc-backref" href="#id28">Upgrading from the old Boost Iterator Adaptor Library</a></h1>
|
||||||
<a class="target" id="upgrading" name="upgrading"></a><p>If you have been using the old Boost Iterator Adaptor library to
|
<p id="upgrading">If you have been using the old Boost Iterator Adaptor library to
|
||||||
implement iterators, you probably wrote a <tt class="docutils literal"><span class="pre">Policies</span></tt> class which
|
implement iterators, you probably wrote a <tt class="docutils literal"><span class="pre">Policies</span></tt> class which
|
||||||
captures the core operations of your iterator. In the new library
|
captures the core operations of your iterator. In the new library
|
||||||
design, you'll move those same core operations into the body of the
|
design, you'll move those same core operations into the body of the
|
||||||
iterator class itself. If you were writing a family of iterators,
|
iterator class itself. If you were writing a family of iterators,
|
||||||
you probably wrote a <a class="reference" href="../../../more/generic_programming.html#type_generator">type generator</a> to build the
|
you probably wrote a <a class="reference external" href="http://www.boost.org/more/generic_programming.html#type_generator">type generator</a> to build the
|
||||||
<tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> specialization you needed; in the new library
|
<tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> specialization you needed; in the new library
|
||||||
design you don't need a type generator (though may want to keep it
|
design you don't need a type generator (though may want to keep it
|
||||||
around as a compatibility aid for older code) because, due to the
|
around as a compatibility aid for older code) because, due to the
|
||||||
use of the Curiously Recurring Template Pattern (CRTP) <a class="citation-reference" href="#cop95" id="id21" name="id21">[Cop95]</a>,
|
use of the Curiously Recurring Template Pattern (CRTP) <a class="citation-reference" href="#cop95" id="id21">[Cop95]</a>,
|
||||||
you can now define the iterator class yourself and acquire
|
you can now define the iterator class yourself and acquire
|
||||||
functionality through inheritance from <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> or
|
functionality through inheritance from <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> or
|
||||||
<tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt>. As a result, you also get much finer control
|
<tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt>. As a result, you also get much finer control
|
||||||
@ -191,7 +198,7 @@ type, <tt class="docutils literal"><span class="pre">transform_iterator</span></
|
|||||||
<tt class="docutils literal"><span class="pre">projection_iterator</span></tt> used to.</p>
|
<tt class="docutils literal"><span class="pre">projection_iterator</span></tt> used to.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="history">
|
<div class="section" id="history">
|
||||||
<h1><a class="toc-backref" href="#id29" name="history">History</a></h1>
|
<h1><a class="toc-backref" href="#id29">History</a></h1>
|
||||||
<p>In 2000 Dave Abrahams was writing an iterator for a container of
|
<p>In 2000 Dave Abrahams was writing an iterator for a container of
|
||||||
pointers, which would access the pointed-to elements when
|
pointers, which would access the pointed-to elements when
|
||||||
dereferenced. Naturally, being a library writer, he decided to
|
dereferenced. Naturally, being a library writer, he decided to
|
||||||
@ -219,7 +226,7 @@ library you see today.</p>
|
|||||||
<table class="docutils citation" frame="void" id="cop95" rules="none">
|
<table class="docutils citation" frame="void" id="cop95" rules="none">
|
||||||
<colgroup><col class="label" /><col /></colgroup>
|
<colgroup><col class="label" /><col /></colgroup>
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<tr><td class="label"><a class="fn-backref" href="#id21" name="cop95">[Cop95]</a></td><td>[Coplien, 1995] Coplien, J., Curiously Recurring Template
|
<tr><td class="label"><a class="fn-backref" href="#id21">[Cop95]</a></td><td>[Coplien, 1995] Coplien, J., Curiously Recurring Template
|
||||||
Patterns, C++ Report, February 1995, pp. 24-27.</td></tr>
|
Patterns, C++ Report, February 1995, pp. 24-27.</td></tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
@ -232,10 +239,11 @@ LocalWords: incrementable xxx min prev inplace png oldeqnew AccessTag struct
|
|||||||
LocalWords: TraversalTag typename lvalues DWA Hmm JGS -->
|
LocalWords: TraversalTag typename lvalues DWA Hmm JGS -->
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<hr class="docutils footer" />
|
|
||||||
<div class="footer">
|
<div class="footer">
|
||||||
<a class="reference" href="index.rst">View document source</a>.
|
<hr class="footer" />
|
||||||
Generated by <a class="reference" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
<a class="reference external" href="index.rst">View document source</a>.
|
||||||
|
Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
8
doc/index.rst
Executable file → Normal file
8
doc/index.rst
Executable file → Normal file
@ -1,3 +1,7 @@
|
|||||||
|
.. Distributed under the Boost
|
||||||
|
.. Software License, Version 1.0. (See accompanying
|
||||||
|
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
+++++++++++++++++++++++++++++++++++++++++++++++++
|
+++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
The Boost.Iterator Library |(logo)|__
|
The Boost.Iterator Library |(logo)|__
|
||||||
+++++++++++++++++++++++++++++++++++++++++++++++++
|
+++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
@ -39,7 +43,7 @@ __ ../../../index.htm
|
|||||||
The components of the Boost Iterator Library replace the
|
The components of the Boost Iterator Library replace the
|
||||||
older Boost Iterator Adaptor Library.
|
older Boost Iterator Adaptor Library.
|
||||||
|
|
||||||
.. _concepts: ../../../more/generic_programming.html#concept
|
.. _concepts: http://www.boost.org/more/generic_programming.html#concept
|
||||||
|
|
||||||
.. contents:: **Table of Contents**
|
.. contents:: **Table of Contents**
|
||||||
|
|
||||||
@ -267,7 +271,7 @@ over how your iterator works: you can add additional constructors,
|
|||||||
or even override the iterator functionality provided by the
|
or even override the iterator functionality provided by the
|
||||||
library.
|
library.
|
||||||
|
|
||||||
.. _`type generator`: ../../../more/generic_programming.html#type_generator
|
.. _`type generator`: http://www.boost.org/more/generic_programming.html#type_generator
|
||||||
|
|
||||||
If you're looking for the old ``projection_iterator`` component,
|
If you're looking for the old ``projection_iterator`` component,
|
||||||
its functionality has been merged into ``transform_iterator``: as
|
its functionality has been merged into ``transform_iterator``: as
|
||||||
|
@ -3,13 +3,13 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="generator" content="Docutils 0.3.8: http://docutils.sourceforge.net/" />
|
<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
|
||||||
<title>Indirect Iterator</title>
|
<title>Indirect Iterator</title>
|
||||||
<meta name="author" content="David Abrahams, Jeremy Siek, Thomas Witt" />
|
<meta name="author" content="David Abrahams, Jeremy Siek, Thomas Witt" />
|
||||||
<meta name="organization" content="Boost Consulting, Indiana University Open Systems Lab, University of Hanover Institute for Transport Railway Operation and Construction" />
|
<meta name="organization" content="Boost Consulting, Indiana University Open Systems Lab, University of Hanover Institute for Transport Railway Operation and Construction" />
|
||||||
<meta name="date" content="2004-11-01" />
|
<meta name="date" content="2006-09-11" />
|
||||||
<meta name="copyright" content="Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003." />
|
<meta name="copyright" content="Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003." />
|
||||||
<link rel="stylesheet" href="default.css" type="text/css" />
|
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="document" id="indirect-iterator">
|
<div class="document" id="indirect-iterator">
|
||||||
@ -21,22 +21,28 @@
|
|||||||
<tr><th class="docinfo-name">Author:</th>
|
<tr><th class="docinfo-name">Author:</th>
|
||||||
<td>David Abrahams, Jeremy Siek, Thomas Witt</td></tr>
|
<td>David Abrahams, Jeremy Siek, Thomas Witt</td></tr>
|
||||||
<tr><th class="docinfo-name">Contact:</th>
|
<tr><th class="docinfo-name">Contact:</th>
|
||||||
<td><a class="first reference" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a>, <a class="reference" href="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</a>, <a class="last reference" href="mailto:witt@ive.uni-hannover.de">witt@ive.uni-hannover.de</a></td></tr>
|
<td><a class="first reference external" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a>, <a class="reference external" href="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</a>, <a class="last reference external" href="mailto:witt@ive.uni-hannover.de">witt@ive.uni-hannover.de</a></td></tr>
|
||||||
<tr><th class="docinfo-name">Organization:</th>
|
<tr><th class="docinfo-name">Organization:</th>
|
||||||
<td><a class="first reference" href="http://www.boost-consulting.com">Boost Consulting</a>, Indiana University <a class="reference" href="http://www.osl.iu.edu">Open Systems
|
<td><a class="first reference external" href="http://www.boost-consulting.com">Boost Consulting</a>, Indiana University <a class="reference external" href="http://www.osl.iu.edu">Open Systems
|
||||||
Lab</a>, University of Hanover <a class="last reference" href="http://www.ive.uni-hannover.de">Institute for Transport
|
Lab</a>, University of Hanover <a class="last reference external" href="http://www.ive.uni-hannover.de">Institute for Transport
|
||||||
Railway Operation and Construction</a></td></tr>
|
Railway Operation and Construction</a></td></tr>
|
||||||
<tr><th class="docinfo-name">Date:</th>
|
<tr><th class="docinfo-name">Date:</th>
|
||||||
<td>2004-11-01</td></tr>
|
<td>2006-09-11</td></tr>
|
||||||
<tr><th class="docinfo-name">Copyright:</th>
|
<tr><th class="docinfo-name">Copyright:</th>
|
||||||
<td>Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003.</td></tr>
|
<td>Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003.</td></tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
<!-- Distributed under the Boost -->
|
||||||
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
<table class="docutils field-list" frame="void" rules="none">
|
<table class="docutils field-list" frame="void" rules="none">
|
||||||
<col class="field-name" />
|
<col class="field-name" />
|
||||||
<col class="field-body" />
|
<col class="field-body" />
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<tr class="field"><th class="field-name">abstract:</th><td class="field-body"><tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> adapts an iterator by applying an
|
<tr class="field"><th class="field-name">abstract:</th><td class="field-body"><!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
||||||
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
|
<tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> adapts an iterator by applying an
|
||||||
<em>extra</em> dereference inside of <tt class="docutils literal"><span class="pre">operator*()</span></tt>. For example, this
|
<em>extra</em> dereference inside of <tt class="docutils literal"><span class="pre">operator*()</span></tt>. For example, this
|
||||||
iterator adaptor makes it possible to view a container of pointers
|
iterator adaptor makes it possible to view a container of pointers
|
||||||
(e.g. <tt class="docutils literal"><span class="pre">list<foo*></span></tt>) as if it were a container of the pointed-to type
|
(e.g. <tt class="docutils literal"><span class="pre">list<foo*></span></tt>) as if it were a container of the pointed-to type
|
||||||
@ -48,17 +54,20 @@ not an iterator.</td>
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<div class="contents topic" id="table-of-contents">
|
<div class="contents topic" id="table-of-contents">
|
||||||
<p class="topic-title first"><a name="table-of-contents">Table of Contents</a></p>
|
<p class="topic-title first">Table of Contents</p>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li><a class="reference" href="#indirect-iterator-synopsis" id="id2" name="id2"><tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> synopsis</a></li>
|
<li><a class="reference internal" href="#indirect-iterator-synopsis" id="id2"><tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> synopsis</a></li>
|
||||||
<li><a class="reference" href="#indirect-iterator-requirements" id="id3" name="id3"><tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> requirements</a></li>
|
<li><a class="reference internal" href="#indirect-iterator-requirements" id="id3"><tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> requirements</a></li>
|
||||||
<li><a class="reference" href="#indirect-iterator-models" id="id4" name="id4"><tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> models</a></li>
|
<li><a class="reference internal" href="#indirect-iterator-models" id="id4"><tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> models</a></li>
|
||||||
<li><a class="reference" href="#indirect-iterator-operations" id="id5" name="id5"><tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> operations</a></li>
|
<li><a class="reference internal" href="#indirect-iterator-operations" id="id5"><tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> operations</a></li>
|
||||||
<li><a class="reference" href="#example" id="id6" name="id6">Example</a></li>
|
<li><a class="reference internal" href="#example" id="id6">Example</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="indirect-iterator-synopsis">
|
<div class="section" id="indirect-iterator-synopsis">
|
||||||
<h1><a class="toc-backref" href="#id2" name="indirect-iterator-synopsis"><tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> synopsis</a></h1>
|
<h1><a class="toc-backref" href="#id2"><tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> synopsis</a></h1>
|
||||||
|
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
||||||
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
<pre class="literal-block">
|
<pre class="literal-block">
|
||||||
template <
|
template <
|
||||||
class Iterator
|
class Iterator
|
||||||
@ -136,7 +145,7 @@ else
|
|||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="indirect-iterator-requirements">
|
<div class="section" id="indirect-iterator-requirements">
|
||||||
<h1><a class="toc-backref" href="#id3" name="indirect-iterator-requirements"><tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> requirements</a></h1>
|
<h1><a class="toc-backref" href="#id3"><tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> requirements</a></h1>
|
||||||
<p>The expression <tt class="docutils literal"><span class="pre">*v</span></tt>, where <tt class="docutils literal"><span class="pre">v</span></tt> is an object of
|
<p>The expression <tt class="docutils literal"><span class="pre">*v</span></tt>, where <tt class="docutils literal"><span class="pre">v</span></tt> is an object of
|
||||||
<tt class="docutils literal"><span class="pre">iterator_traits<Iterator>::value_type</span></tt>, shall be valid
|
<tt class="docutils literal"><span class="pre">iterator_traits<Iterator>::value_type</span></tt>, shall be valid
|
||||||
expression and convertible to <tt class="docutils literal"><span class="pre">reference</span></tt>. <tt class="docutils literal"><span class="pre">Iterator</span></tt> shall
|
expression and convertible to <tt class="docutils literal"><span class="pre">reference</span></tt>. <tt class="docutils literal"><span class="pre">Iterator</span></tt> shall
|
||||||
@ -150,7 +159,7 @@ parameter is not <tt class="docutils literal"><span class="pre">use_default</spa
|
|||||||
deducing the default for the <tt class="docutils literal"><span class="pre">value_type</span></tt> member.]</p>
|
deducing the default for the <tt class="docutils literal"><span class="pre">value_type</span></tt> member.]</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="indirect-iterator-models">
|
<div class="section" id="indirect-iterator-models">
|
||||||
<h1><a class="toc-backref" href="#id4" name="indirect-iterator-models"><tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> models</a></h1>
|
<h1><a class="toc-backref" href="#id4"><tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> models</a></h1>
|
||||||
<p>In addition to the concepts indicated by <tt class="docutils literal"><span class="pre">iterator_category</span></tt>
|
<p>In addition to the concepts indicated by <tt class="docutils literal"><span class="pre">iterator_category</span></tt>
|
||||||
and by <tt class="docutils literal"><span class="pre">iterator_traversal<indirect_iterator>::type</span></tt>, a
|
and by <tt class="docutils literal"><span class="pre">iterator_traversal<indirect_iterator>::type</span></tt>, a
|
||||||
specialization of <tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> models the following
|
specialization of <tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> models the following
|
||||||
@ -171,7 +180,7 @@ expression (where <tt class="docutils literal"><span class="pre">t</span></tt> i
|
|||||||
interoperable with <tt class="docutils literal"><span class="pre">Y</span></tt>.</p>
|
interoperable with <tt class="docutils literal"><span class="pre">Y</span></tt>.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="indirect-iterator-operations">
|
<div class="section" id="indirect-iterator-operations">
|
||||||
<h1><a class="toc-backref" href="#id5" name="indirect-iterator-operations"><tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> operations</a></h1>
|
<h1><a class="toc-backref" href="#id5"><tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> operations</a></h1>
|
||||||
<p>In addition to the operations required by the concepts described
|
<p>In addition to the operations required by the concepts described
|
||||||
above, specializations of <tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> provide the
|
above, specializations of <tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> provide the
|
||||||
following operations.</p>
|
following operations.</p>
|
||||||
@ -260,9 +269,12 @@ indirect_iterator(
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
||||||
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="example">
|
<div class="section" id="example">
|
||||||
<h1><a class="toc-backref" href="#id6" name="example">Example</a></h1>
|
<h1><a class="toc-backref" href="#id6">Example</a></h1>
|
||||||
<p>This example prints an array of characters, using
|
<p>This example prints an array of characters, using
|
||||||
<tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> to access the array of characters through an
|
<tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> to access the array of characters through an
|
||||||
array of pointers. Next <tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> is used with the
|
array of pointers. Next <tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> is used with the
|
||||||
@ -320,13 +332,14 @@ a,b,c,d,e,f,g,
|
|||||||
b,c,d,e,f,g,h,
|
b,c,d,e,f,g,h,
|
||||||
a,b,c,d,e,f,g,
|
a,b,c,d,e,f,g,
|
||||||
</pre>
|
</pre>
|
||||||
<p>The source code for this example can be found <a class="reference" href="../example/indirect_iterator_example.cpp">here</a>.</p>
|
<p>The source code for this example can be found <a class="reference external" href="../example/indirect_iterator_example.cpp">here</a>.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<hr class="docutils footer" />
|
|
||||||
<div class="footer">
|
<div class="footer">
|
||||||
<a class="reference" href="indirect_iterator.rst">View document source</a>.
|
<hr class="footer" />
|
||||||
Generated by <a class="reference" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
<a class="reference external" href="indirect_iterator.rst">View document source</a>.
|
||||||
|
Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
0
doc/indirect_iterator.pdf
Executable file → Normal file
0
doc/indirect_iterator.pdf
Executable file → Normal file
@ -1,3 +1,7 @@
|
|||||||
|
.. Distributed under the Boost
|
||||||
|
.. Software License, Version 1.0. (See accompanying
|
||||||
|
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
+++++++++++++++++++
|
+++++++++++++++++++
|
||||||
Indirect Iterator
|
Indirect Iterator
|
||||||
+++++++++++++++++++
|
+++++++++++++++++++
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
.. Copyright David Abrahams 2006. Distributed under the Boost
|
||||||
|
.. Software License, Version 1.0. (See accompanying
|
||||||
|
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
``indirect_iterator`` adapts an iterator by applying an
|
``indirect_iterator`` adapts an iterator by applying an
|
||||||
*extra* dereference inside of ``operator*()``. For example, this
|
*extra* dereference inside of ``operator*()``. For example, this
|
||||||
iterator adaptor makes it possible to view a container of pointers
|
iterator adaptor makes it possible to view a container of pointers
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
.. Copyright David Abrahams 2006. Distributed under the Boost
|
||||||
|
.. Software License, Version 1.0. (See accompanying
|
||||||
|
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
Example
|
Example
|
||||||
.......
|
.......
|
||||||
|
|
||||||
|
@ -1,245 +0,0 @@
|
|||||||
Index: indirect_iterator_ref.rst
|
|
||||||
===================================================================
|
|
||||||
RCS file: /cvsroot/boost/boost/libs/iterator/doc/indirect_iterator_ref.rst,v
|
|
||||||
retrieving revision 1.2
|
|
||||||
retrieving revision 1.21
|
|
||||||
diff -w -d -u -b -r1.2 -r1.21
|
|
||||||
--- indirect_iterator_ref.rst 22 Sep 2003 19:55:00 -0000 1.2
|
|
||||||
+++ indirect_iterator_ref.rst 15 Jan 2004 00:01:33 -0000 1.21
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -3,82 +3,139 @@
|
|
||||||
template <
|
|
||||||
class Iterator
|
|
||||||
, class Value = use_default
|
|
||||||
|
|
||||||
Issue 9.15
|
|
||||||
|
|
||||||
- , unsigned Access = use_default_access
|
|
||||||
- , class Traversal = use_default
|
|
||||||
+ , class CategoryOrTraversal = use_default
|
|
||||||
, class Reference = use_default
|
|
||||||
, class Difference = use_default
|
|
||||||
>
|
|
||||||
class indirect_iterator
|
|
||||||
|
|
||||||
Issue 9.37x
|
|
||||||
|
|
||||||
- : public iterator_adaptor</* see discussion */>
|
|
||||||
{
|
|
||||||
- friend class iterator_core_access;
|
|
||||||
public:
|
|
||||||
+ typedef /* see below */ value_type;
|
|
||||||
+ typedef /* see below */ reference;
|
|
||||||
+ typedef /* see below */ pointer;
|
|
||||||
+ typedef /* see below */ difference_type;
|
|
||||||
+ typedef /* see below */ iterator_category;
|
|
||||||
+
|
|
||||||
indirect_iterator();
|
|
||||||
indirect_iterator(Iterator x);
|
|
||||||
+
|
|
||||||
|
|
||||||
Issue 9.15
|
|
||||||
|
|
||||||
template <
|
|
||||||
- class Iterator2, class Value2, unsigned Access2, class Traversal2
|
|
||||||
+ class Iterator2, class Value2, class Category2
|
|
||||||
, class Reference2, class Difference2
|
|
||||||
>
|
|
||||||
indirect_iterator(
|
|
||||||
indirect_iterator<
|
|
||||||
- Iterator2, Value2, Access2, Traversal2, Reference2, Difference2
|
|
||||||
+ Iterator2, Value2, Category2, Reference2, Difference2
|
|
||||||
> const& y
|
|
||||||
, typename enable_if_convertible<Iterator2, Iterator>::type* = 0 // exposition
|
|
||||||
);
|
|
||||||
|
|
||||||
Issue 9.37x
|
|
||||||
|
|
||||||
- private: // as-if specification
|
|
||||||
- typename indirect_iterator::reference dereference() const
|
|
||||||
- {
|
|
||||||
- return **this->base();
|
|
||||||
- }
|
|
||||||
+
|
|
||||||
+ Iterator const& base() const;
|
|
||||||
+ reference operator*() const;
|
|
||||||
+ indirect_iterator& operator++();
|
|
||||||
+ indirect_iterator& operator--();
|
|
||||||
+ private:
|
|
||||||
+ Iterator m_iterator; // exposition
|
|
||||||
};
|
|
||||||
|
|
||||||
+
|
|
||||||
+The member types of ``indirect_iterator`` are defined according to
|
|
||||||
+the following pseudo-code, where ``V`` is
|
|
||||||
+``iterator_traits<Iterator>::value_type``
|
|
||||||
+
|
|
||||||
+.. parsed-literal::
|
|
||||||
+
|
|
||||||
+ if (Value is use_default) then
|
|
||||||
+ typedef remove_const<pointee<V>::type>::type value_type;
|
|
||||||
+ else
|
|
||||||
+ typedef remove_const<Value>::type value_type;
|
|
||||||
+
|
|
||||||
+ if (Reference is use_default) then
|
|
||||||
+ if (Value is use_default) then
|
|
||||||
+ typedef indirect_reference<V>::type reference;
|
|
||||||
+ else
|
|
||||||
+ typedef Value& reference;
|
|
||||||
+ else
|
|
||||||
+ typedef Reference reference;
|
|
||||||
+
|
|
||||||
+ if (Value is use_default) then
|
|
||||||
+ typedef pointee<V>::type\* pointer;
|
|
||||||
+ else
|
|
||||||
+ typedef Value\* pointer;
|
|
||||||
+
|
|
||||||
+ if (Difference is use_default)
|
|
||||||
+ typedef iterator_traits<Iterator>::difference_type difference_type;
|
|
||||||
+ else
|
|
||||||
+ typedef Difference difference_type;
|
|
||||||
+
|
|
||||||
+ if (CategoryOrTraversal is use_default)
|
|
||||||
+ typedef |iterator-category|_\ (
|
|
||||||
+ iterator_traversal<Iterator>::type,``reference``,``value_type``
|
|
||||||
+ ) iterator_category;
|
|
||||||
+ else
|
|
||||||
+ typedef |iterator-category|_\ (
|
|
||||||
+ CategoryOrTraversal,``reference``,``value_type``
|
|
||||||
+ ) iterator_category;
|
|
||||||
+
|
|
||||||
+
|
|
||||||
|
|
||||||
``indirect_iterator`` requirements
|
|
||||||
..................................
|
|
||||||
|
|
||||||
Issue 9.40x
|
|
||||||
|
|
||||||
-The ``value_type`` of the ``Iterator`` template parameter should
|
|
||||||
-itself be dereferenceable. The return type of the ``operator*`` for
|
|
||||||
-the ``value_type`` must be the same type as the ``Reference`` template
|
|
||||||
-parameter. The ``Value`` template parameter will be the ``value_type``
|
|
||||||
-for the ``indirect_iterator``, unless ``Value`` is const. If ``Value``
|
|
||||||
-is ``const X``, then ``value_type`` will be *non-* ``const X``. The
|
|
||||||
-default for ``Value`` is
|
|
||||||
+The expression ``*v``, where ``v`` is an object of
|
|
||||||
+``iterator_traits<Iterator>::value_type``, shall be valid
|
|
||||||
+expression and convertible to ``reference``. ``Iterator`` shall
|
|
||||||
+model the traversal concept indicated by ``iterator_category``.
|
|
||||||
+``Value``, ``Reference``, and ``Difference`` shall be chosen so
|
|
||||||
+that ``value_type``, ``reference``, and ``difference_type`` meet
|
|
||||||
+the requirements indicated by ``iterator_category``.
|
|
||||||
|
|
||||||
-::
|
|
||||||
+[Note: there are further requirements on the
|
|
||||||
+``iterator_traits<Iterator>::value_type`` if the ``Value``
|
|
||||||
+parameter is not ``use_default``, as implied by the algorithm for
|
|
||||||
+deducing the default for the ``value_type`` member.]
|
|
||||||
|
|
||||||
- iterator_traits< iterator_traits<Iterator>::value_type >::value_type
|
|
||||||
|
|
||||||
Issue 9.37x
|
|
||||||
|
|
||||||
+``indirect_iterator`` models
|
|
||||||
+............................
|
|
||||||
|
|
||||||
-If the default is used for ``Value``, then there must be a valid
|
|
||||||
-specialization of ``iterator_traits`` for the value type of the base
|
|
||||||
-iterator.
|
|
||||||
+In addition to the concepts indicated by ``iterator_category``
|
|
||||||
+and by ``iterator_traversal<indirect_iterator>::type``, a
|
|
||||||
+specialization of ``indirect_iterator`` models the following
|
|
||||||
+concepts, Where ``v`` is an object of
|
|
||||||
+``iterator_traits<Iterator>::value_type``:
|
|
||||||
|
|
||||||
-The ``Reference`` parameter will be the ``reference`` type of the
|
|
||||||
-``indirect_iterator``. The default is ``Value&``.
|
|
||||||
+ * Readable Iterator if ``reference(*v)`` is convertible to
|
|
||||||
+ ``value_type``.
|
|
||||||
|
|
||||||
-The ``Access`` and ``Traversal`` parameters are passed unchanged to
|
|
||||||
-the corresponding parameters of the ``iterator_adaptor`` base
|
|
||||||
-class, and the ``Iterator`` parameter is passed unchanged as the
|
|
||||||
-``Base`` parameter to the ``iterator_adaptor`` base class.
|
|
||||||
+ * Writable Iterator if ``reference(*v) = t`` is a valid
|
|
||||||
+ expression (where ``t`` is an object of type
|
|
||||||
+ ``indirect_iterator::value_type``)
|
|
||||||
|
|
||||||
-The indirect iterator will model the most refined standard traversal
|
|
||||||
-concept that is modeled by the ``Iterator`` type. The indirect
|
|
||||||
-iterator will model the most refined standard access concept that is
|
|
||||||
-modeled by the value type of ``Iterator``.
|
|
||||||
+ * Lvalue Iterator if ``reference`` is a reference type.
|
|
||||||
+
|
|
||||||
+``indirect_iterator<X,V1,C1,R1,D1>`` is interoperable with
|
|
||||||
+``indirect_iterator<Y,V2,C2,R2,D2>`` if and only if ``X`` is
|
|
||||||
+interoperable with ``Y``.
|
|
||||||
|
|
||||||
|
|
||||||
``indirect_iterator`` operations
|
|
||||||
................................
|
|
||||||
|
|
||||||
Issue 9.37x
|
|
||||||
|
|
||||||
+In addition to the operations required by the concepts described
|
|
||||||
+above, specializations of ``indirect_iterator`` provide the
|
|
||||||
+following operations.
|
|
||||||
+
|
|
||||||
+
|
|
||||||
|
|
||||||
Issue 9.28 and 9.37x
|
|
||||||
|
|
||||||
``indirect_iterator();``
|
|
||||||
|
|
||||||
:Requires: ``Iterator`` must be Default Constructible.
|
|
||||||
:Returns: An instance of ``indirect_iterator`` with
|
|
||||||
- a default constructed base object.
|
|
||||||
+ a default-constructed ``m_iterator``.
|
|
||||||
|
|
||||||
|
|
||||||
Issue 9.37x
|
|
||||||
|
|
||||||
``indirect_iterator(Iterator x);``
|
|
||||||
|
|
||||||
:Returns: An instance of ``indirect_iterator`` with
|
|
||||||
- the ``iterator_adaptor`` subobject copy constructed from ``x``.
|
|
||||||
+ ``m_iterator`` copy constructed from ``x``.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
|
|
||||||
Issue 9.29
|
|
||||||
|
|
||||||
@@ -94,5 +151,27 @@
|
|
||||||
);
|
|
||||||
|
|
||||||
:Requires: ``Iterator2`` is implicitly convertible to ``Iterator``.
|
|
||||||
-:Returns: An instance of ``indirect_iterator`` that is a copy of ``y``.
|
|
||||||
+:Returns: An instance of ``indirect_iterator`` whose
|
|
||||||
+ ``m_iterator`` subobject is constructed from ``y.base()``.
|
|
||||||
+
|
|
||||||
|
|
||||||
Issue 9.37x
|
|
||||||
|
|
||||||
+``Iterator const& base() const;``
|
|
||||||
|
|
||||||
+:Returns: ``m_iterator``
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+``reference operator*() const;``
|
|
||||||
+
|
|
||||||
+:Returns: ``**m_iterator``
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+``indirect_iterator& operator++();``
|
|
||||||
+
|
|
||||||
+:Effects: ``++m_iterator``
|
|
||||||
+:Returns: ``*this``
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+``indirect_iterator& operator--();``
|
|
||||||
+
|
|
||||||
+:Effects: ``--m_iterator``
|
|
||||||
+:Returns: ``*this``
|
|
@ -1,220 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" ?>
|
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
|
||||||
<head>
|
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
||||||
<meta name="generator" content="Docutils 0.3.6: http://docutils.sourceforge.net/" />
|
|
||||||
<title></title>
|
|
||||||
<link rel="stylesheet" href="default.css" type="text/css" />
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="document">
|
|
||||||
<pre class="literal-block">
|
|
||||||
template <
|
|
||||||
class Iterator
|
|
||||||
, class Value = use_default
|
|
||||||
, class CategoryOrTraversal = use_default
|
|
||||||
, class Reference = use_default
|
|
||||||
, class Difference = use_default
|
|
||||||
>
|
|
||||||
class indirect_iterator
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
typedef /* see below */ value_type;
|
|
||||||
typedef /* see below */ reference;
|
|
||||||
typedef /* see below */ pointer;
|
|
||||||
typedef /* see below */ difference_type;
|
|
||||||
typedef /* see below */ iterator_category;
|
|
||||||
|
|
||||||
indirect_iterator();
|
|
||||||
indirect_iterator(Iterator x);
|
|
||||||
|
|
||||||
template <
|
|
||||||
class Iterator2, class Value2, class Category2
|
|
||||||
, class Reference2, class Difference2
|
|
||||||
>
|
|
||||||
indirect_iterator(
|
|
||||||
indirect_iterator<
|
|
||||||
Iterator2, Value2, Category2, Reference2, Difference2
|
|
||||||
> const& y
|
|
||||||
, typename enable_if_convertible<Iterator2, Iterator>::type* = 0 // exposition
|
|
||||||
);
|
|
||||||
|
|
||||||
Iterator const& base() const;
|
|
||||||
reference operator*() const;
|
|
||||||
indirect_iterator& operator++();
|
|
||||||
indirect_iterator& operator--();
|
|
||||||
private:
|
|
||||||
Iterator m_iterator; // exposition
|
|
||||||
};
|
|
||||||
</pre>
|
|
||||||
<p>The member types of <tt class="literal"><span class="pre">indirect_iterator</span></tt> are defined according to
|
|
||||||
the following pseudo-code, where <tt class="literal"><span class="pre">V</span></tt> is
|
|
||||||
<tt class="literal"><span class="pre">iterator_traits<Iterator>::value_type</span></tt></p>
|
|
||||||
<pre class="literal-block">
|
|
||||||
if (Value is use_default) then
|
|
||||||
typedef remove_const<pointee<V>::type>::type value_type;
|
|
||||||
else
|
|
||||||
typedef remove_const<Value>::type value_type;
|
|
||||||
|
|
||||||
if (Reference is use_default) then
|
|
||||||
if (Value is use_default) then
|
|
||||||
typedef indirect_reference<V>::type reference;
|
|
||||||
else
|
|
||||||
typedef Value& reference;
|
|
||||||
else
|
|
||||||
typedef Reference reference;
|
|
||||||
|
|
||||||
if (Value is use_default) then
|
|
||||||
typedef pointee<V>::type* pointer;
|
|
||||||
else
|
|
||||||
typedef Value* pointer;
|
|
||||||
|
|
||||||
if (Difference is use_default)
|
|
||||||
typedef iterator_traits<Iterator>::difference_type difference_type;
|
|
||||||
else
|
|
||||||
typedef Difference difference_type;
|
|
||||||
|
|
||||||
if (CategoryOrTraversal is use_default)
|
|
||||||
typedef <em>iterator-category</em> (
|
|
||||||
iterator_traversal<Iterator>::type,``reference``,``value_type``
|
|
||||||
) iterator_category;
|
|
||||||
else
|
|
||||||
typedef <em>iterator-category</em> (
|
|
||||||
CategoryOrTraversal,``reference``,``value_type``
|
|
||||||
) iterator_category;
|
|
||||||
</pre>
|
|
||||||
<div class="section" id="indirect-iterator-requirements">
|
|
||||||
<h1><a name="indirect-iterator-requirements"><tt class="literal"><span class="pre">indirect_iterator</span></tt> requirements</a></h1>
|
|
||||||
<p>The expression <tt class="literal"><span class="pre">*v</span></tt>, where <tt class="literal"><span class="pre">v</span></tt> is an object of
|
|
||||||
<tt class="literal"><span class="pre">iterator_traits<Iterator>::value_type</span></tt>, shall be valid
|
|
||||||
expression and convertible to <tt class="literal"><span class="pre">reference</span></tt>. <tt class="literal"><span class="pre">Iterator</span></tt> shall
|
|
||||||
model the traversal concept indicated by <tt class="literal"><span class="pre">iterator_category</span></tt>.
|
|
||||||
<tt class="literal"><span class="pre">Value</span></tt>, <tt class="literal"><span class="pre">Reference</span></tt>, and <tt class="literal"><span class="pre">Difference</span></tt> shall be chosen so
|
|
||||||
that <tt class="literal"><span class="pre">value_type</span></tt>, <tt class="literal"><span class="pre">reference</span></tt>, and <tt class="literal"><span class="pre">difference_type</span></tt> meet
|
|
||||||
the requirements indicated by <tt class="literal"><span class="pre">iterator_category</span></tt>.</p>
|
|
||||||
<p>[Note: there are further requirements on the
|
|
||||||
<tt class="literal"><span class="pre">iterator_traits<Iterator>::value_type</span></tt> if the <tt class="literal"><span class="pre">Value</span></tt>
|
|
||||||
parameter is not <tt class="literal"><span class="pre">use_default</span></tt>, as implied by the algorithm for
|
|
||||||
deducing the default for the <tt class="literal"><span class="pre">value_type</span></tt> member.]</p>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="indirect-iterator-models">
|
|
||||||
<h1><a name="indirect-iterator-models"><tt class="literal"><span class="pre">indirect_iterator</span></tt> models</a></h1>
|
|
||||||
<p>In addition to the concepts indicated by <tt class="literal"><span class="pre">iterator_category</span></tt>
|
|
||||||
and by <tt class="literal"><span class="pre">iterator_traversal<indirect_iterator>::type</span></tt>, a
|
|
||||||
specialization of <tt class="literal"><span class="pre">indirect_iterator</span></tt> models the following
|
|
||||||
concepts, Where <tt class="literal"><span class="pre">v</span></tt> is an object of
|
|
||||||
<tt class="literal"><span class="pre">iterator_traits<Iterator>::value_type</span></tt>:</p>
|
|
||||||
<blockquote>
|
|
||||||
<ul class="simple">
|
|
||||||
<li>Readable Iterator if <tt class="literal"><span class="pre">reference(*v)</span></tt> is convertible to
|
|
||||||
<tt class="literal"><span class="pre">value_type</span></tt>.</li>
|
|
||||||
<li>Writable Iterator if <tt class="literal"><span class="pre">reference(*v)</span> <span class="pre">=</span> <span class="pre">t</span></tt> is a valid
|
|
||||||
expression (where <tt class="literal"><span class="pre">t</span></tt> is an object of type
|
|
||||||
<tt class="literal"><span class="pre">indirect_iterator::value_type</span></tt>)</li>
|
|
||||||
<li>Lvalue Iterator if <tt class="literal"><span class="pre">reference</span></tt> is a reference type.</li>
|
|
||||||
</ul>
|
|
||||||
</blockquote>
|
|
||||||
<p><tt class="literal"><span class="pre">indirect_iterator<X,V1,C1,R1,D1></span></tt> is interoperable with
|
|
||||||
<tt class="literal"><span class="pre">indirect_iterator<Y,V2,C2,R2,D2></span></tt> if and only if <tt class="literal"><span class="pre">X</span></tt> is
|
|
||||||
interoperable with <tt class="literal"><span class="pre">Y</span></tt>.</p>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="indirect-iterator-operations">
|
|
||||||
<h1><a name="indirect-iterator-operations"><tt class="literal"><span class="pre">indirect_iterator</span></tt> operations</a></h1>
|
|
||||||
<p>In addition to the operations required by the concepts described
|
|
||||||
above, specializations of <tt class="literal"><span class="pre">indirect_iterator</span></tt> provide the
|
|
||||||
following operations.</p>
|
|
||||||
<p><tt class="literal"><span class="pre">indirect_iterator();</span></tt></p>
|
|
||||||
<table class="field-list" frame="void" rules="none">
|
|
||||||
<col class="field-name" />
|
|
||||||
<col class="field-body" />
|
|
||||||
<tbody valign="top">
|
|
||||||
<tr class="field"><th class="field-name">Requires:</th><td class="field-body"><tt class="literal"><span class="pre">Iterator</span></tt> must be Default Constructible.</td>
|
|
||||||
</tr>
|
|
||||||
<tr class="field"><th class="field-name">Effects:</th><td class="field-body">Constructs an instance of <tt class="literal"><span class="pre">indirect_iterator</span></tt> with
|
|
||||||
a default-constructed <tt class="literal"><span class="pre">m_iterator</span></tt>.</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<p><tt class="literal"><span class="pre">indirect_iterator(Iterator</span> <span class="pre">x);</span></tt></p>
|
|
||||||
<table class="field-list" frame="void" rules="none">
|
|
||||||
<col class="field-name" />
|
|
||||||
<col class="field-body" />
|
|
||||||
<tbody valign="top">
|
|
||||||
<tr class="field"><th class="field-name">Effects:</th><td class="field-body">Constructs an instance of <tt class="literal"><span class="pre">indirect_iterator</span></tt> with
|
|
||||||
<tt class="literal"><span class="pre">m_iterator</span></tt> copy constructed from <tt class="literal"><span class="pre">x</span></tt>.</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<pre class="literal-block">
|
|
||||||
template <
|
|
||||||
class Iterator2, class Value2, unsigned Access, class Traversal
|
|
||||||
, class Reference2, class Difference2
|
|
||||||
>
|
|
||||||
indirect_iterator(
|
|
||||||
indirect_iterator<
|
|
||||||
Iterator2, Value2, Access, Traversal, Reference2, Difference2
|
|
||||||
> const& y
|
|
||||||
, typename enable_if_convertible<Iterator2, Iterator>::type* = 0 // exposition
|
|
||||||
);
|
|
||||||
</pre>
|
|
||||||
<table class="field-list" frame="void" rules="none">
|
|
||||||
<col class="field-name" />
|
|
||||||
<col class="field-body" />
|
|
||||||
<tbody valign="top">
|
|
||||||
<tr class="field"><th class="field-name">Requires:</th><td class="field-body"><tt class="literal"><span class="pre">Iterator2</span></tt> is implicitly convertible to <tt class="literal"><span class="pre">Iterator</span></tt>.</td>
|
|
||||||
</tr>
|
|
||||||
<tr class="field"><th class="field-name">Effects:</th><td class="field-body">Constructs an instance of <tt class="literal"><span class="pre">indirect_iterator</span></tt> whose
|
|
||||||
<tt class="literal"><span class="pre">m_iterator</span></tt> subobject is constructed from <tt class="literal"><span class="pre">y.base()</span></tt>.</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<p><tt class="literal"><span class="pre">Iterator</span> <span class="pre">const&</span> <span class="pre">base()</span> <span class="pre">const;</span></tt></p>
|
|
||||||
<table class="field-list" frame="void" rules="none">
|
|
||||||
<col class="field-name" />
|
|
||||||
<col class="field-body" />
|
|
||||||
<tbody valign="top">
|
|
||||||
<tr class="field"><th class="field-name">Returns:</th><td class="field-body"><tt class="literal"><span class="pre">m_iterator</span></tt></td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<p><tt class="literal"><span class="pre">reference</span> <span class="pre">operator*()</span> <span class="pre">const;</span></tt></p>
|
|
||||||
<table class="field-list" frame="void" rules="none">
|
|
||||||
<col class="field-name" />
|
|
||||||
<col class="field-body" />
|
|
||||||
<tbody valign="top">
|
|
||||||
<tr class="field"><th class="field-name">Returns:</th><td class="field-body"><tt class="literal"><span class="pre">**m_iterator</span></tt></td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<p><tt class="literal"><span class="pre">indirect_iterator&</span> <span class="pre">operator++();</span></tt></p>
|
|
||||||
<table class="field-list" frame="void" rules="none">
|
|
||||||
<col class="field-name" />
|
|
||||||
<col class="field-body" />
|
|
||||||
<tbody valign="top">
|
|
||||||
<tr class="field"><th class="field-name">Effects:</th><td class="field-body"><tt class="literal"><span class="pre">++m_iterator</span></tt></td>
|
|
||||||
</tr>
|
|
||||||
<tr class="field"><th class="field-name">Returns:</th><td class="field-body"><tt class="literal"><span class="pre">*this</span></tt></td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<p><tt class="literal"><span class="pre">indirect_iterator&</span> <span class="pre">operator--();</span></tt></p>
|
|
||||||
<table class="field-list" frame="void" rules="none">
|
|
||||||
<col class="field-name" />
|
|
||||||
<col class="field-body" />
|
|
||||||
<tbody valign="top">
|
|
||||||
<tr class="field"><th class="field-name">Effects:</th><td class="field-body"><tt class="literal"><span class="pre">--m_iterator</span></tt></td>
|
|
||||||
</tr>
|
|
||||||
<tr class="field"><th class="field-name">Returns:</th><td class="field-body"><tt class="literal"><span class="pre">*this</span></tt></td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<hr class="footer" />
|
|
||||||
<div class="footer">
|
|
||||||
<a class="reference" href="indirect_iterator_ref.rst">View document source</a>.
|
|
||||||
Generated by <a class="reference" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@ -1,3 +1,7 @@
|
|||||||
|
.. Copyright David Abrahams 2006. Distributed under the Boost
|
||||||
|
.. Software License, Version 1.0. (See accompanying
|
||||||
|
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
template <
|
template <
|
||||||
|
0
doc/indirect_reference_ref.rst
Executable file → Normal file
0
doc/indirect_reference_ref.rst
Executable file → Normal file
24
doc/interoperability-revisited.rst
Executable file → Normal file
24
doc/interoperability-revisited.rst
Executable file → Normal file
@ -5,6 +5,9 @@
|
|||||||
:date: $Date$
|
:date: $Date$
|
||||||
:copyright: Copyright Thomas Witt 2004.
|
:copyright: Copyright Thomas Witt 2004.
|
||||||
|
|
||||||
|
.. Distributed under the Boost
|
||||||
|
.. Software License, Version 1.0. (See accompanying
|
||||||
|
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
Problem
|
Problem
|
||||||
=======
|
=======
|
||||||
@ -15,7 +18,7 @@ implement interoperable iterators.
|
|||||||
In the following text a simplified example of the current iterator_facade specification is used to
|
In the following text a simplified example of the current iterator_facade specification is used to
|
||||||
illustrate the problem.
|
illustrate the problem.
|
||||||
|
|
||||||
In the current specification binary operators are implemented in the following way:
|
In the current specification binary operators are implemented in the following way::
|
||||||
|
|
||||||
template <class Derived>
|
template <class Derived>
|
||||||
struct Facade
|
struct Facade
|
||||||
@ -43,7 +46,8 @@ enable_if<is_interoperable<Derived1, Derived2>, bool> operator==(
|
|||||||
}
|
}
|
||||||
|
|
||||||
The problem with this is that operator== always forwards to Derived1::equal_to. The net effect is that the
|
The problem with this is that operator== always forwards to Derived1::equal_to. The net effect is that the
|
||||||
following "obvious" implementation of to interoperable types does not quite work.
|
following "obvious" implementation of to interoperable types does
|
||||||
|
not quite work. ::
|
||||||
|
|
||||||
struct Mutable : Facade<Mutable>
|
struct Mutable : Facade<Mutable>
|
||||||
{
|
{
|
||||||
@ -88,7 +92,7 @@ struct Constant : Tag<Constant>
|
|||||||
Beside the fact that the code is significantly more complex to understand and to teach there is
|
Beside the fact that the code is significantly more complex to understand and to teach there is
|
||||||
a major design problem lurking here. Note that in both types equal_to is a function template with
|
a major design problem lurking here. Note that in both types equal_to is a function template with
|
||||||
an unconstrained argument T. This is necessary so that further types can be made interoperable with
|
an unconstrained argument T. This is necessary so that further types can be made interoperable with
|
||||||
Mutable or Constant. Would Mutable be defined as
|
Mutable or Constant. Would Mutable be defined as ::
|
||||||
|
|
||||||
struct Mutable : Facade<Mutable>
|
struct Mutable : Facade<Mutable>
|
||||||
{
|
{
|
||||||
@ -108,7 +112,7 @@ The two way dependency can be avoided by enabling type conversion in the binary
|
|||||||
implementation. Note that this is the usual way interoperability betwween types is achieved
|
implementation. Note that this is the usual way interoperability betwween types is achieved
|
||||||
for binary operators and one reason why binary operators are usually implemented as non-members.
|
for binary operators and one reason why binary operators are usually implemented as non-members.
|
||||||
|
|
||||||
A simple implementation of this strategy would look like this
|
A simple implementation of this strategy would look like this ::
|
||||||
|
|
||||||
template<
|
template<
|
||||||
class T1
|
class T1
|
||||||
@ -142,7 +146,8 @@ enable_if<is_interoperable<Derived1, Derived2>, bool> operator==(
|
|||||||
return static_cast<Base const&>(lhs).equal_to(static_cast<Derived2 const&(rhs));
|
return static_cast<Base const&>(lhs).equal_to(static_cast<Derived2 const&(rhs));
|
||||||
}
|
}
|
||||||
|
|
||||||
This way our original simple and "obvious" implementation would work again.
|
This way our original simple and "obvious" implementation would
|
||||||
|
work again. ::
|
||||||
|
|
||||||
c == m; // ok, dispatched to Constant::equal_to
|
c == m; // ok, dispatched to Constant::equal_to
|
||||||
m == c; // ok, dispatched to Constant::equal_to, m converted to Constant
|
m == c; // ok, dispatched to Constant::equal_to, m converted to Constant
|
||||||
@ -155,7 +160,7 @@ that iteration is a very basic operation this possible performance degradation i
|
|||||||
acceptable.
|
acceptable.
|
||||||
|
|
||||||
Luckily whe can have our cake and eat it by a slightly more clever implementation of the binary
|
Luckily whe can have our cake and eat it by a slightly more clever implementation of the binary
|
||||||
operators.
|
operators. ::
|
||||||
|
|
||||||
template<
|
template<
|
||||||
class Derived1
|
class Derived1
|
||||||
@ -181,12 +186,13 @@ enable_if<is_convertible<Derived1, Derived2>, bool> operator==(
|
|||||||
return static_cast<Derived2 const&>(rhs).equal_to(static_cast<Derived1 const&(lhs));
|
return static_cast<Derived2 const&>(rhs).equal_to(static_cast<Derived1 const&(lhs));
|
||||||
}
|
}
|
||||||
|
|
||||||
Given our simple and obvious definition of Mutable and Constant nothing has changed yet.
|
Given our simple and obvious definition of Mutable and Constant nothing has changed yet. ::
|
||||||
|
|
||||||
c == m; // ok, dispatched to Constant::equal_to, m converted to Constant
|
c == m; // ok, dispatched to Constant::equal_to, m converted to Constant
|
||||||
m == c; // ok, dispatched to Constant::equal_to, m converted to Constant
|
m == c; // ok, dispatched to Constant::equal_to, m converted to Constant
|
||||||
|
|
||||||
But now the user can avoid the type conversion by supplying the appropriate overload in Constant
|
But now the user can avoid the type conversion by supplying the
|
||||||
|
appropriate overload in Constant ::
|
||||||
|
|
||||||
struct Constant : Facade<Constant>
|
struct Constant : Facade<Constant>
|
||||||
{
|
{
|
||||||
@ -205,7 +211,7 @@ m == c; // ok, dispatched to Constant::equal_to(Mutable const&), no conversion
|
|||||||
|
|
||||||
This definition of operator== introduces a possible ambiguity when both types are convertible
|
This definition of operator== introduces a possible ambiguity when both types are convertible
|
||||||
to each other. I don't think this is a problem as this behaviour is the same with concrete types.
|
to each other. I don't think this is a problem as this behaviour is the same with concrete types.
|
||||||
I.e.
|
I.e. ::
|
||||||
|
|
||||||
struct A {};
|
struct A {};
|
||||||
|
|
||||||
|
170
doc/issues.html
170
doc/issues.html
@ -1,170 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" ?>
|
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
|
||||||
<head>
|
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
||||||
<meta name="generator" content="Docutils 0.3.6: http://docutils.sourceforge.net/" />
|
|
||||||
<title>Problem with is_writable and is_swappable in N1550</title>
|
|
||||||
<link rel="stylesheet" href="default.css" type="text/css" />
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<h1 class="title">Problem with <tt class="literal"><span class="pre">is_writable</span></tt> and <tt class="literal"><span class="pre">is_swappable</span></tt> in <a class="reference" href="http://www.boost-consulting.com/writing/n1550.html">N1550</a></h1>
|
|
||||||
<div class="document" id="problem-with-is-writable-and-is-swappable-in-n1550">
|
|
||||||
<table class="field-list" frame="void" rules="none">
|
|
||||||
<col class="field-name" />
|
|
||||||
<col class="field-body" />
|
|
||||||
<tbody valign="top">
|
|
||||||
<tr class="field"><th class="field-name">Author:</th><td class="field-body">David Abrahams and Jeremy Siek</td>
|
|
||||||
</tr>
|
|
||||||
<tr class="field"><th class="field-name">Contact:</th><td class="field-body"><a class="reference" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a>, <a class="reference" href="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</a></td>
|
|
||||||
</tr>
|
|
||||||
<tr class="field"><th class="field-name">Organization:</th><td class="field-body"><a class="reference" href="http://www.boost-consulting.com">Boost Consulting</a>, Indiana University Bloomington</td>
|
|
||||||
</tr>
|
|
||||||
<tr class="field"><th class="field-name">date:</th><td class="field-body">$Date$</td>
|
|
||||||
</tr>
|
|
||||||
<tr class="field"><th class="field-name">Copyright:</th><td class="field-body">Copyright David Abrahams, Jeremy Siek 2003. Use, modification and
|
|
||||||
distribution is subject to the Boost Software License,
|
|
||||||
Version 1.0. (See accompanying file LICENSE_1_0.txt or copy
|
|
||||||
at <a class="reference" href="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</a>)</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<div class="contents topic" id="table-of-contents">
|
|
||||||
<p class="topic-title first"><a name="table-of-contents">Table of Contents</a></p>
|
|
||||||
<ul class="simple">
|
|
||||||
<li><a class="reference" href="#introduction" id="id1" name="id1">Introduction</a></li>
|
|
||||||
<li><a class="reference" href="#proposed-resolution" id="id2" name="id2">Proposed Resolution</a></li>
|
|
||||||
<li><a class="reference" href="#rationale" id="id3" name="id3">Rationale</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="introduction">
|
|
||||||
<h1><a class="toc-backref" href="#id1" name="introduction">Introduction</a></h1>
|
|
||||||
<p>The <tt class="literal"><span class="pre">is_writable</span></tt> and <tt class="literal"><span class="pre">is_swappable</span></tt> traits classes in <a class="reference" href="http://www.boost-consulting.com/writing/n1550.html">N1550</a>
|
|
||||||
provide a mechanism for determining at compile time if an iterator
|
|
||||||
type is a model of the new Writable Iterator and Swappable Iterator
|
|
||||||
concepts, analogous to <tt class="literal"><span class="pre">iterator_traits<X>::iterator_category</span></tt>
|
|
||||||
for the old iterator concepts. For backward compatibility,
|
|
||||||
<tt class="literal"><span class="pre">is_writable</span></tt> and <tt class="literal"><span class="pre">is_swappable</span></tt> not only work with new
|
|
||||||
iterators, but they also are intended to work for old
|
|
||||||
iterators (iterators that meet the requirements for one of the
|
|
||||||
iterator concepts in the current standard). In the case of old
|
|
||||||
iterators, the writability and swapability is deduced based on the
|
|
||||||
<tt class="literal"><span class="pre">iterator_category</span></tt> and also the <tt class="literal"><span class="pre">reference</span></tt> type. The
|
|
||||||
specification for this deduction gives false positives for forward
|
|
||||||
iterators that have non-assignable value types.</p>
|
|
||||||
<p>To review, the part of the <tt class="literal"><span class="pre">is_writable</span></tt> trait definition which
|
|
||||||
applies to old iterators is:</p>
|
|
||||||
<pre class="literal-block">
|
|
||||||
if (cat is convertible to output_iterator_tag)
|
|
||||||
return true;
|
|
||||||
else if (cat is convertible to forward_iterator_tag
|
|
||||||
and iterator_traits<Iterator>::reference is a
|
|
||||||
mutable reference)
|
|
||||||
return true;
|
|
||||||
else
|
|
||||||
return false;
|
|
||||||
</pre>
|
|
||||||
<p>Suppose the <tt class="literal"><span class="pre">value_type</span></tt> of the iterator <tt class="literal"><span class="pre">It</span></tt> has a private
|
|
||||||
assignment operator:</p>
|
|
||||||
<pre class="literal-block">
|
|
||||||
class B {
|
|
||||||
public:
|
|
||||||
...
|
|
||||||
private:
|
|
||||||
B& operator=(const B&);
|
|
||||||
};
|
|
||||||
</pre>
|
|
||||||
<p>and suppose the <tt class="literal"><span class="pre">reference</span></tt> type of the iterator is <tt class="literal"><span class="pre">B&</span></tt>. In
|
|
||||||
that case, <tt class="literal"><span class="pre">is_writable<It>::value</span></tt> will be true when in fact
|
|
||||||
attempting to write into <tt class="literal"><span class="pre">B</span></tt> will cause an error.</p>
|
|
||||||
<p>The same problem applies to <tt class="literal"><span class="pre">is_swappable</span></tt>.</p>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="proposed-resolution">
|
|
||||||
<h1><a class="toc-backref" href="#id2" name="proposed-resolution">Proposed Resolution</a></h1>
|
|
||||||
<ol class="arabic">
|
|
||||||
<li><p class="first">Remove the <tt class="literal"><span class="pre">is_writable</span></tt> and <tt class="literal"><span class="pre">is_swappable</span></tt> traits, and remove the
|
|
||||||
requirements in the Writable Iterator and Swappable Iterator concepts
|
|
||||||
that require their models to support these traits.</p>
|
|
||||||
</li>
|
|
||||||
<li><p class="first">Change the <tt class="literal"><span class="pre">is_readable</span></tt> specification to be:
|
|
||||||
<tt class="literal"><span class="pre">is_readable<X>::type</span></tt> is <tt class="literal"><span class="pre">true_type</span></tt> if the
|
|
||||||
result type of <tt class="literal"><span class="pre">X::operator*</span></tt> is convertible to
|
|
||||||
<tt class="literal"><span class="pre">iterator_traits<X>::value_type</span></tt> and is <tt class="literal"><span class="pre">false_type</span></tt>
|
|
||||||
otherwise. Also, <tt class="literal"><span class="pre">is_readable</span></tt> is required to satisfy
|
|
||||||
the requirements for the UnaryTypeTrait concept
|
|
||||||
(defined in the type traits proposal).</p>
|
|
||||||
<p>Remove the requirement for support of the <tt class="literal"><span class="pre">is_readable</span></tt> trait from
|
|
||||||
the Readable Iterator concept.</p>
|
|
||||||
</li>
|
|
||||||
<li><p class="first">Remove the <tt class="literal"><span class="pre">iterator_tag</span></tt> class.</p>
|
|
||||||
</li>
|
|
||||||
<li><p class="first">Change the specification of <tt class="literal"><span class="pre">traversal_category</span></tt> to:</p>
|
|
||||||
<pre class="literal-block">
|
|
||||||
traversal-category(Iterator) =
|
|
||||||
let cat = iterator_traits<Iterator>::iterator_category
|
|
||||||
if (cat is convertible to incrementable_iterator_tag)
|
|
||||||
return cat; // Iterator is a new iterator
|
|
||||||
else if (cat is convertible to random_access_iterator_tag)
|
|
||||||
return random_access_traversal_tag;
|
|
||||||
else if (cat is convertible to bidirectional_iterator_tag)
|
|
||||||
return bidirectional_traversal_tag;
|
|
||||||
else if (cat is convertible to forward_iterator_tag)
|
|
||||||
return forward_traversal_tag;
|
|
||||||
else if (cat is convertible to input_iterator_tag)
|
|
||||||
return single_pass_iterator_tag;
|
|
||||||
else if (cat is convertible to output_iterator_tag)
|
|
||||||
return incrementable_iterator_tag;
|
|
||||||
else
|
|
||||||
return null_category_tag;
|
|
||||||
</pre>
|
|
||||||
</li>
|
|
||||||
</ol>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="rationale">
|
|
||||||
<h1><a class="toc-backref" href="#id3" name="rationale">Rationale</a></h1>
|
|
||||||
<ol class="arabic simple">
|
|
||||||
<li>There are two reasons for removing <tt class="literal"><span class="pre">is_writable</span></tt>
|
|
||||||
and <tt class="literal"><span class="pre">is_swappable</span></tt>. The first is that we do not know of
|
|
||||||
a way to fix the specification so that it gives the correct
|
|
||||||
answer for all iterators. Second, there was only a weak
|
|
||||||
motivation for having <tt class="literal"><span class="pre">is_writable</span></tt> and <tt class="literal"><span class="pre">is_swappable</span></tt>
|
|
||||||
there in the first place. The main motivation was simply
|
|
||||||
uniformity: we have tags for the old iterator categories
|
|
||||||
so we should have tags for the new iterator categories.
|
|
||||||
While having tags and the capability to dispatch based
|
|
||||||
on the traversal categories is often used, we see
|
|
||||||
less of a need for dispatching based on writability
|
|
||||||
and swappability, since typically algorithms
|
|
||||||
that need these capabilities have no alternative if
|
|
||||||
they are not provided.</li>
|
|
||||||
<li>We discovered that the <tt class="literal"><span class="pre">is_readable</span></tt> trait can be implemented
|
|
||||||
using only the iterator type itself and its <tt class="literal"><span class="pre">value_type</span></tt>.
|
|
||||||
Therefore we remove the requirement for <tt class="literal"><span class="pre">is_readable</span></tt> from the
|
|
||||||
Readable Iterator concept, and change the definition of
|
|
||||||
<tt class="literal"><span class="pre">is_readable</span></tt> so that it works for any iterator type.</li>
|
|
||||||
<li>The purpose of the <tt class="literal"><span class="pre">iterator_tag</span></tt> class was to
|
|
||||||
bundle the traversal and access category tags
|
|
||||||
into the <tt class="literal"><span class="pre">iterator_category</span></tt> typedef.
|
|
||||||
With <tt class="literal"><span class="pre">is_writable</span></tt> and <tt class="literal"><span class="pre">is_swappable</span></tt> gone, and
|
|
||||||
<tt class="literal"><span class="pre">is_readable</span></tt> no longer in need of special hints,
|
|
||||||
there is no reason for iterators to provide
|
|
||||||
information about the access capabilities of an iterator.
|
|
||||||
Thus there is no need for the <tt class="literal"><span class="pre">iterator_tag</span></tt>. The
|
|
||||||
traversal tag can be directly used for the
|
|
||||||
<tt class="literal"><span class="pre">iterator_category</span></tt>. If a new iterator is intended to be backward
|
|
||||||
compatible with old iterator concepts, a tag type
|
|
||||||
that is convertible to both one of the new traversal tags
|
|
||||||
and also to an old iterator tag can be created and use
|
|
||||||
for the <tt class="literal"><span class="pre">iterator_category</span></tt>.</li>
|
|
||||||
<li>The changes to the specification of <tt class="literal"><span class="pre">traversal_category</span></tt> are a
|
|
||||||
direct result of the removal of <tt class="literal"><span class="pre">iterator_tag</span></tt>.</li>
|
|
||||||
</ol>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<hr class="footer" />
|
|
||||||
<div class="footer">
|
|
||||||
<a class="reference" href="issues.rst">View document source</a>.
|
|
||||||
Generated by <a class="reference" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
0
doc/issues.rst
Executable file → Normal file
0
doc/issues.rst
Executable file → Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -3,13 +3,13 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="generator" content="Docutils 0.3.8: http://docutils.sourceforge.net/" />
|
<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
|
||||||
<title>Iterator Adaptor</title>
|
<title>Iterator Adaptor</title>
|
||||||
<meta name="author" content="David Abrahams, Jeremy Siek, Thomas Witt" />
|
<meta name="author" content="David Abrahams, Jeremy Siek, Thomas Witt" />
|
||||||
<meta name="organization" content="Boost Consulting, Indiana University Open Systems Lab, University of Hanover Institute for Transport Railway Operation and Construction" />
|
<meta name="organization" content="Boost Consulting, Indiana University Open Systems Lab, University of Hanover Institute for Transport Railway Operation and Construction" />
|
||||||
<meta name="date" content="2004-11-01" />
|
<meta name="date" content="2006-09-11" />
|
||||||
<meta name="copyright" content="Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003." />
|
<meta name="copyright" content="Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003." />
|
||||||
<link rel="stylesheet" href="default.css" type="text/css" />
|
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="document" id="iterator-adaptor">
|
<div class="document" id="iterator-adaptor">
|
||||||
@ -21,17 +21,20 @@
|
|||||||
<tr><th class="docinfo-name">Author:</th>
|
<tr><th class="docinfo-name">Author:</th>
|
||||||
<td>David Abrahams, Jeremy Siek, Thomas Witt</td></tr>
|
<td>David Abrahams, Jeremy Siek, Thomas Witt</td></tr>
|
||||||
<tr><th class="docinfo-name">Contact:</th>
|
<tr><th class="docinfo-name">Contact:</th>
|
||||||
<td><a class="first reference" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a>, <a class="reference" href="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</a>, <a class="last reference" href="mailto:witt@ive.uni-hannover.de">witt@ive.uni-hannover.de</a></td></tr>
|
<td><a class="first reference external" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a>, <a class="reference external" href="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</a>, <a class="last reference external" href="mailto:witt@ive.uni-hannover.de">witt@ive.uni-hannover.de</a></td></tr>
|
||||||
<tr><th class="docinfo-name">Organization:</th>
|
<tr><th class="docinfo-name">Organization:</th>
|
||||||
<td><a class="first reference" href="http://www.boost-consulting.com">Boost Consulting</a>, Indiana University <a class="reference" href="http://www.osl.iu.edu">Open Systems
|
<td><a class="first reference external" href="http://www.boost-consulting.com">Boost Consulting</a>, Indiana University <a class="reference external" href="http://www.osl.iu.edu">Open Systems
|
||||||
Lab</a>, University of Hanover <a class="last reference" href="http://www.ive.uni-hannover.de">Institute for Transport
|
Lab</a>, University of Hanover <a class="last reference external" href="http://www.ive.uni-hannover.de">Institute for Transport
|
||||||
Railway Operation and Construction</a></td></tr>
|
Railway Operation and Construction</a></td></tr>
|
||||||
<tr><th class="docinfo-name">Date:</th>
|
<tr><th class="docinfo-name">Date:</th>
|
||||||
<td>2004-11-01</td></tr>
|
<td>2006-09-11</td></tr>
|
||||||
<tr><th class="docinfo-name">Copyright:</th>
|
<tr><th class="docinfo-name">Copyright:</th>
|
||||||
<td>Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003.</td></tr>
|
<td>Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003.</td></tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
<!-- Distributed under the Boost -->
|
||||||
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
<table class="docutils field-list" frame="void" rules="none">
|
<table class="docutils field-list" frame="void" rules="none">
|
||||||
<col class="field-name" />
|
<col class="field-name" />
|
||||||
<col class="field-body" />
|
<col class="field-body" />
|
||||||
@ -40,6 +43,9 @@ Railway Operation and Construction</a></td></tr>
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
<!-- Distributed under the Boost -->
|
||||||
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
<!-- Version 1.1 of this ReStructuredText document corresponds to
|
<!-- Version 1.1 of this ReStructuredText document corresponds to
|
||||||
n1530_, the paper accepted by the LWG. -->
|
n1530_, the paper accepted by the LWG. -->
|
||||||
<!-- Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. -->
|
<!-- Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. -->
|
||||||
@ -54,26 +60,29 @@ depends on the operations supported by the <tt class="docutils literal"><span cl
|
|||||||
core interface functions of <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> are redefined in the
|
core interface functions of <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> are redefined in the
|
||||||
<tt class="docutils literal"><span class="pre">Derived</span></tt> class.</p>
|
<tt class="docutils literal"><span class="pre">Derived</span></tt> class.</p>
|
||||||
<div class="contents topic" id="table-of-contents">
|
<div class="contents topic" id="table-of-contents">
|
||||||
<p class="topic-title first"><a name="table-of-contents">Table of Contents</a></p>
|
<p class="topic-title first">Table of Contents</p>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li><a class="reference" href="#overview" id="id6" name="id6">Overview</a></li>
|
<li><a class="reference internal" href="#overview" id="id6">Overview</a></li>
|
||||||
<li><a class="reference" href="#reference" id="id7" name="id7">Reference</a><ul>
|
<li><a class="reference internal" href="#reference" id="id7">Reference</a><ul>
|
||||||
<li><a class="reference" href="#iterator-adaptor-requirements" id="id8" name="id8"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> requirements</a></li>
|
<li><a class="reference internal" href="#iterator-adaptor-requirements" id="id8"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> requirements</a></li>
|
||||||
<li><a class="reference" href="#iterator-adaptor-base-class-parameters" id="id9" name="id9"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> base class parameters</a></li>
|
<li><a class="reference internal" href="#iterator-adaptor-base-class-parameters" id="id9"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> base class parameters</a></li>
|
||||||
<li><a class="reference" href="#iterator-adaptor-public-operations" id="id10" name="id10"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> public operations</a></li>
|
<li><a class="reference internal" href="#iterator-adaptor-public-operations" id="id10"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> public operations</a></li>
|
||||||
<li><a class="reference" href="#iterator-adaptor-protected-member-functions" id="id11" name="id11"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> protected member functions</a></li>
|
<li><a class="reference internal" href="#iterator-adaptor-protected-member-functions" id="id11"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> protected member functions</a></li>
|
||||||
<li><a class="reference" href="#iterator-adaptor-private-member-functions" id="id12" name="id12"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> private member functions</a></li>
|
<li><a class="reference internal" href="#iterator-adaptor-private-member-functions" id="id12"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> private member functions</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a class="reference" href="#tutorial-example" id="id13" name="id13">Tutorial Example</a></li>
|
<li><a class="reference internal" href="#tutorial-example" id="id13">Tutorial Example</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="overview">
|
<div class="section" id="overview">
|
||||||
<h1><a class="toc-backref" href="#id6" name="overview">Overview</a></h1>
|
<h1><a class="toc-backref" href="#id6">Overview</a></h1>
|
||||||
|
<!-- Distributed under the Boost -->
|
||||||
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
<!-- Version 1.2 of this ReStructuredText document corresponds to
|
<!-- Version 1.2 of this ReStructuredText document corresponds to
|
||||||
n1530_, the paper accepted by the LWG for TR1. -->
|
n1530_, the paper accepted by the LWG for TR1. -->
|
||||||
<!-- Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. -->
|
<!-- Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. -->
|
||||||
<p>The <tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> class template adapts some <tt class="docutils literal"><span class="pre">Base</span></tt> <a class="footnote-reference" href="#base" id="id1" name="id1">[1]</a>
|
<p>The <tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> class template adapts some <tt class="docutils literal"><span class="pre">Base</span></tt><a class="footnote-reference" href="#base" id="id1"><sup>1</sup></a>
|
||||||
type to create a new iterator. Instantiations of <tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt>
|
type to create a new iterator. Instantiations of <tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt>
|
||||||
are derived from a corresponding instantiation of <tt class="docutils literal"><span class="pre">iterator_facade</span></tt>
|
are derived from a corresponding instantiation of <tt class="docutils literal"><span class="pre">iterator_facade</span></tt>
|
||||||
and implement the core behaviors in terms of the <tt class="docutils literal"><span class="pre">Base</span></tt> type. In
|
and implement the core behaviors in terms of the <tt class="docutils literal"><span class="pre">Base</span></tt> type. In
|
||||||
@ -82,7 +91,7 @@ instance of the <tt class="docutils literal"><span class="pre">Base</span></tt>
|
|||||||
<table class="docutils footnote" frame="void" id="base" rules="none">
|
<table class="docutils footnote" frame="void" id="base" rules="none">
|
||||||
<colgroup><col class="label" /><col /></colgroup>
|
<colgroup><col class="label" /><col /></colgroup>
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<tr><td class="label"><a name="base">[1]</a></td><td><em>(<a class="fn-backref" href="#id1">1</a>, <a class="fn-backref" href="#id3">2</a>)</em> The term "Base" here does not refer to a base class and is
|
<tr><td class="label">[1]</td><td><em>(<a class="fn-backref" href="#id1">1</a>, <a class="fn-backref" href="#id3">2</a>)</em> The term "Base" here does not refer to a base class and is
|
||||||
not meant to imply the use of derivation. We have followed the lead
|
not meant to imply the use of derivation. We have followed the lead
|
||||||
of the standard library, which provides a base() function to access
|
of the standard library, which provides a base() function to access
|
||||||
the underlying iterator object of a <tt class="docutils literal"><span class="pre">reverse_iterator</span></tt> adaptor.</td></tr>
|
the underlying iterator object of a <tt class="docutils literal"><span class="pre">reverse_iterator</span></tt> adaptor.</td></tr>
|
||||||
@ -110,7 +119,10 @@ template parameter may not always be identical to the iterator's
|
|||||||
that assumption.</p>
|
that assumption.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="reference">
|
<div class="section" id="reference">
|
||||||
<h1><a class="toc-backref" href="#id7" name="reference">Reference</a></h1>
|
<h1><a class="toc-backref" href="#id7">Reference</a></h1>
|
||||||
|
<!-- Distributed under the Boost -->
|
||||||
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
<!-- Version 1.4 of this ReStructuredText document corresponds to
|
<!-- Version 1.4 of this ReStructuredText document corresponds to
|
||||||
n1530_, the paper accepted by the LWG for TR1. -->
|
n1530_, the paper accepted by the LWG for TR1. -->
|
||||||
<!-- Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. -->
|
<!-- Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. -->
|
||||||
@ -124,7 +136,7 @@ template <
|
|||||||
, class Difference = use_default
|
, class Difference = use_default
|
||||||
>
|
>
|
||||||
class iterator_adaptor
|
class iterator_adaptor
|
||||||
: public iterator_facade<Derived, <em>V'</em>, <em>C'</em>, <em>R'</em>, <em>D'</em>> // see <a class="reference" href="#base-parameters">details</a>
|
: public iterator_facade<Derived, <em>V'</em>, <em>C'</em>, <em>R'</em>, <em>D'</em>> // see <a class="reference internal" href="#base-parameters">details</a>
|
||||||
{
|
{
|
||||||
friend class iterator_core_access;
|
friend class iterator_core_access;
|
||||||
public:
|
public:
|
||||||
@ -158,13 +170,13 @@ class iterator_adaptor
|
|||||||
Base m_iterator; // exposition only
|
Base m_iterator; // exposition only
|
||||||
};
|
};
|
||||||
</pre>
|
</pre>
|
||||||
<a class="target" id="requirements" name="requirements"></a><div class="section" id="iterator-adaptor-requirements">
|
<div class="section" id="iterator-adaptor-requirements">
|
||||||
<h2><a class="toc-backref" href="#id8" name="iterator-adaptor-requirements"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> requirements</a></h2>
|
<span id="requirements"></span><h2><a class="toc-backref" href="#id8"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> requirements</a></h2>
|
||||||
<p><tt class="docutils literal"><span class="pre">static_cast<Derived*>(iterator_adaptor*)</span></tt> shall be well-formed.
|
<p><tt class="docutils literal"><span class="pre">static_cast<Derived*>(iterator_adaptor*)</span></tt> shall be well-formed.
|
||||||
The <tt class="docutils literal"><span class="pre">Base</span></tt> argument shall be Assignable and Copy Constructible.</p>
|
The <tt class="docutils literal"><span class="pre">Base</span></tt> argument shall be Assignable and Copy Constructible.</p>
|
||||||
<a class="target" id="base-parameters" name="base-parameters"></a></div>
|
</div>
|
||||||
<div class="section" id="iterator-adaptor-base-class-parameters">
|
<div class="section" id="iterator-adaptor-base-class-parameters">
|
||||||
<h2><a class="toc-backref" href="#id9" name="iterator-adaptor-base-class-parameters"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> base class parameters</a></h2>
|
<span id="base-parameters"></span><h2><a class="toc-backref" href="#id9"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> base class parameters</a></h2>
|
||||||
<p>The <em>V'</em>, <em>C'</em>, <em>R'</em>, and <em>D'</em> parameters of the <tt class="docutils literal"><span class="pre">iterator_facade</span></tt>
|
<p>The <em>V'</em>, <em>C'</em>, <em>R'</em>, and <em>D'</em> parameters of the <tt class="docutils literal"><span class="pre">iterator_facade</span></tt>
|
||||||
used as a base class in the summary of <tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt>
|
used as a base class in the summary of <tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt>
|
||||||
above are defined as follows:</p>
|
above are defined as follows:</p>
|
||||||
@ -205,7 +217,7 @@ expression involving ``Derived`` in those concepts' requirements. -->
|
|||||||
<!-- That's why it's removed. We're embracing inheritance, remember? -->
|
<!-- That's why it's removed. We're embracing inheritance, remember? -->
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="iterator-adaptor-public-operations">
|
<div class="section" id="iterator-adaptor-public-operations">
|
||||||
<h2><a class="toc-backref" href="#id10" name="iterator-adaptor-public-operations"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> public operations</a></h2>
|
<h2><a class="toc-backref" href="#id10"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> public operations</a></h2>
|
||||||
<p><tt class="docutils literal"><span class="pre">iterator_adaptor();</span></tt></p>
|
<p><tt class="docutils literal"><span class="pre">iterator_adaptor();</span></tt></p>
|
||||||
<table class="docutils field-list" frame="void" rules="none">
|
<table class="docutils field-list" frame="void" rules="none">
|
||||||
<col class="field-name" />
|
<col class="field-name" />
|
||||||
@ -239,7 +251,7 @@ expression involving ``Derived`` in those concepts' requirements. -->
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="iterator-adaptor-protected-member-functions">
|
<div class="section" id="iterator-adaptor-protected-member-functions">
|
||||||
<h2><a class="toc-backref" href="#id11" name="iterator-adaptor-protected-member-functions"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> protected member functions</a></h2>
|
<h2><a class="toc-backref" href="#id11"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> protected member functions</a></h2>
|
||||||
<p><tt class="docutils literal"><span class="pre">Base</span> <span class="pre">const&</span> <span class="pre">base_reference()</span> <span class="pre">const;</span></tt></p>
|
<p><tt class="docutils literal"><span class="pre">Base</span> <span class="pre">const&</span> <span class="pre">base_reference()</span> <span class="pre">const;</span></tt></p>
|
||||||
<table class="docutils field-list" frame="void" rules="none">
|
<table class="docutils field-list" frame="void" rules="none">
|
||||||
<col class="field-name" />
|
<col class="field-name" />
|
||||||
@ -260,7 +272,7 @@ expression involving ``Derived`` in those concepts' requirements. -->
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="iterator-adaptor-private-member-functions">
|
<div class="section" id="iterator-adaptor-private-member-functions">
|
||||||
<h2><a class="toc-backref" href="#id12" name="iterator-adaptor-private-member-functions"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> private member functions</a></h2>
|
<h2><a class="toc-backref" href="#id12"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> private member functions</a></h2>
|
||||||
<p><tt class="docutils literal"><span class="pre">typename</span> <span class="pre">iterator_adaptor::reference</span> <span class="pre">dereference()</span> <span class="pre">const;</span></tt></p>
|
<p><tt class="docutils literal"><span class="pre">typename</span> <span class="pre">iterator_adaptor::reference</span> <span class="pre">dereference()</span> <span class="pre">const;</span></tt></p>
|
||||||
<table class="docutils field-list" frame="void" rules="none">
|
<table class="docutils field-list" frame="void" rules="none">
|
||||||
<col class="field-name" />
|
<col class="field-name" />
|
||||||
@ -329,12 +341,12 @@ typename iterator_adaptor::difference_type distance_to(
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="tutorial-example">
|
<div class="section" id="tutorial-example">
|
||||||
<h1><a class="toc-backref" href="#id13" name="tutorial-example">Tutorial Example</a></h1>
|
<h1><a class="toc-backref" href="#id13">Tutorial Example</a></h1>
|
||||||
<!-- Copyright David Abrahams 2004. Use, modification and distribution is -->
|
<!-- Copyright David Abrahams 2004. Use, modification and distribution is -->
|
||||||
<!-- subject to the Boost Software License, Version 1.0. (See accompanying -->
|
<!-- subject to the Boost Software License, Version 1.0. (See accompanying -->
|
||||||
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
<p>In this section we'll further refine the <tt class="docutils literal"><span class="pre">node_iter</span></tt> class
|
<p>In this section we'll further refine the <tt class="docutils literal"><span class="pre">node_iter</span></tt> class
|
||||||
template we developed in the <a class="reference" href="iterator_facade.html#tutorial-example"><tt class="docutils literal"><span class="pre">iterator_facade</span></tt> tutorial</a>. If you haven't already
|
template we developed in the <a class="reference external" href="iterator_facade.html#tutorial-example"><tt class="docutils literal"><span class="pre">iterator_facade</span></tt> tutorial</a>. If you haven't already
|
||||||
read that material, you should go back now and check it out because
|
read that material, you should go back now and check it out because
|
||||||
we're going to pick up right where it left off.</p>
|
we're going to pick up right where it left off.</p>
|
||||||
<div class="sidebar">
|
<div class="sidebar">
|
||||||
@ -357,12 +369,12 @@ of the same associated types (<tt class="docutils literal"><span class="pre">val
|
|||||||
core functionality is the same: <tt class="docutils literal"><span class="pre">operator*</span></tt> and <tt class="docutils literal"><span class="pre">operator==</span></tt> on
|
core functionality is the same: <tt class="docutils literal"><span class="pre">operator*</span></tt> and <tt class="docutils literal"><span class="pre">operator==</span></tt> on
|
||||||
the <tt class="docutils literal"><span class="pre">node_iterator</span></tt> return the result of invoking the same
|
the <tt class="docutils literal"><span class="pre">node_iterator</span></tt> return the result of invoking the same
|
||||||
operations on the underlying pointer, via the <tt class="docutils literal"><span class="pre">node_iterator</span></tt>'s
|
operations on the underlying pointer, via the <tt class="docutils literal"><span class="pre">node_iterator</span></tt>'s
|
||||||
<a class="reference" href="iterator_facade.html#implementing-the-core-operations"><tt class="docutils literal"><span class="pre">dereference</span></tt> and <tt class="docutils literal"><span class="pre">equal</span></tt> member functions</a>). The only real behavioral difference
|
<a class="reference external" href="iterator_facade.html#implementing-the-core-operations"><tt class="docutils literal"><span class="pre">dereference</span></tt> and <tt class="docutils literal"><span class="pre">equal</span></tt> member functions</a>). The only real behavioral difference
|
||||||
between <tt class="docutils literal"><span class="pre">node_base*</span></tt> and <tt class="docutils literal"><span class="pre">node_iterator</span></tt> can be observed when
|
between <tt class="docutils literal"><span class="pre">node_base*</span></tt> and <tt class="docutils literal"><span class="pre">node_iterator</span></tt> can be observed when
|
||||||
they are incremented: <tt class="docutils literal"><span class="pre">node_iterator</span></tt> follows the
|
they are incremented: <tt class="docutils literal"><span class="pre">node_iterator</span></tt> follows the
|
||||||
<tt class="docutils literal"><span class="pre">m_next</span></tt> pointer, while <tt class="docutils literal"><span class="pre">node_base*</span></tt> just applies an address offset.</p>
|
<tt class="docutils literal"><span class="pre">m_next</span></tt> pointer, while <tt class="docutils literal"><span class="pre">node_base*</span></tt> just applies an address offset.</p>
|
||||||
<p>It turns out that the pattern of building an iterator on another
|
<p>It turns out that the pattern of building an iterator on another
|
||||||
iterator-like type (the <tt class="docutils literal"><span class="pre">Base</span></tt> <a class="footnote-reference" href="#base" id="id3" name="id3">[1]</a> type) while modifying
|
iterator-like type (the <tt class="docutils literal"><span class="pre">Base</span></tt><a class="footnote-reference" href="#base" id="id3"><sup>1</sup></a> type) while modifying
|
||||||
just a few aspects of the underlying type's behavior is an
|
just a few aspects of the underlying type's behavior is an
|
||||||
extremely common one, and it's the pattern addressed by
|
extremely common one, and it's the pattern addressed by
|
||||||
<tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt>. Using <tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> is very much like
|
<tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt>. Using <tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> is very much like
|
||||||
@ -413,7 +425,7 @@ the complicated base class type of <tt class="docutils literal"><span class="pre
|
|||||||
this technique is known not to work with Borland C++ 5.6.4 and
|
this technique is known not to work with Borland C++ 5.6.4 and
|
||||||
Metrowerks CodeWarrior versions prior to 9.0]</p>
|
Metrowerks CodeWarrior versions prior to 9.0]</p>
|
||||||
<p>You can see an example program that exercises this version of the
|
<p>You can see an example program that exercises this version of the
|
||||||
node iterators <a class="reference" href="../example/node_iterator3.cpp">here</a>.</p>
|
node iterators <a class="reference external" href="../example/node_iterator3.cpp">here</a>.</p>
|
||||||
<p>In the case of <tt class="docutils literal"><span class="pre">node_iter</span></tt>, it's not very compelling to pass
|
<p>In the case of <tt class="docutils literal"><span class="pre">node_iter</span></tt>, it's not very compelling to pass
|
||||||
<tt class="docutils literal"><span class="pre">boost::use_default</span></tt> as <tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt>'s <tt class="docutils literal"><span class="pre">Value</span></tt>
|
<tt class="docutils literal"><span class="pre">boost::use_default</span></tt> as <tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt>'s <tt class="docutils literal"><span class="pre">Value</span></tt>
|
||||||
argument; we could have just passed <tt class="docutils literal"><span class="pre">node_iter</span></tt>'s <tt class="docutils literal"><span class="pre">Value</span></tt>
|
argument; we could have just passed <tt class="docutils literal"><span class="pre">node_iter</span></tt>'s <tt class="docutils literal"><span class="pre">Value</span></tt>
|
||||||
@ -431,18 +443,19 @@ std::iterator_traits<Iterator>::<em>some-associated-type</em>
|
|||||||
</pre>
|
</pre>
|
||||||
<p>at least four times.</p>
|
<p>at least four times.</p>
|
||||||
<p>We urge you to review the documentation and implementations of
|
<p>We urge you to review the documentation and implementations of
|
||||||
<a class="reference" href="reverse_iterator.html"><tt class="docutils literal"><span class="pre">reverse_iterator</span></tt></a> and the other Boost <a class="reference" href="index.html#specialized-adaptors">specialized iterator
|
<a class="reference external" href="reverse_iterator.html"><tt class="docutils literal"><span class="pre">reverse_iterator</span></tt></a> and the other Boost <a class="reference external" href="index.html#specialized-adaptors">specialized iterator
|
||||||
adaptors</a> to get an idea of the sorts of things you can do with
|
adaptors</a> to get an idea of the sorts of things you can do with
|
||||||
<tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt>. In particular, have a look at
|
<tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt>. In particular, have a look at
|
||||||
<a class="reference" href="transform_iterator.html"><tt class="docutils literal"><span class="pre">transform_iterator</span></tt></a>, which is perhaps the most straightforward
|
<a class="reference external" href="transform_iterator.html"><tt class="docutils literal"><span class="pre">transform_iterator</span></tt></a>, which is perhaps the most straightforward
|
||||||
adaptor, and also <a class="reference" href="counting_iterator.html"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt></a>, which demonstrates that
|
adaptor, and also <a class="reference external" href="counting_iterator.html"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt></a>, which demonstrates that
|
||||||
<tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt>'s <tt class="docutils literal"><span class="pre">Base</span></tt> type needn't be an iterator.</p>
|
<tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt>'s <tt class="docutils literal"><span class="pre">Base</span></tt> type needn't be an iterator.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<hr class="docutils footer" />
|
|
||||||
<div class="footer">
|
<div class="footer">
|
||||||
<a class="reference" href="iterator_adaptor.rst">View document source</a>.
|
<hr class="footer" />
|
||||||
Generated by <a class="reference" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
<a class="reference external" href="iterator_adaptor.rst">View document source</a>.
|
||||||
|
Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
0
doc/iterator_adaptor.pdf
Executable file → Normal file
0
doc/iterator_adaptor.pdf
Executable file → Normal file
@ -1,3 +1,7 @@
|
|||||||
|
.. Distributed under the Boost
|
||||||
|
.. Software License, Version 1.0. (See accompanying
|
||||||
|
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
+++++++++++++++++
|
+++++++++++++++++
|
||||||
Iterator Adaptor
|
Iterator Adaptor
|
||||||
+++++++++++++++++
|
+++++++++++++++++
|
||||||
|
@ -1,22 +0,0 @@
|
|||||||
Index: iterator_adaptor_abstract.rst
|
|
||||||
===================================================================
|
|
||||||
RCS file: /cvsroot/boost/boost/libs/iterator/doc/iterator_adaptor_abstract.rst,v
|
|
||||||
retrieving revision 1.1
|
|
||||||
retrieving revision 1.2
|
|
||||||
diff -b -d -u -r1.1 -r1.2
|
|
||||||
--- iterator_adaptor_abstract.rst 5 Aug 2003 18:19:55 -0000 1.1
|
|
||||||
+++ iterator_adaptor_abstract.rst 24 Nov 2003 05:02:46 -0000 1.2
|
|
||||||
@@ -1,5 +1,11 @@ Issue 9.21
|
|
||||||
-The ``iterator_adaptor`` is a base class template derived from an
|
|
||||||
-instantiation of ``iterator_facade``. The core interface functions
|
|
||||||
+.. Version 1.1 of this ReStructuredText document corresponds to
|
|
||||||
+ n1530_, the paper accepted by the LWG.
|
|
||||||
+
|
|
||||||
+.. Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. All
|
|
||||||
+ rights reserved
|
|
||||||
+
|
|
||||||
+Each specialization of the ``iterator_adaptor`` class template is derived from
|
|
||||||
+a specialization of ``iterator_facade``. The core interface functions
|
|
||||||
expected by ``iterator_facade`` are implemented in terms of the
|
|
||||||
``iterator_adaptor``\ 's ``Base`` template parameter. A class derived
|
|
||||||
from ``iterator_adaptor`` typically redefines some of the core
|
|
@ -1,3 +1,7 @@
|
|||||||
|
.. Distributed under the Boost
|
||||||
|
.. Software License, Version 1.0. (See accompanying
|
||||||
|
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
.. Version 1.1 of this ReStructuredText document corresponds to
|
.. Version 1.1 of this ReStructuredText document corresponds to
|
||||||
n1530_, the paper accepted by the LWG.
|
n1530_, the paper accepted by the LWG.
|
||||||
|
|
||||||
|
@ -1,35 +0,0 @@
|
|||||||
Index: iterator_adaptor_body.rst
|
|
||||||
===================================================================
|
|
||||||
RCS file: /cvsroot/boost/boost/libs/iterator/doc/iterator_adaptor_body.rst,v
|
|
||||||
retrieving revision 1.2
|
|
||||||
retrieving revision 1.3
|
|
||||||
diff -b -d -u -r1.2 -r1.3
|
|
||||||
--- iterator_adaptor_body.rst 22 Sep 2003 19:55:00 -0000 1.2
|
|
||||||
+++ iterator_adaptor_body.rst 24 Nov 2003 05:02:46 -0000 1.3
|
|
||||||
@@ -1,3 +1,9 @@
|
|
||||||
+.. Version 1.2 of this ReStructuredText document corresponds to
|
|
||||||
+ n1530_, the paper accepted by the LWG for TR1.
|
|
||||||
+
|
|
||||||
+.. Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. All
|
|
||||||
+ rights reserved
|
|
||||||
+
|
|
||||||
The ``iterator_adaptor`` class template adapts some ``Base`` [#base]_
|
|
||||||
type to create a new iterator. Instantiations of ``iterator_adaptor``
|
|
||||||
are derived from a corresponding instantiation of ``iterator_facade``
|
|
||||||
@@ -19,7 +25,7 @@ Issue 9.1 et al
|
|
||||||
redefined in the user's derived class.
|
|
||||||
|
|
||||||
Several of the template parameters of ``iterator_adaptor`` default
|
|
||||||
-to ``use_default`` (or ``use_default_access``). This allows the
|
|
||||||
+to ``use_default``. This allows the
|
|
||||||
user to make use of a default parameter even when she wants to
|
|
||||||
specify a parameter later in the parameter list. Also, the
|
|
||||||
defaults for the corresponding associated types are somewhat
|
|
||||||
@@ -28,6 +34,6 @@ Issue 9.45y
|
|
||||||
the identity of the ``use_default`` type is not left unspecified
|
|
||||||
because specification helps to highlight that the ``Reference``
|
|
||||||
template parameter may not always be identical to the iterator's
|
|
||||||
-``reference`` type, and will keep users making mistakes based on
|
|
||||||
+``reference`` type, and will keep users from making mistakes based on
|
|
||||||
that assumption.
|
|
||||||
|
|
@ -1,3 +1,7 @@
|
|||||||
|
.. Distributed under the Boost
|
||||||
|
.. Software License, Version 1.0. (See accompanying
|
||||||
|
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
.. Version 1.2 of this ReStructuredText document corresponds to
|
.. Version 1.2 of this ReStructuredText document corresponds to
|
||||||
n1530_, the paper accepted by the LWG for TR1.
|
n1530_, the paper accepted by the LWG for TR1.
|
||||||
|
|
||||||
|
@ -1,235 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" ?>
|
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
|
||||||
<head>
|
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
||||||
<meta name="generator" content="Docutils 0.3.8: http://docutils.sourceforge.net/" />
|
|
||||||
<title></title>
|
|
||||||
<link rel="stylesheet" href="default.css" type="text/css" />
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="document">
|
|
||||||
<!-- Version 1.4 of this ReStructuredText document corresponds to
|
|
||||||
n1530_, the paper accepted by the LWG for TR1. -->
|
|
||||||
<!-- Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. -->
|
|
||||||
<pre class="literal-block">
|
|
||||||
template <
|
|
||||||
class Derived
|
|
||||||
, class Base
|
|
||||||
, class Value = use_default
|
|
||||||
, class CategoryOrTraversal = use_default
|
|
||||||
, class Reference = use_default
|
|
||||||
, class Difference = use_default
|
|
||||||
>
|
|
||||||
class iterator_adaptor
|
|
||||||
: public iterator_facade<Derived, <em>V'</em>, <em>C'</em>, <em>R'</em>, <em>D'</em>> // see <a class="reference" href="#base-parameters">details</a>
|
|
||||||
{
|
|
||||||
friend class iterator_core_access;
|
|
||||||
public:
|
|
||||||
iterator_adaptor();
|
|
||||||
explicit iterator_adaptor(Base const& iter);
|
|
||||||
typedef Base base_type;
|
|
||||||
Base const& base() const;
|
|
||||||
protected:
|
|
||||||
typedef iterator_adaptor iterator_adaptor_;
|
|
||||||
Base const& base_reference() const;
|
|
||||||
Base& base_reference();
|
|
||||||
private: // Core iterator interface for iterator_facade.
|
|
||||||
typename iterator_adaptor::reference dereference() const;
|
|
||||||
|
|
||||||
template <
|
|
||||||
class OtherDerived, class OtherIterator, class V, class C, class R, class D
|
|
||||||
>
|
|
||||||
bool equal(iterator_adaptor<OtherDerived, OtherIterator, V, C, R, D> const& x) const;
|
|
||||||
|
|
||||||
void advance(typename iterator_adaptor::difference_type n);
|
|
||||||
void increment();
|
|
||||||
void decrement();
|
|
||||||
|
|
||||||
template <
|
|
||||||
class OtherDerived, class OtherIterator, class V, class C, class R, class D
|
|
||||||
>
|
|
||||||
typename iterator_adaptor::difference_type distance_to(
|
|
||||||
iterator_adaptor<OtherDerived, OtherIterator, V, C, R, D> const& y) const;
|
|
||||||
|
|
||||||
private:
|
|
||||||
Base m_iterator; // exposition only
|
|
||||||
};
|
|
||||||
</pre>
|
|
||||||
<div class="section" id="iterator-adaptor-requirements">
|
|
||||||
<h1><a name="iterator-adaptor-requirements"><span class="target" id="requirements"></span><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> requirements</a></h1>
|
|
||||||
<p><tt class="docutils literal"><span class="pre">static_cast<Derived*>(iterator_adaptor*)</span></tt> shall be well-formed.
|
|
||||||
The <tt class="docutils literal"><span class="pre">Base</span></tt> argument shall be Assignable and Copy Constructible.</p>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="iterator-adaptor-base-class-parameters">
|
|
||||||
<h1><a name="iterator-adaptor-base-class-parameters"><span class="target" id="base-parameters"></span><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> base class parameters</a></h1>
|
|
||||||
<p>The <em>V'</em>, <em>C'</em>, <em>R'</em>, and <em>D'</em> parameters of the <tt class="docutils literal"><span class="pre">iterator_facade</span></tt>
|
|
||||||
used as a base class in the summary of <tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt>
|
|
||||||
above are defined as follows:</p>
|
|
||||||
<pre class="literal-block">
|
|
||||||
<em>V'</em> = if (Value is use_default)
|
|
||||||
return iterator_traits<Base>::value_type
|
|
||||||
else
|
|
||||||
return Value
|
|
||||||
|
|
||||||
<em>C'</em> = if (CategoryOrTraversal is use_default)
|
|
||||||
return iterator_traversal<Base>::type
|
|
||||||
else
|
|
||||||
return CategoryOrTraversal
|
|
||||||
|
|
||||||
<em>R'</em> = if (Reference is use_default)
|
|
||||||
if (Value is use_default)
|
|
||||||
return iterator_traits<Base>::reference
|
|
||||||
else
|
|
||||||
return Value&
|
|
||||||
else
|
|
||||||
return Reference
|
|
||||||
|
|
||||||
<em>D'</em> = if (Difference is use_default)
|
|
||||||
return iterator_traits<Base>::difference_type
|
|
||||||
else
|
|
||||||
return Difference
|
|
||||||
</pre>
|
|
||||||
<!-- ``iterator_adaptor`` models
|
|
||||||
- - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
|
|
||||||
In order for ``Derived`` to model the iterator concepts corresponding
|
|
||||||
to ``iterator_traits<Derived>::iterator_category``, the expressions
|
|
||||||
involving ``m_iterator`` in the specifications of those private member
|
|
||||||
functions of ``iterator_adaptor`` that may be called by
|
|
||||||
``iterator_facade<Derived, V, C, R, D>`` in evaluating any valid
|
|
||||||
expression involving ``Derived`` in those concepts' requirements. -->
|
|
||||||
<!-- The above is confusing and needs a rewrite. -JGS -->
|
|
||||||
<!-- That's why it's removed. We're embracing inheritance, remember? -->
|
|
||||||
</div>
|
|
||||||
<div class="section" id="iterator-adaptor-public-operations">
|
|
||||||
<h1><a name="iterator-adaptor-public-operations"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> public operations</a></h1>
|
|
||||||
<p><tt class="docutils literal"><span class="pre">iterator_adaptor();</span></tt></p>
|
|
||||||
<table class="docutils field-list" frame="void" rules="none">
|
|
||||||
<col class="field-name" />
|
|
||||||
<col class="field-body" />
|
|
||||||
<tbody valign="top">
|
|
||||||
<tr class="field"><th class="field-name">Requires:</th><td class="field-body">The <tt class="docutils literal"><span class="pre">Base</span></tt> type must be Default Constructible.</td>
|
|
||||||
</tr>
|
|
||||||
<tr class="field"><th class="field-name">Returns:</th><td class="field-body">An instance of <tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> with
|
|
||||||
<tt class="docutils literal"><span class="pre">m_iterator</span></tt> default constructed.</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<p><tt class="docutils literal"><span class="pre">explicit</span> <span class="pre">iterator_adaptor(Base</span> <span class="pre">const&</span> <span class="pre">iter);</span></tt></p>
|
|
||||||
<table class="docutils field-list" frame="void" rules="none">
|
|
||||||
<col class="field-name" />
|
|
||||||
<col class="field-body" />
|
|
||||||
<tbody valign="top">
|
|
||||||
<tr class="field"><th class="field-name">Returns:</th><td class="field-body">An instance of <tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> with
|
|
||||||
<tt class="docutils literal"><span class="pre">m_iterator</span></tt> copy constructed from <tt class="docutils literal"><span class="pre">iter</span></tt>.</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<p><tt class="docutils literal"><span class="pre">Base</span> <span class="pre">const&</span> <span class="pre">base()</span> <span class="pre">const;</span></tt></p>
|
|
||||||
<table class="docutils field-list" frame="void" rules="none">
|
|
||||||
<col class="field-name" />
|
|
||||||
<col class="field-body" />
|
|
||||||
<tbody valign="top">
|
|
||||||
<tr class="field"><th class="field-name">Returns:</th><td class="field-body"><tt class="docutils literal"><span class="pre">m_iterator</span></tt></td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="iterator-adaptor-protected-member-functions">
|
|
||||||
<h1><a name="iterator-adaptor-protected-member-functions"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> protected member functions</a></h1>
|
|
||||||
<p><tt class="docutils literal"><span class="pre">Base</span> <span class="pre">const&</span> <span class="pre">base_reference()</span> <span class="pre">const;</span></tt></p>
|
|
||||||
<table class="docutils field-list" frame="void" rules="none">
|
|
||||||
<col class="field-name" />
|
|
||||||
<col class="field-body" />
|
|
||||||
<tbody valign="top">
|
|
||||||
<tr class="field"><th class="field-name">Returns:</th><td class="field-body">A const reference to <tt class="docutils literal"><span class="pre">m_iterator</span></tt>.</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<p><tt class="docutils literal"><span class="pre">Base&</span> <span class="pre">base_reference();</span></tt></p>
|
|
||||||
<table class="docutils field-list" frame="void" rules="none">
|
|
||||||
<col class="field-name" />
|
|
||||||
<col class="field-body" />
|
|
||||||
<tbody valign="top">
|
|
||||||
<tr class="field"><th class="field-name">Returns:</th><td class="field-body">A non-const reference to <tt class="docutils literal"><span class="pre">m_iterator</span></tt>.</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
<div class="section" id="iterator-adaptor-private-member-functions">
|
|
||||||
<h1><a name="iterator-adaptor-private-member-functions"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> private member functions</a></h1>
|
|
||||||
<p><tt class="docutils literal"><span class="pre">typename</span> <span class="pre">iterator_adaptor::reference</span> <span class="pre">dereference()</span> <span class="pre">const;</span></tt></p>
|
|
||||||
<table class="docutils field-list" frame="void" rules="none">
|
|
||||||
<col class="field-name" />
|
|
||||||
<col class="field-body" />
|
|
||||||
<tbody valign="top">
|
|
||||||
<tr class="field"><th class="field-name">Returns:</th><td class="field-body"><tt class="docutils literal"><span class="pre">*m_iterator</span></tt></td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<pre class="literal-block">
|
|
||||||
template <
|
|
||||||
class OtherDerived, class OtherIterator, class V, class C, class R, class D
|
|
||||||
>
|
|
||||||
bool equal(iterator_adaptor<OtherDerived, OtherIterator, V, C, R, D> const& x) const;
|
|
||||||
</pre>
|
|
||||||
<table class="docutils field-list" frame="void" rules="none">
|
|
||||||
<col class="field-name" />
|
|
||||||
<col class="field-body" />
|
|
||||||
<tbody valign="top">
|
|
||||||
<tr class="field"><th class="field-name">Returns:</th><td class="field-body"><tt class="docutils literal"><span class="pre">m_iterator</span> <span class="pre">==</span> <span class="pre">x.base()</span></tt></td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<p><tt class="docutils literal"><span class="pre">void</span> <span class="pre">advance(typename</span> <span class="pre">iterator_adaptor::difference_type</span> <span class="pre">n);</span></tt></p>
|
|
||||||
<table class="docutils field-list" frame="void" rules="none">
|
|
||||||
<col class="field-name" />
|
|
||||||
<col class="field-body" />
|
|
||||||
<tbody valign="top">
|
|
||||||
<tr class="field"><th class="field-name">Effects:</th><td class="field-body"><tt class="docutils literal"><span class="pre">m_iterator</span> <span class="pre">+=</span> <span class="pre">n;</span></tt></td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<p><tt class="docutils literal"><span class="pre">void</span> <span class="pre">increment();</span></tt></p>
|
|
||||||
<table class="docutils field-list" frame="void" rules="none">
|
|
||||||
<col class="field-name" />
|
|
||||||
<col class="field-body" />
|
|
||||||
<tbody valign="top">
|
|
||||||
<tr class="field"><th class="field-name">Effects:</th><td class="field-body"><tt class="docutils literal"><span class="pre">++m_iterator;</span></tt></td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<p><tt class="docutils literal"><span class="pre">void</span> <span class="pre">decrement();</span></tt></p>
|
|
||||||
<table class="docutils field-list" frame="void" rules="none">
|
|
||||||
<col class="field-name" />
|
|
||||||
<col class="field-body" />
|
|
||||||
<tbody valign="top">
|
|
||||||
<tr class="field"><th class="field-name">Effects:</th><td class="field-body"><tt class="docutils literal"><span class="pre">--m_iterator;</span></tt></td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<pre class="literal-block">
|
|
||||||
template <
|
|
||||||
class OtherDerived, class OtherIterator, class V, class C, class R, class D
|
|
||||||
>
|
|
||||||
typename iterator_adaptor::difference_type distance_to(
|
|
||||||
iterator_adaptor<OtherDerived, OtherIterator, V, C, R, D> const& y) const;
|
|
||||||
</pre>
|
|
||||||
<table class="docutils field-list" frame="void" rules="none">
|
|
||||||
<col class="field-name" />
|
|
||||||
<col class="field-body" />
|
|
||||||
<tbody valign="top">
|
|
||||||
<tr class="field"><th class="field-name">Returns:</th><td class="field-body"><tt class="docutils literal"><span class="pre">y.base()</span> <span class="pre">-</span> <span class="pre">m_iterator</span></tt></td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<hr class="docutils footer" />
|
|
||||||
<div class="footer">
|
|
||||||
<a class="reference" href="iterator_adaptor_ref.rst">View document source</a>.
|
|
||||||
Generated by <a class="reference" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@ -1,3 +1,7 @@
|
|||||||
|
.. Distributed under the Boost
|
||||||
|
.. Software License, Version 1.0. (See accompanying
|
||||||
|
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
.. Version 1.4 of this ReStructuredText document corresponds to
|
.. Version 1.4 of this ReStructuredText document corresponds to
|
||||||
n1530_, the paper accepted by the LWG for TR1.
|
n1530_, the paper accepted by the LWG for TR1.
|
||||||
|
|
||||||
|
0
doc/iterator_adaptor_tutorial.rst
Executable file → Normal file
0
doc/iterator_adaptor_tutorial.rst
Executable file → Normal file
52
doc/iterator_archetypes.html
Executable file → Normal file
52
doc/iterator_archetypes.html
Executable file → Normal file
@ -3,13 +3,13 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="generator" content="Docutils 0.3.8: http://docutils.sourceforge.net/" />
|
<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
|
||||||
<title>Iterator Archetype</title>
|
<title>Iterator Archetype</title>
|
||||||
<meta name="author" content="David Abrahams, Jeremy Siek, Thomas Witt" />
|
<meta name="author" content="David Abrahams, Jeremy Siek, Thomas Witt" />
|
||||||
<meta name="organization" content="Boost Consulting, Indiana University Open Systems Lab, Zephyr Associates, Inc." />
|
<meta name="organization" content="Boost Consulting, Indiana University Open Systems Lab, Zephyr Associates, Inc." />
|
||||||
<meta name="date" content="2004-11-01" />
|
<meta name="date" content="2006-09-11" />
|
||||||
<meta name="copyright" content="Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2004." />
|
<meta name="copyright" content="Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2004." />
|
||||||
<link rel="stylesheet" href="default.css" type="text/css" />
|
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="document" id="iterator-archetype">
|
<div class="document" id="iterator-archetype">
|
||||||
@ -21,16 +21,19 @@
|
|||||||
<tr><th class="docinfo-name">Author:</th>
|
<tr><th class="docinfo-name">Author:</th>
|
||||||
<td>David Abrahams, Jeremy Siek, Thomas Witt</td></tr>
|
<td>David Abrahams, Jeremy Siek, Thomas Witt</td></tr>
|
||||||
<tr><th class="docinfo-name">Contact:</th>
|
<tr><th class="docinfo-name">Contact:</th>
|
||||||
<td><a class="first reference" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a>, <a class="reference" href="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</a>, <a class="last reference" href="mailto:witt@styleadvisor.com">witt@styleadvisor.com</a></td></tr>
|
<td><a class="first reference external" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a>, <a class="reference external" href="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</a>, <a class="last reference external" href="mailto:witt@styleadvisor.com">witt@styleadvisor.com</a></td></tr>
|
||||||
<tr><th class="docinfo-name">Organization:</th>
|
<tr><th class="docinfo-name">Organization:</th>
|
||||||
<td><a class="first reference" href="http://www.boost-consulting.com">Boost Consulting</a>, Indiana University <a class="reference" href="http://www.osl.iu.edu">Open Systems
|
<td><a class="first reference external" href="http://www.boost-consulting.com">Boost Consulting</a>, Indiana University <a class="reference external" href="http://www.osl.iu.edu">Open Systems
|
||||||
Lab</a>, <a class="last reference" href="http://www.styleadvisor.com">Zephyr Associates, Inc.</a></td></tr>
|
Lab</a>, <a class="last reference external" href="http://www.styleadvisor.com">Zephyr Associates, Inc.</a></td></tr>
|
||||||
<tr><th class="docinfo-name">Date:</th>
|
<tr><th class="docinfo-name">Date:</th>
|
||||||
<td>2004-11-01</td></tr>
|
<td>2006-09-11</td></tr>
|
||||||
<tr><th class="docinfo-name">Copyright:</th>
|
<tr><th class="docinfo-name">Copyright:</th>
|
||||||
<td>Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2004.</td></tr>
|
<td>Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2004.</td></tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
<!-- Distributed under the Boost -->
|
||||||
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
<table class="docutils field-list" frame="void" rules="none">
|
<table class="docutils field-list" frame="void" rules="none">
|
||||||
<col class="field-name" />
|
<col class="field-name" />
|
||||||
<col class="field-body" />
|
<col class="field-body" />
|
||||||
@ -39,27 +42,27 @@ Lab</a>, <a class="last reference" href="http://www.styleadvisor.com">Zephyr Ass
|
|||||||
one of the iterator access concepts and one of the iterator traversal concepts.
|
one of the iterator access concepts and one of the iterator traversal concepts.
|
||||||
This is used for doing a compile-time check to see if a the type requirements
|
This is used for doing a compile-time check to see if a the type requirements
|
||||||
of a template are really enough to cover the implementation of the template.
|
of a template are really enough to cover the implementation of the template.
|
||||||
For further information see the documentation for the <a class="reference" href="../../concept_check/index.html"><tt class="docutils literal"><span class="pre">boost::concept_check</span></tt></a> library.</td>
|
For further information see the documentation for the <a class="reference external" href="../../concept_check/index.html"><tt class="docutils literal"><span class="pre">boost::concept_check</span></tt></a> library.</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<div class="contents topic" id="table-of-contents">
|
<div class="contents topic" id="table-of-contents">
|
||||||
<p class="topic-title first"><a name="table-of-contents">Table of Contents</a></p>
|
<p class="topic-title first">Table of Contents</p>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li><a class="reference" href="#reference" id="id1" name="id1">Reference</a><ul>
|
<li><a class="reference internal" href="#reference" id="id1">Reference</a><ul>
|
||||||
<li><a class="reference" href="#iterator-archetype-synopsis" id="id2" name="id2"><tt class="docutils literal"><span class="pre">iterator_archetype</span></tt> Synopsis</a></li>
|
<li><a class="reference internal" href="#iterator-archetype-synopsis" id="id2"><tt class="docutils literal"><span class="pre">iterator_archetype</span></tt> Synopsis</a></li>
|
||||||
<li><a class="reference" href="#access-category-tags" id="id3" name="id3"><tt class="docutils literal"><span class="pre">Access</span> <span class="pre">Category</span> <span class="pre">Tags</span></tt></a></li>
|
<li><a class="reference internal" href="#access-category-tags" id="id3"><tt class="docutils literal"><span class="pre">Access</span> <span class="pre">Category</span> <span class="pre">Tags</span></tt></a></li>
|
||||||
<li><a class="reference" href="#iterator-archetype-requirements" id="id4" name="id4"><tt class="docutils literal"><span class="pre">iterator_archetype</span></tt> Requirements</a></li>
|
<li><a class="reference internal" href="#iterator-archetype-requirements" id="id4"><tt class="docutils literal"><span class="pre">iterator_archetype</span></tt> Requirements</a></li>
|
||||||
<li><a class="reference" href="#iterator-archetype-models" id="id5" name="id5"><tt class="docutils literal"><span class="pre">iterator_archetype</span></tt> Models</a></li>
|
<li><a class="reference internal" href="#iterator-archetype-models" id="id5"><tt class="docutils literal"><span class="pre">iterator_archetype</span></tt> Models</a></li>
|
||||||
<li><a class="reference" href="#traits" id="id6" name="id6"><tt class="docutils literal"><span class="pre">Traits</span></tt></a></li>
|
<li><a class="reference internal" href="#traits" id="id6"><tt class="docutils literal"><span class="pre">Traits</span></tt></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="reference">
|
<div class="section" id="reference">
|
||||||
<h1><a class="toc-backref" href="#id1" name="reference">Reference</a></h1>
|
<h1><a class="toc-backref" href="#id1">Reference</a></h1>
|
||||||
<div class="section" id="iterator-archetype-synopsis">
|
<div class="section" id="iterator-archetype-synopsis">
|
||||||
<h2><a class="toc-backref" href="#id2" name="iterator-archetype-synopsis"><tt class="docutils literal"><span class="pre">iterator_archetype</span></tt> Synopsis</a></h2>
|
<h2><a class="toc-backref" href="#id2"><tt class="docutils literal"><span class="pre">iterator_archetype</span></tt> Synopsis</a></h2>
|
||||||
<pre class="literal-block">
|
<pre class="literal-block">
|
||||||
namespace iterator_archetypes
|
namespace iterator_archetypes
|
||||||
{
|
{
|
||||||
@ -89,7 +92,7 @@ class iterator_archetype
|
|||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="access-category-tags">
|
<div class="section" id="access-category-tags">
|
||||||
<h2><a class="toc-backref" href="#id3" name="access-category-tags"><tt class="docutils literal"><span class="pre">Access</span> <span class="pre">Category</span> <span class="pre">Tags</span></tt></a></h2>
|
<h2><a class="toc-backref" href="#id3"><tt class="docutils literal"><span class="pre">Access</span> <span class="pre">Category</span> <span class="pre">Tags</span></tt></a></h2>
|
||||||
<p>The access category types provided correspond to the following
|
<p>The access category types provided correspond to the following
|
||||||
standard iterator access concept combinations:</p>
|
standard iterator access concept combinations:</p>
|
||||||
<pre class="literal-block">
|
<pre class="literal-block">
|
||||||
@ -115,7 +118,7 @@ writeable_lvalue_iterator_t :=
|
|||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="iterator-archetype-requirements">
|
<div class="section" id="iterator-archetype-requirements">
|
||||||
<h2><a class="toc-backref" href="#id4" name="iterator-archetype-requirements"><tt class="docutils literal"><span class="pre">iterator_archetype</span></tt> Requirements</a></h2>
|
<h2><a class="toc-backref" href="#id4"><tt class="docutils literal"><span class="pre">iterator_archetype</span></tt> Requirements</a></h2>
|
||||||
<p>The <tt class="docutils literal"><span class="pre">AccessCategory</span></tt> argument must be one of the predefined access
|
<p>The <tt class="docutils literal"><span class="pre">AccessCategory</span></tt> argument must be one of the predefined access
|
||||||
category tags. The <tt class="docutils literal"><span class="pre">TraversalCategory</span></tt> must be one of the standard
|
category tags. The <tt class="docutils literal"><span class="pre">TraversalCategory</span></tt> must be one of the standard
|
||||||
traversal tags. The <tt class="docutils literal"><span class="pre">Value</span></tt> type must satisfy the requirements of
|
traversal tags. The <tt class="docutils literal"><span class="pre">Value</span></tt> type must satisfy the requirements of
|
||||||
@ -123,14 +126,14 @@ the iterator concept specified by <tt class="docutils literal"><span class="pre"
|
|||||||
<tt class="docutils literal"><span class="pre">TraversalCategory</span></tt> as implied by the nested traits types.</p>
|
<tt class="docutils literal"><span class="pre">TraversalCategory</span></tt> as implied by the nested traits types.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="iterator-archetype-models">
|
<div class="section" id="iterator-archetype-models">
|
||||||
<h2><a class="toc-backref" href="#id5" name="iterator-archetype-models"><tt class="docutils literal"><span class="pre">iterator_archetype</span></tt> Models</a></h2>
|
<h2><a class="toc-backref" href="#id5"><tt class="docutils literal"><span class="pre">iterator_archetype</span></tt> Models</a></h2>
|
||||||
<p><tt class="docutils literal"><span class="pre">iterator_archetype</span></tt> models the iterator concepts specified by the
|
<p><tt class="docutils literal"><span class="pre">iterator_archetype</span></tt> models the iterator concepts specified by the
|
||||||
<tt class="docutils literal"><span class="pre">AccessCategory</span></tt> and <tt class="docutils literal"><span class="pre">TraversalCategory</span></tt>
|
<tt class="docutils literal"><span class="pre">AccessCategory</span></tt> and <tt class="docutils literal"><span class="pre">TraversalCategory</span></tt>
|
||||||
arguments. <tt class="docutils literal"><span class="pre">iterator_archetype</span></tt> does not model any other access
|
arguments. <tt class="docutils literal"><span class="pre">iterator_archetype</span></tt> does not model any other access
|
||||||
concepts or any more derived traversal concepts.</p>
|
concepts or any more derived traversal concepts.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="traits">
|
<div class="section" id="traits">
|
||||||
<h2><a class="toc-backref" href="#id6" name="traits"><tt class="docutils literal"><span class="pre">Traits</span></tt></a></h2>
|
<h2><a class="toc-backref" href="#id6"><tt class="docutils literal"><span class="pre">Traits</span></tt></a></h2>
|
||||||
<p>The nested trait types are defined as follows:</p>
|
<p>The nested trait types are defined as follows:</p>
|
||||||
<pre class="literal-block">
|
<pre class="literal-block">
|
||||||
if (AccessCategory == readable_iterator_t)
|
if (AccessCategory == readable_iterator_t)
|
||||||
@ -211,10 +214,11 @@ iterator_category :=
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<hr class="docutils footer" />
|
|
||||||
<div class="footer">
|
<div class="footer">
|
||||||
<a class="reference" href="iterator_archetypes.rst">View document source</a>.
|
<hr class="footer" />
|
||||||
Generated by <a class="reference" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
<a class="reference external" href="iterator_archetypes.rst">View document source</a>.
|
||||||
|
Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
0
doc/iterator_archetypes.pdf
Executable file → Normal file
0
doc/iterator_archetypes.pdf
Executable file → Normal file
4
doc/iterator_archetypes.rst
Executable file → Normal file
4
doc/iterator_archetypes.rst
Executable file → Normal file
@ -1,3 +1,7 @@
|
|||||||
|
.. Distributed under the Boost
|
||||||
|
.. Software License, Version 1.0. (See accompanying
|
||||||
|
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
++++++++++++++++++++
|
++++++++++++++++++++
|
||||||
Iterator Archetype
|
Iterator Archetype
|
||||||
++++++++++++++++++++
|
++++++++++++++++++++
|
||||||
|
@ -3,13 +3,13 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="generator" content="Docutils 0.3.8: http://docutils.sourceforge.net/" />
|
<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
|
||||||
<title>Iterator Concepts</title>
|
<title>Iterator Concepts</title>
|
||||||
<meta name="author" content="David Abrahams, Jeremy Siek, Thomas Witt" />
|
<meta name="author" content="David Abrahams, Jeremy Siek, Thomas Witt" />
|
||||||
<meta name="organization" content="Boost Consulting, Indiana University Open Systems Lab, Zephyr Associates, Inc." />
|
<meta name="organization" content="Boost Consulting, Indiana University Open Systems Lab, Zephyr Associates, Inc." />
|
||||||
<meta name="date" content="2004-11-01" />
|
<meta name="date" content="2006-09-11" />
|
||||||
<meta name="copyright" content="Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2004." />
|
<meta name="copyright" content="Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2004." />
|
||||||
<link rel="stylesheet" href="default.css" type="text/css" />
|
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="document" id="iterator-concepts">
|
<div class="document" id="iterator-concepts">
|
||||||
@ -21,16 +21,19 @@
|
|||||||
<tr><th class="docinfo-name">Author:</th>
|
<tr><th class="docinfo-name">Author:</th>
|
||||||
<td>David Abrahams, Jeremy Siek, Thomas Witt</td></tr>
|
<td>David Abrahams, Jeremy Siek, Thomas Witt</td></tr>
|
||||||
<tr><th class="docinfo-name">Contact:</th>
|
<tr><th class="docinfo-name">Contact:</th>
|
||||||
<td><a class="first reference" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a>, <a class="reference" href="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</a>, <a class="last reference" href="mailto:witt@styleadvisor.com">witt@styleadvisor.com</a></td></tr>
|
<td><a class="first reference external" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a>, <a class="reference external" href="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</a>, <a class="last reference external" href="mailto:witt@styleadvisor.com">witt@styleadvisor.com</a></td></tr>
|
||||||
<tr><th class="docinfo-name">Organization:</th>
|
<tr><th class="docinfo-name">Organization:</th>
|
||||||
<td><a class="first reference" href="http://www.boost-consulting.com">Boost Consulting</a>, Indiana University <a class="reference" href="http://www.osl.iu.edu">Open Systems
|
<td><a class="first reference external" href="http://www.boost-consulting.com">Boost Consulting</a>, Indiana University <a class="reference external" href="http://www.osl.iu.edu">Open Systems
|
||||||
Lab</a>, <a class="last reference" href="http://www.styleadvisor.com">Zephyr Associates, Inc.</a></td></tr>
|
Lab</a>, <a class="last reference external" href="http://www.styleadvisor.com">Zephyr Associates, Inc.</a></td></tr>
|
||||||
<tr><th class="docinfo-name">Date:</th>
|
<tr><th class="docinfo-name">Date:</th>
|
||||||
<td>2004-11-01</td></tr>
|
<td>2006-09-11</td></tr>
|
||||||
<tr><th class="docinfo-name">Copyright:</th>
|
<tr><th class="docinfo-name">Copyright:</th>
|
||||||
<td>Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2004.</td></tr>
|
<td>Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2004.</td></tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
<!-- Distributed under the Boost -->
|
||||||
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
<table class="docutils field-list" frame="void" rules="none">
|
<table class="docutils field-list" frame="void" rules="none">
|
||||||
<col class="field-name" />
|
<col class="field-name" />
|
||||||
<col class="field-body" />
|
<col class="field-body" />
|
||||||
@ -43,30 +46,30 @@ the template.</td>
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<p>For an introduction to using concept checking classes, see
|
<p>For an introduction to using concept checking classes, see
|
||||||
the documentation for the <a class="reference" href="../../concept_check/index.html"><tt class="docutils literal"><span class="pre">boost::concept_check</span></tt></a> library.</p>
|
the documentation for the <a class="reference external" href="../../concept_check/index.html"><tt class="docutils literal"><span class="pre">boost::concept_check</span></tt></a> library.</p>
|
||||||
<div class="section" id="reference">
|
<div class="section" id="reference">
|
||||||
<h1><a name="reference">Reference</a></h1>
|
<h1>Reference</h1>
|
||||||
<div class="section" id="iterator-access-concepts">
|
<div class="section" id="iterator-access-concepts">
|
||||||
<h2><a name="iterator-access-concepts">Iterator Access Concepts</a></h2>
|
<h2>Iterator Access Concepts</h2>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li><a class="reference" href="ReadableIterator.html"><em>Readable Iterator</em></a></li>
|
<li><a class="reference external" href="ReadableIterator.html"><em>Readable Iterator</em></a></li>
|
||||||
<li><a class="reference" href="WritableIterator.html"><em>Writable Iterator</em></a></li>
|
<li><a class="reference external" href="WritableIterator.html"><em>Writable Iterator</em></a></li>
|
||||||
<li><a class="reference" href="SwappableIterator.html"><em>Swappable Iterator</em></a></li>
|
<li><a class="reference external" href="SwappableIterator.html"><em>Swappable Iterator</em></a></li>
|
||||||
<li><a class="reference" href="LvalueIterator.html"><em>Lvalue Iterator</em></a></li>
|
<li><a class="reference external" href="LvalueIterator.html"><em>Lvalue Iterator</em></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="iterator-traversal-concepts">
|
<div class="section" id="iterator-traversal-concepts">
|
||||||
<h2><a name="iterator-traversal-concepts">Iterator Traversal Concepts</a></h2>
|
<h2>Iterator Traversal Concepts</h2>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li><a class="reference" href="IncrementableIterator.html"><em>Incrementable Iterator</em></a></li>
|
<li><a class="reference external" href="IncrementableIterator.html"><em>Incrementable Iterator</em></a></li>
|
||||||
<li><a class="reference" href="SinglePassIterator.html"><em>Single Pass Iterator</em></a></li>
|
<li><a class="reference external" href="SinglePassIterator.html"><em>Single Pass Iterator</em></a></li>
|
||||||
<li><a class="reference" href="ForwardTraversal.html"><em>Forward Traversal</em></a></li>
|
<li><a class="reference external" href="ForwardTraversal.html"><em>Forward Traversal</em></a></li>
|
||||||
<li><a class="reference" href="BidirectionalTraversal.html"><em>Bidirectional Traversal</em></a></li>
|
<li><a class="reference external" href="BidirectionalTraversal.html"><em>Bidirectional Traversal</em></a></li>
|
||||||
<li><a class="reference" href="RandomAccessTraversal.html"><em>Random Access Traversal</em></a></li>
|
<li><a class="reference external" href="RandomAccessTraversal.html"><em>Random Access Traversal</em></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="iterator-concepts-hpp-synopsis">
|
<div class="section" id="iterator-concepts-hpp-synopsis">
|
||||||
<h2><a name="iterator-concepts-hpp-synopsis"><tt class="docutils literal"><span class="pre">iterator_concepts.hpp</span></tt> Synopsis</a></h2>
|
<h2><tt class="docutils literal"><span class="pre">iterator_concepts.hpp</span></tt> Synopsis</h2>
|
||||||
<pre class="literal-block">
|
<pre class="literal-block">
|
||||||
namespace boost_concepts {
|
namespace boost_concepts {
|
||||||
|
|
||||||
@ -114,10 +117,11 @@ namespace boost_concepts {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<hr class="docutils footer" />
|
|
||||||
<div class="footer">
|
<div class="footer">
|
||||||
<a class="reference" href="iterator_concepts.rst">View document source</a>.
|
<hr class="footer" />
|
||||||
Generated by <a class="reference" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
<a class="reference external" href="iterator_concepts.rst">View document source</a>.
|
||||||
|
Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
0
doc/iterator_concepts.pdf
Executable file → Normal file
0
doc/iterator_concepts.pdf
Executable file → Normal file
4
doc/iterator_concepts.rst
Executable file → Normal file
4
doc/iterator_concepts.rst
Executable file → Normal file
@ -1,4 +1,6 @@
|
|||||||
|
.. Distributed under the Boost
|
||||||
|
.. Software License, Version 1.0. (See accompanying
|
||||||
|
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
++++++++++++++++++
|
++++++++++++++++++
|
||||||
Iterator Concepts
|
Iterator Concepts
|
||||||
|
@ -3,13 +3,13 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="generator" content="Docutils 0.3.8: http://docutils.sourceforge.net/" />
|
<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
|
||||||
<title>Iterator Facade</title>
|
<title>Iterator Facade</title>
|
||||||
<meta name="author" content="David Abrahams, Jeremy Siek, Thomas Witt" />
|
<meta name="author" content="David Abrahams, Jeremy Siek, Thomas Witt" />
|
||||||
<meta name="organization" content="Boost Consulting, Indiana University Open Systems Lab, University of Hanover Institute for Transport Railway Operation and Construction" />
|
<meta name="organization" content="Boost Consulting, Indiana University Open Systems Lab, University of Hanover Institute for Transport Railway Operation and Construction" />
|
||||||
<meta name="date" content="2004-11-01" />
|
<meta name="date" content="2006-09-11" />
|
||||||
<meta name="copyright" content="Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003." />
|
<meta name="copyright" content="Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003." />
|
||||||
<link rel="stylesheet" href="default.css" type="text/css" />
|
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="document" id="iterator-facade">
|
<div class="document" id="iterator-facade">
|
||||||
@ -21,67 +21,76 @@
|
|||||||
<tr><th class="docinfo-name">Author:</th>
|
<tr><th class="docinfo-name">Author:</th>
|
||||||
<td>David Abrahams, Jeremy Siek, Thomas Witt</td></tr>
|
<td>David Abrahams, Jeremy Siek, Thomas Witt</td></tr>
|
||||||
<tr><th class="docinfo-name">Contact:</th>
|
<tr><th class="docinfo-name">Contact:</th>
|
||||||
<td><a class="first reference" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a>, <a class="reference" href="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</a>, <a class="last reference" href="mailto:witt@ive.uni-hannover.de">witt@ive.uni-hannover.de</a></td></tr>
|
<td><a class="first reference external" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a>, <a class="reference external" href="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</a>, <a class="last reference external" href="mailto:witt@ive.uni-hannover.de">witt@ive.uni-hannover.de</a></td></tr>
|
||||||
<tr><th class="docinfo-name">Organization:</th>
|
<tr><th class="docinfo-name">Organization:</th>
|
||||||
<td><a class="first reference" href="http://www.boost-consulting.com">Boost Consulting</a>, Indiana University <a class="reference" href="http://www.osl.iu.edu">Open Systems
|
<td><a class="first reference external" href="http://www.boost-consulting.com">Boost Consulting</a>, Indiana University <a class="reference external" href="http://www.osl.iu.edu">Open Systems
|
||||||
Lab</a>, University of Hanover <a class="last reference" href="http://www.ive.uni-hannover.de">Institute for Transport
|
Lab</a>, University of Hanover <a class="last reference external" href="http://www.ive.uni-hannover.de">Institute for Transport
|
||||||
Railway Operation and Construction</a></td></tr>
|
Railway Operation and Construction</a></td></tr>
|
||||||
<tr><th class="docinfo-name">Date:</th>
|
<tr><th class="docinfo-name">Date:</th>
|
||||||
<td>2004-11-01</td></tr>
|
<td>2006-09-11</td></tr>
|
||||||
<tr><th class="docinfo-name">Copyright:</th>
|
<tr><th class="docinfo-name">Copyright:</th>
|
||||||
<td>Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003.</td></tr>
|
<td>Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003.</td></tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
<!-- Distributed under the Boost -->
|
||||||
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
<table class="docutils field-list" frame="void" rules="none">
|
<table class="docutils field-list" frame="void" rules="none">
|
||||||
<col class="field-name" />
|
<col class="field-name" />
|
||||||
<col class="field-body" />
|
<col class="field-body" />
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<tr class="field"><th class="field-name">abstract:</th><td class="field-body"><tt class="docutils literal"><span class="pre">iterator_facade</span></tt> is a base class template that implements the
|
<tr class="field"><th class="field-name">abstract:</th><td class="field-body"><!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
||||||
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
|
<tt class="docutils literal"><span class="pre">iterator_facade</span></tt> is a base class template that implements the
|
||||||
interface of standard iterators in terms of a few core functions
|
interface of standard iterators in terms of a few core functions
|
||||||
and associated types, to be supplied by a derived iterator class.</td>
|
and associated types, to be supplied by a derived iterator class.</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<div class="contents topic" id="table-of-contents">
|
<div class="contents topic" id="table-of-contents">
|
||||||
<p class="topic-title first"><a name="table-of-contents">Table of Contents</a></p>
|
<p class="topic-title first">Table of Contents</p>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li><a class="reference" href="#overview" id="id23" name="id23">Overview</a><ul>
|
<li><a class="reference internal" href="#overview" id="id23">Overview</a><ul>
|
||||||
<li><a class="reference" href="#usage" id="id24" name="id24">Usage</a></li>
|
<li><a class="reference internal" href="#usage" id="id24">Usage</a></li>
|
||||||
<li><a class="reference" href="#iterator-core-access" id="id25" name="id25">Iterator Core Access</a></li>
|
<li><a class="reference internal" href="#iterator-core-access" id="id25">Iterator Core Access</a></li>
|
||||||
<li><a class="reference" href="#operator" id="id26" name="id26"><tt class="docutils literal"><span class="pre">operator[]</span></tt></a></li>
|
<li><a class="reference internal" href="#operator" id="id26"><tt class="docutils literal"><span class="pre">operator[]</span></tt></a></li>
|
||||||
<li><a class="reference" href="#id2" id="id27" name="id27"><tt class="docutils literal"><span class="pre">operator-></span></tt></a></li>
|
<li><a class="reference internal" href="#id2" id="id27"><tt class="docutils literal"><span class="pre">operator-></span></tt></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a class="reference" href="#reference" id="id28" name="id28">Reference</a><ul>
|
<li><a class="reference internal" href="#reference" id="id28">Reference</a><ul>
|
||||||
<li><a class="reference" href="#iterator-facade-requirements" id="id29" name="id29"><tt class="docutils literal"><span class="pre">iterator_facade</span></tt> Requirements</a></li>
|
<li><a class="reference internal" href="#iterator-facade-requirements" id="id29"><tt class="docutils literal"><span class="pre">iterator_facade</span></tt> Requirements</a></li>
|
||||||
<li><a class="reference" href="#iterator-facade-operations" id="id30" name="id30"><tt class="docutils literal"><span class="pre">iterator_facade</span></tt> operations</a></li>
|
<li><a class="reference internal" href="#iterator-facade-operations" id="id30"><tt class="docutils literal"><span class="pre">iterator_facade</span></tt> operations</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a class="reference" href="#tutorial-example" id="id31" name="id31">Tutorial Example</a><ul>
|
<li><a class="reference internal" href="#tutorial-example" id="id31">Tutorial Example</a><ul>
|
||||||
<li><a class="reference" href="#the-problem" id="id32" name="id32">The Problem</a></li>
|
<li><a class="reference internal" href="#the-problem" id="id32">The Problem</a></li>
|
||||||
<li><a class="reference" href="#a-basic-iterator-using-iterator-facade" id="id33" name="id33">A Basic Iterator Using <tt class="docutils literal"><span class="pre">iterator_facade</span></tt></a><ul>
|
<li><a class="reference internal" href="#a-basic-iterator-using-iterator-facade" id="id33">A Basic Iterator Using <tt class="docutils literal"><span class="pre">iterator_facade</span></tt></a><ul>
|
||||||
<li><a class="reference" href="#template-arguments-for-iterator-facade" id="id34" name="id34">Template Arguments for <tt class="docutils literal"><span class="pre">iterator_facade</span></tt></a><ul>
|
<li><a class="reference internal" href="#template-arguments-for-iterator-facade" id="id34">Template Arguments for <tt class="docutils literal"><span class="pre">iterator_facade</span></tt></a><ul>
|
||||||
<li><a class="reference" href="#derived" id="id35" name="id35"><tt class="docutils literal"><span class="pre">Derived</span></tt></a></li>
|
<li><a class="reference internal" href="#derived" id="id35"><tt class="docutils literal"><span class="pre">Derived</span></tt></a></li>
|
||||||
<li><a class="reference" href="#value" id="id36" name="id36"><tt class="docutils literal"><span class="pre">Value</span></tt></a></li>
|
<li><a class="reference internal" href="#value" id="id36"><tt class="docutils literal"><span class="pre">Value</span></tt></a></li>
|
||||||
<li><a class="reference" href="#categoryortraversal" id="id37" name="id37"><tt class="docutils literal"><span class="pre">CategoryOrTraversal</span></tt></a></li>
|
<li><a class="reference internal" href="#categoryortraversal" id="id37"><tt class="docutils literal"><span class="pre">CategoryOrTraversal</span></tt></a></li>
|
||||||
<li><a class="reference" href="#id12" id="id38" name="id38"><tt class="docutils literal"><span class="pre">Reference</span></tt></a></li>
|
<li><a class="reference internal" href="#id12" id="id38"><tt class="docutils literal"><span class="pre">Reference</span></tt></a></li>
|
||||||
<li><a class="reference" href="#difference" id="id39" name="id39"><tt class="docutils literal"><span class="pre">Difference</span></tt></a></li>
|
<li><a class="reference internal" href="#difference" id="id39"><tt class="docutils literal"><span class="pre">Difference</span></tt></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a class="reference" href="#constructors-and-data-members" id="id40" name="id40">Constructors and Data Members</a></li>
|
<li><a class="reference internal" href="#constructors-and-data-members" id="id40">Constructors and Data Members</a></li>
|
||||||
<li><a class="reference" href="#implementing-the-core-operations" id="id41" name="id41">Implementing the Core Operations</a></li>
|
<li><a class="reference internal" href="#implementing-the-core-operations" id="id41">Implementing the Core Operations</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a class="reference" href="#a-constant-node-iterator" id="id42" name="id42">A constant <tt class="docutils literal"><span class="pre">node_iterator</span></tt></a></li>
|
<li><a class="reference internal" href="#a-constant-node-iterator" id="id42">A constant <tt class="docutils literal"><span class="pre">node_iterator</span></tt></a></li>
|
||||||
<li><a class="reference" href="#interoperability" id="id43" name="id43">Interoperability</a></li>
|
<li><a class="reference internal" href="#interoperability" id="id43">Interoperability</a></li>
|
||||||
<li><a class="reference" href="#telling-the-truth" id="id44" name="id44">Telling the Truth</a></li>
|
<li><a class="reference internal" href="#telling-the-truth" id="id44">Telling the Truth</a></li>
|
||||||
<li><a class="reference" href="#wrap-up" id="id45" name="id45">Wrap Up</a></li>
|
<li><a class="reference internal" href="#wrap-up" id="id45">Wrap Up</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="overview">
|
<div class="section" id="overview">
|
||||||
<h1><a class="toc-backref" href="#id23" name="overview">Overview</a></h1>
|
<h1><a class="toc-backref" href="#id23">Overview</a></h1>
|
||||||
|
<!-- Distributed under the Boost -->
|
||||||
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
<!-- Version 1.1 of this ReStructuredText document corresponds to
|
<!-- Version 1.1 of this ReStructuredText document corresponds to
|
||||||
n1530_, the paper accepted by the LWG for TR1. -->
|
n1530_, the paper accepted by the LWG for TR1. -->
|
||||||
<!-- Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. -->
|
<!-- Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. -->
|
||||||
@ -101,7 +110,7 @@ include the associated types exposed through iterator traits:
|
|||||||
<tt class="docutils literal"><span class="pre">value_type</span></tt>, <tt class="docutils literal"><span class="pre">reference</span></tt>, <tt class="docutils literal"><span class="pre">difference_type</span></tt>, and
|
<tt class="docutils literal"><span class="pre">value_type</span></tt>, <tt class="docutils literal"><span class="pre">reference</span></tt>, <tt class="docutils literal"><span class="pre">difference_type</span></tt>, and
|
||||||
<tt class="docutils literal"><span class="pre">iterator_category</span></tt>.</p>
|
<tt class="docutils literal"><span class="pre">iterator_category</span></tt>.</p>
|
||||||
<p>Iterator facade uses the Curiously Recurring Template
|
<p>Iterator facade uses the Curiously Recurring Template
|
||||||
Pattern (CRTP) <a class="citation-reference" href="#cop95" id="id1" name="id1">[Cop95]</a> so that the user can specify the behavior
|
Pattern (CRTP) <a class="citation-reference" href="#cop95" id="id1">[Cop95]</a> so that the user can specify the behavior
|
||||||
of <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> in a derived class. Former designs used
|
of <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> in a derived class. Former designs used
|
||||||
policy objects to specify the behavior, but that approach was
|
policy objects to specify the behavior, but that approach was
|
||||||
discarded for several reasons:</p>
|
discarded for several reasons:</p>
|
||||||
@ -125,7 +134,7 @@ impossible.</li>
|
|||||||
</ol>
|
</ol>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<div class="section" id="usage">
|
<div class="section" id="usage">
|
||||||
<h2><a class="toc-backref" href="#id24" name="usage">Usage</a></h2>
|
<h2><a class="toc-backref" href="#id24">Usage</a></h2>
|
||||||
<p>The user of <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> derives his iterator class from a
|
<p>The user of <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> derives his iterator class from a
|
||||||
specialization of <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> and passes the derived
|
specialization of <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> and passes the derived
|
||||||
iterator class as <tt class="docutils literal"><span class="pre">iterator_facade</span></tt>'s first template parameter.
|
iterator class as <tt class="docutils literal"><span class="pre">iterator_facade</span></tt>'s first template parameter.
|
||||||
@ -148,8 +157,8 @@ requirements.</p>
|
|||||||
<col width="56%" />
|
<col width="56%" />
|
||||||
</colgroup>
|
</colgroup>
|
||||||
<thead valign="bottom">
|
<thead valign="bottom">
|
||||||
<tr><th>Expression</th>
|
<tr><th class="head">Expression</th>
|
||||||
<th>Effects</th>
|
<th class="head">Effects</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
@ -189,7 +198,7 @@ Iterator or a more-refined iterator concept, a default constructor is
|
|||||||
required.</p>
|
required.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="iterator-core-access">
|
<div class="section" id="iterator-core-access">
|
||||||
<h2><a class="toc-backref" href="#id25" name="iterator-core-access">Iterator Core Access</a></h2>
|
<h2><a class="toc-backref" href="#id25">Iterator Core Access</a></h2>
|
||||||
<p><tt class="docutils literal"><span class="pre">iterator_facade</span></tt> and the operator implementations need to be able
|
<p><tt class="docutils literal"><span class="pre">iterator_facade</span></tt> and the operator implementations need to be able
|
||||||
to access the core member functions in the derived class. Making the
|
to access the core member functions in the derived class. Making the
|
||||||
core member functions public would expose an implementation detail to
|
core member functions public would expose an implementation detail to
|
||||||
@ -223,18 +232,18 @@ open a safety loophole, as every core member function preserves the
|
|||||||
invariants of the iterator.</p>
|
invariants of the iterator.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="operator">
|
<div class="section" id="operator">
|
||||||
<h2><a class="toc-backref" href="#id26" name="operator"><tt class="docutils literal"><span class="pre">operator[]</span></tt></a></h2>
|
<h2><a class="toc-backref" href="#id26"><tt class="docutils literal"><span class="pre">operator[]</span></tt></a></h2>
|
||||||
<p>The indexing operator for a generalized iterator presents special
|
<p>The indexing operator for a generalized iterator presents special
|
||||||
challenges. A random access iterator's <tt class="docutils literal"><span class="pre">operator[]</span></tt> is only
|
challenges. A random access iterator's <tt class="docutils literal"><span class="pre">operator[]</span></tt> is only
|
||||||
required to return something convertible to its <tt class="docutils literal"><span class="pre">value_type</span></tt>.
|
required to return something convertible to its <tt class="docutils literal"><span class="pre">value_type</span></tt>.
|
||||||
Requiring that it return an lvalue would rule out currently-legal
|
Requiring that it return an lvalue would rule out currently-legal
|
||||||
random-access iterators which hold the referenced value in a data
|
random-access iterators which hold the referenced value in a data
|
||||||
member (e.g. <a class="reference" href="counting_iterator.html"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt></a>), because <tt class="docutils literal"><span class="pre">*(p+n)</span></tt> is a reference
|
member (e.g. <a class="reference external" href="counting_iterator.html"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt></a>), because <tt class="docutils literal"><span class="pre">*(p+n)</span></tt> is a reference
|
||||||
into the temporary iterator <tt class="docutils literal"><span class="pre">p+n</span></tt>, which is destroyed when
|
into the temporary iterator <tt class="docutils literal"><span class="pre">p+n</span></tt>, which is destroyed when
|
||||||
<tt class="docutils literal"><span class="pre">operator[]</span></tt> returns.</p>
|
<tt class="docutils literal"><span class="pre">operator[]</span></tt> returns.</p>
|
||||||
<p>Writable iterators built with <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> implement the
|
<p>Writable iterators built with <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> implement the
|
||||||
semantics required by the preferred resolution to <a class="reference" href="http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/lwg-active.html#299">issue 299</a> and
|
semantics required by the preferred resolution to <a class="reference external" href="http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/lwg-active.html#299">issue 299</a> and
|
||||||
adopted by proposal <a class="reference" href="http://anubis.dkuug.dk/JTC1/SC22/WG21/docs/papers/2003/n1550.html">n1550</a>: the result of <tt class="docutils literal"><span class="pre">p[n]</span></tt> is an object
|
adopted by proposal <a class="reference external" href="http://anubis.dkuug.dk/JTC1/SC22/WG21/docs/papers/2003/n1550.html">n1550</a>: the result of <tt class="docutils literal"><span class="pre">p[n]</span></tt> is an object
|
||||||
convertible to the iterator's <tt class="docutils literal"><span class="pre">value_type</span></tt>, and <tt class="docutils literal"><span class="pre">p[n]</span> <span class="pre">=</span> <span class="pre">x</span></tt> is
|
convertible to the iterator's <tt class="docutils literal"><span class="pre">value_type</span></tt>, and <tt class="docutils literal"><span class="pre">p[n]</span> <span class="pre">=</span> <span class="pre">x</span></tt> is
|
||||||
equivalent to <tt class="docutils literal"><span class="pre">*(p</span> <span class="pre">+</span> <span class="pre">n)</span> <span class="pre">=</span> <span class="pre">x</span></tt> (Note: This result object may be
|
equivalent to <tt class="docutils literal"><span class="pre">*(p</span> <span class="pre">+</span> <span class="pre">n)</span> <span class="pre">=</span> <span class="pre">x</span></tt> (Note: This result object may be
|
||||||
implemented as a proxy containing a copy of <tt class="docutils literal"><span class="pre">p+n</span></tt>). This approach
|
implemented as a proxy containing a copy of <tt class="docutils literal"><span class="pre">p+n</span></tt>). This approach
|
||||||
@ -246,7 +255,7 @@ class; it will hide the one supplied by <tt class="docutils literal"><span class
|
|||||||
clients of her iterator.</p>
|
clients of her iterator.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="id2">
|
<div class="section" id="id2">
|
||||||
<h2><a class="toc-backref" href="#id27" name="id2"><span class="target" id="operator-arrow"></span><tt class="docutils literal"><span class="pre">operator-></span></tt></a></h2>
|
<span id="operator-arrow"></span><h2><a class="toc-backref" href="#id27"><tt class="docutils literal"><span class="pre">operator-></span></tt></a></h2>
|
||||||
<p>The <tt class="docutils literal"><span class="pre">reference</span></tt> type of a readable iterator (and today's input
|
<p>The <tt class="docutils literal"><span class="pre">reference</span></tt> type of a readable iterator (and today's input
|
||||||
iterator) need not in fact be a reference, so long as it is
|
iterator) need not in fact be a reference, so long as it is
|
||||||
convertible to the iterator's <tt class="docutils literal"><span class="pre">value_type</span></tt>. When the <tt class="docutils literal"><span class="pre">value_type</span></tt>
|
convertible to the iterator's <tt class="docutils literal"><span class="pre">value_type</span></tt>. When the <tt class="docutils literal"><span class="pre">value_type</span></tt>
|
||||||
@ -261,14 +270,17 @@ satisfied by the <tt class="docutils literal"><span class="pre">iterator_facade<
|
|||||||
<table class="docutils citation" frame="void" id="cop95" rules="none">
|
<table class="docutils citation" frame="void" id="cop95" rules="none">
|
||||||
<colgroup><col class="label" /><col /></colgroup>
|
<colgroup><col class="label" /><col /></colgroup>
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<tr><td class="label"><a name="cop95">[Cop95]</a></td><td><em>(<a class="fn-backref" href="#id1">1</a>, <a class="fn-backref" href="#id10">2</a>)</em> [Coplien, 1995] Coplien, J., Curiously Recurring Template
|
<tr><td class="label">[Cop95]</td><td><em>(<a class="fn-backref" href="#id1">1</a>, <a class="fn-backref" href="#id10">2</a>)</em> [Coplien, 1995] Coplien, J., Curiously Recurring Template
|
||||||
Patterns, C++ Report, February 1995, pp. 24-27.</td></tr>
|
Patterns, C++ Report, February 1995, pp. 24-27.</td></tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="reference">
|
<div class="section" id="reference">
|
||||||
<h1><a class="toc-backref" href="#id28" name="reference">Reference</a></h1>
|
<h1><a class="toc-backref" href="#id28">Reference</a></h1>
|
||||||
|
<!-- Distributed under the Boost -->
|
||||||
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
<!-- Version 1.3 of this ReStructuredText document corresponds to
|
<!-- Version 1.3 of this ReStructuredText document corresponds to
|
||||||
n1530_, the paper accepted by the LWG for TR1. -->
|
n1530_, the paper accepted by the LWG for TR1. -->
|
||||||
<!-- Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. -->
|
<!-- Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. -->
|
||||||
@ -286,11 +298,11 @@ class iterator_facade {
|
|||||||
typedef Reference reference;
|
typedef Reference reference;
|
||||||
typedef Value* pointer;
|
typedef Value* pointer;
|
||||||
typedef Difference difference_type;
|
typedef Difference difference_type;
|
||||||
typedef /* see <a class="reference" href="#iterator-category">below</a> */ iterator_category;
|
typedef /* see <a class="reference internal" href="#iterator-category">below</a> */ iterator_category;
|
||||||
|
|
||||||
reference operator*() const;
|
reference operator*() const;
|
||||||
/* see <a class="reference" href="#operator-arrow">below</a> */ operator->() const;
|
/* see <a class="reference internal" href="#operator-arrow">below</a> */ operator->() const;
|
||||||
/* see <a class="reference" href="#brackets">below</a> */ operator[](difference_type n) const;
|
/* see <a class="reference internal" href="#brackets">below</a> */ operator[](difference_type n) const;
|
||||||
Derived& operator++();
|
Derived& operator++();
|
||||||
Derived operator++(int);
|
Derived operator++(int);
|
||||||
Derived& operator--();
|
Derived& operator--();
|
||||||
@ -342,7 +354,7 @@ operator >=(iterator_facade<Dr1,V1,TC1,R1,D1> const& lhs,
|
|||||||
// Iterator difference
|
// Iterator difference
|
||||||
template <class Dr1, class V1, class TC1, class R1, class D1,
|
template <class Dr1, class V1, class TC1, class R1, class D1,
|
||||||
class Dr2, class V2, class TC2, class R2, class D2>
|
class Dr2, class V2, class TC2, class R2, class D2>
|
||||||
/* see <a class="reference" href="#minus">below</a> */
|
/* see <a class="reference internal" href="#minus">below</a> */
|
||||||
operator-(iterator_facade<Dr1,V1,TC1,R1,D1> const& lhs,
|
operator-(iterator_facade<Dr1,V1,TC1,R1,D1> const& lhs,
|
||||||
iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
|
iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
|
||||||
|
|
||||||
@ -355,12 +367,12 @@ template <class Dr, class V, class TC, class R, class D>
|
|||||||
Derived operator+ (typename Derived::difference_type n,
|
Derived operator+ (typename Derived::difference_type n,
|
||||||
iterator_facade<Dr,V,TC,R,D> const&);
|
iterator_facade<Dr,V,TC,R,D> const&);
|
||||||
</pre>
|
</pre>
|
||||||
<span class="target" id="iterator-category"></span><p>The <tt class="docutils literal"><span class="pre">iterator_category</span></tt> member of <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> is</p>
|
<p id="iterator-category">The <tt class="docutils literal"><span class="pre">iterator_category</span></tt> member of <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> is</p>
|
||||||
<pre class="literal-block">
|
<pre class="literal-block">
|
||||||
<em>iterator-category</em>(CategoryOrTraversal, value_type, reference)
|
<em>iterator-category</em>(CategoryOrTraversal, value_type, reference)
|
||||||
</pre>
|
</pre>
|
||||||
<p>where <em>iterator-category</em> is defined as follows:</p>
|
<p>where <em>iterator-category</em> is defined as follows:</p>
|
||||||
<span class="target" id="id7"></span><pre class="literal-block">
|
<pre class="literal-block" id="id7">
|
||||||
<em>iterator-category</em>(C,R,V) :=
|
<em>iterator-category</em>(C,R,V) :=
|
||||||
if (C is convertible to std::input_iterator_tag
|
if (C is convertible to std::input_iterator_tag
|
||||||
|| C is convertible to std::output_iterator_tag
|
|| C is convertible to std::output_iterator_tag
|
||||||
@ -394,7 +406,7 @@ Derived operator+ (typename Derived::difference_type n,
|
|||||||
X1 = C
|
X1 = C
|
||||||
}
|
}
|
||||||
|
|
||||||
2. <a class="reference" href="new-iter-concepts.html#category-to-traversal"><em>category-to-traversal</em></a>(X) is convertible to the most
|
2. <a class="reference external" href="new-iter-concepts.html#category-to-traversal"><em>category-to-traversal</em></a>(X) is convertible to the most
|
||||||
derived traversal tag type to which X is also
|
derived traversal tag type to which X is also
|
||||||
convertible, and not to any more-derived traversal tag
|
convertible, and not to any more-derived traversal tag
|
||||||
type.
|
type.
|
||||||
@ -429,7 +441,7 @@ struct enable_if_interoperable
|
|||||||
{};
|
{};
|
||||||
</pre>
|
</pre>
|
||||||
<div class="section" id="iterator-facade-requirements">
|
<div class="section" id="iterator-facade-requirements">
|
||||||
<h2><a class="toc-backref" href="#id29" name="iterator-facade-requirements"><tt class="docutils literal"><span class="pre">iterator_facade</span></tt> Requirements</a></h2>
|
<h2><a class="toc-backref" href="#id29"><tt class="docutils literal"><span class="pre">iterator_facade</span></tt> Requirements</a></h2>
|
||||||
<p>The following table describes the typical valid expressions on
|
<p>The following table describes the typical valid expressions on
|
||||||
<tt class="docutils literal"><span class="pre">iterator_facade</span></tt>'s <tt class="docutils literal"><span class="pre">Derived</span></tt> parameter, depending on the
|
<tt class="docutils literal"><span class="pre">iterator_facade</span></tt>'s <tt class="docutils literal"><span class="pre">Derived</span></tt> parameter, depending on the
|
||||||
iterator concept(s) it will model. The operations in the first
|
iterator concept(s) it will model. The operations in the first
|
||||||
@ -442,7 +454,7 @@ object of type <tt class="docutils literal"><span class="pre">X</span></tt>, <tt
|
|||||||
object of a single pass iterator type interoperable with <tt class="docutils literal"><span class="pre">X</span></tt>, and <tt class="docutils literal"><span class="pre">z</span></tt>
|
object of a single pass iterator type interoperable with <tt class="docutils literal"><span class="pre">X</span></tt>, and <tt class="docutils literal"><span class="pre">z</span></tt>
|
||||||
is a constant object of a random access traversal iterator type
|
is a constant object of a random access traversal iterator type
|
||||||
interoperable with <tt class="docutils literal"><span class="pre">X</span></tt>.</p>
|
interoperable with <tt class="docutils literal"><span class="pre">X</span></tt>.</p>
|
||||||
<span class="target" id="core-operations"></span><div class="topic">
|
<div class="topic" id="core-operations">
|
||||||
<p class="topic-title first"><tt class="docutils literal"><span class="pre">iterator_facade</span></tt> Core Operations</p>
|
<p class="topic-title first"><tt class="docutils literal"><span class="pre">iterator_facade</span></tt> Core Operations</p>
|
||||||
<table border="1" class="docutils">
|
<table border="1" class="docutils">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
@ -452,10 +464,10 @@ interoperable with <tt class="docutils literal"><span class="pre">X</span></tt>.
|
|||||||
<col width="29%" />
|
<col width="29%" />
|
||||||
</colgroup>
|
</colgroup>
|
||||||
<thead valign="bottom">
|
<thead valign="bottom">
|
||||||
<tr><th>Expression</th>
|
<tr><th class="head">Expression</th>
|
||||||
<th>Return Type</th>
|
<th class="head">Return Type</th>
|
||||||
<th>Assertion/Note</th>
|
<th class="head">Assertion/Note</th>
|
||||||
<th>Used to implement Iterator
|
<th class="head">Used to implement Iterator
|
||||||
Concept(s)</th>
|
Concept(s)</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
@ -503,7 +515,7 @@ Iterator</td>
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="iterator-facade-operations">
|
<div class="section" id="iterator-facade-operations">
|
||||||
<h2><a class="toc-backref" href="#id30" name="iterator-facade-operations"><tt class="docutils literal"><span class="pre">iterator_facade</span></tt> operations</a></h2>
|
<h2><a class="toc-backref" href="#id30"><tt class="docutils literal"><span class="pre">iterator_facade</span></tt> operations</a></h2>
|
||||||
<p>The operations in this section are described in terms of operations on
|
<p>The operations in this section are described in terms of operations on
|
||||||
the core interface of <tt class="docutils literal"><span class="pre">Derived</span></tt> which may be inaccessible
|
the core interface of <tt class="docutils literal"><span class="pre">Derived</span></tt> which may be inaccessible
|
||||||
(i.e. private). The implementation should access these operations
|
(i.e. private). The implementation should access these operations
|
||||||
@ -517,7 +529,7 @@ through member functions of class <tt class="docutils literal"><span class="pre"
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<p><tt class="docutils literal"><span class="pre">operator->()</span> <span class="pre">const;</span></tt> (see <a class="reference" href="#operator-arrow">below</a>)</p>
|
<p><tt class="docutils literal"><span class="pre">operator->()</span> <span class="pre">const;</span></tt> (see <a class="reference internal" href="#operator-arrow">below</a>)</p>
|
||||||
<table class="docutils field-list" frame="void" rules="none">
|
<table class="docutils field-list" frame="void" rules="none">
|
||||||
<col class="field-name" />
|
<col class="field-name" />
|
||||||
<col class="field-body" />
|
<col class="field-body" />
|
||||||
@ -534,7 +546,7 @@ of type <tt class="docutils literal"><span class="pre">pointer</span></tt> equal
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<span class="target" id="brackets"></span><p><em>unspecified</em> <tt class="docutils literal"><span class="pre">operator[](difference_type</span> <span class="pre">n)</span> <span class="pre">const;</span></tt></p>
|
<p id="brackets"><em>unspecified</em> <tt class="docutils literal"><span class="pre">operator[](difference_type</span> <span class="pre">n)</span> <span class="pre">const;</span></tt></p>
|
||||||
<table class="docutils field-list" frame="void" rules="none">
|
<table class="docutils field-list" frame="void" rules="none">
|
||||||
<col class="field-name" />
|
<col class="field-name" />
|
||||||
<col class="field-body" />
|
<col class="field-body" />
|
||||||
@ -676,9 +688,11 @@ operator ==(iterator_facade<Dr1,V1,TC1,R1,D1> const& lhs,
|
|||||||
<tr class="field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">if <tt class="docutils literal"><span class="pre">is_convertible<Dr2,Dr1>::value</span></tt></p>
|
<tr class="field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">if <tt class="docutils literal"><span class="pre">is_convertible<Dr2,Dr1>::value</span></tt></p>
|
||||||
<dl class="last docutils">
|
<dl class="last docutils">
|
||||||
<dt>then</dt>
|
<dt>then</dt>
|
||||||
<dd><tt class="docutils literal"><span class="pre">((Dr1</span> <span class="pre">const&)lhs).equal((Dr2</span> <span class="pre">const&)rhs)</span></tt>.</dd>
|
<dd><p class="first last"><tt class="docutils literal"><span class="pre">((Dr1</span> <span class="pre">const&)lhs).equal((Dr2</span> <span class="pre">const&)rhs)</span></tt>.</p>
|
||||||
|
</dd>
|
||||||
<dt>Otherwise,</dt>
|
<dt>Otherwise,</dt>
|
||||||
<dd><tt class="docutils literal"><span class="pre">((Dr2</span> <span class="pre">const&)rhs).equal((Dr1</span> <span class="pre">const&)lhs)</span></tt>.</dd>
|
<dd><p class="first last"><tt class="docutils literal"><span class="pre">((Dr2</span> <span class="pre">const&)rhs).equal((Dr1</span> <span class="pre">const&)lhs)</span></tt>.</p>
|
||||||
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -698,9 +712,11 @@ operator !=(iterator_facade<Dr1,V1,TC1,R1,D1> const& lhs,
|
|||||||
<tr class="field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">if <tt class="docutils literal"><span class="pre">is_convertible<Dr2,Dr1>::value</span></tt></p>
|
<tr class="field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">if <tt class="docutils literal"><span class="pre">is_convertible<Dr2,Dr1>::value</span></tt></p>
|
||||||
<dl class="last docutils">
|
<dl class="last docutils">
|
||||||
<dt>then</dt>
|
<dt>then</dt>
|
||||||
<dd><tt class="docutils literal"><span class="pre">!((Dr1</span> <span class="pre">const&)lhs).equal((Dr2</span> <span class="pre">const&)rhs)</span></tt>.</dd>
|
<dd><p class="first last"><tt class="docutils literal"><span class="pre">!((Dr1</span> <span class="pre">const&)lhs).equal((Dr2</span> <span class="pre">const&)rhs)</span></tt>.</p>
|
||||||
|
</dd>
|
||||||
<dt>Otherwise,</dt>
|
<dt>Otherwise,</dt>
|
||||||
<dd><tt class="docutils literal"><span class="pre">!((Dr2</span> <span class="pre">const&)rhs).equal((Dr1</span> <span class="pre">const&)lhs)</span></tt>.</dd>
|
<dd><p class="first last"><tt class="docutils literal"><span class="pre">!((Dr2</span> <span class="pre">const&)rhs).equal((Dr1</span> <span class="pre">const&)lhs)</span></tt>.</p>
|
||||||
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -720,9 +736,11 @@ operator <(iterator_facade<Dr1,V1,TC1,R1,D1> const& lhs,
|
|||||||
<tr class="field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">if <tt class="docutils literal"><span class="pre">is_convertible<Dr2,Dr1>::value</span></tt></p>
|
<tr class="field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">if <tt class="docutils literal"><span class="pre">is_convertible<Dr2,Dr1>::value</span></tt></p>
|
||||||
<dl class="last docutils">
|
<dl class="last docutils">
|
||||||
<dt>then</dt>
|
<dt>then</dt>
|
||||||
<dd><tt class="docutils literal"><span class="pre">((Dr1</span> <span class="pre">const&)lhs).distance_to((Dr2</span> <span class="pre">const&)rhs)</span> <span class="pre"><</span> <span class="pre">0</span></tt>.</dd>
|
<dd><p class="first last"><tt class="docutils literal"><span class="pre">((Dr1</span> <span class="pre">const&)lhs).distance_to((Dr2</span> <span class="pre">const&)rhs)</span> <span class="pre"><</span> <span class="pre">0</span></tt>.</p>
|
||||||
|
</dd>
|
||||||
<dt>Otherwise,</dt>
|
<dt>Otherwise,</dt>
|
||||||
<dd><tt class="docutils literal"><span class="pre">((Dr2</span> <span class="pre">const&)rhs).distance_to((Dr1</span> <span class="pre">const&)lhs)</span> <span class="pre">></span> <span class="pre">0</span></tt>.</dd>
|
<dd><p class="first last"><tt class="docutils literal"><span class="pre">((Dr2</span> <span class="pre">const&)rhs).distance_to((Dr1</span> <span class="pre">const&)lhs)</span> <span class="pre">></span> <span class="pre">0</span></tt>.</p>
|
||||||
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -742,9 +760,11 @@ operator <=(iterator_facade<Dr1,V1,TC1,R1,D1> const& lhs,
|
|||||||
<tr class="field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">if <tt class="docutils literal"><span class="pre">is_convertible<Dr2,Dr1>::value</span></tt></p>
|
<tr class="field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">if <tt class="docutils literal"><span class="pre">is_convertible<Dr2,Dr1>::value</span></tt></p>
|
||||||
<dl class="last docutils">
|
<dl class="last docutils">
|
||||||
<dt>then</dt>
|
<dt>then</dt>
|
||||||
<dd><tt class="docutils literal"><span class="pre">((Dr1</span> <span class="pre">const&)lhs).distance_to((Dr2</span> <span class="pre">const&)rhs)</span> <span class="pre"><=</span> <span class="pre">0</span></tt>.</dd>
|
<dd><p class="first last"><tt class="docutils literal"><span class="pre">((Dr1</span> <span class="pre">const&)lhs).distance_to((Dr2</span> <span class="pre">const&)rhs)</span> <span class="pre"><=</span> <span class="pre">0</span></tt>.</p>
|
||||||
|
</dd>
|
||||||
<dt>Otherwise,</dt>
|
<dt>Otherwise,</dt>
|
||||||
<dd><tt class="docutils literal"><span class="pre">((Dr2</span> <span class="pre">const&)rhs).distance_to((Dr1</span> <span class="pre">const&)lhs)</span> <span class="pre">>=</span> <span class="pre">0</span></tt>.</dd>
|
<dd><p class="first last"><tt class="docutils literal"><span class="pre">((Dr2</span> <span class="pre">const&)rhs).distance_to((Dr1</span> <span class="pre">const&)lhs)</span> <span class="pre">>=</span> <span class="pre">0</span></tt>.</p>
|
||||||
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -764,9 +784,11 @@ operator >(iterator_facade<Dr1,V1,TC1,R1,D1> const& lhs,
|
|||||||
<tr class="field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">if <tt class="docutils literal"><span class="pre">is_convertible<Dr2,Dr1>::value</span></tt></p>
|
<tr class="field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">if <tt class="docutils literal"><span class="pre">is_convertible<Dr2,Dr1>::value</span></tt></p>
|
||||||
<dl class="last docutils">
|
<dl class="last docutils">
|
||||||
<dt>then</dt>
|
<dt>then</dt>
|
||||||
<dd><tt class="docutils literal"><span class="pre">((Dr1</span> <span class="pre">const&)lhs).distance_to((Dr2</span> <span class="pre">const&)rhs)</span> <span class="pre">></span> <span class="pre">0</span></tt>.</dd>
|
<dd><p class="first last"><tt class="docutils literal"><span class="pre">((Dr1</span> <span class="pre">const&)lhs).distance_to((Dr2</span> <span class="pre">const&)rhs)</span> <span class="pre">></span> <span class="pre">0</span></tt>.</p>
|
||||||
|
</dd>
|
||||||
<dt>Otherwise,</dt>
|
<dt>Otherwise,</dt>
|
||||||
<dd><tt class="docutils literal"><span class="pre">((Dr2</span> <span class="pre">const&)rhs).distance_to((Dr1</span> <span class="pre">const&)lhs)</span> <span class="pre"><</span> <span class="pre">0</span></tt>.</dd>
|
<dd><p class="first last"><tt class="docutils literal"><span class="pre">((Dr2</span> <span class="pre">const&)rhs).distance_to((Dr1</span> <span class="pre">const&)lhs)</span> <span class="pre"><</span> <span class="pre">0</span></tt>.</p>
|
||||||
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -786,15 +808,17 @@ operator >=(iterator_facade<Dr1,V1,TC1,R1,D1> const& lhs,
|
|||||||
<tr class="field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">if <tt class="docutils literal"><span class="pre">is_convertible<Dr2,Dr1>::value</span></tt></p>
|
<tr class="field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">if <tt class="docutils literal"><span class="pre">is_convertible<Dr2,Dr1>::value</span></tt></p>
|
||||||
<dl class="last docutils">
|
<dl class="last docutils">
|
||||||
<dt>then</dt>
|
<dt>then</dt>
|
||||||
<dd><tt class="docutils literal"><span class="pre">((Dr1</span> <span class="pre">const&)lhs).distance_to((Dr2</span> <span class="pre">const&)rhs)</span> <span class="pre">>=</span> <span class="pre">0</span></tt>.</dd>
|
<dd><p class="first last"><tt class="docutils literal"><span class="pre">((Dr1</span> <span class="pre">const&)lhs).distance_to((Dr2</span> <span class="pre">const&)rhs)</span> <span class="pre">>=</span> <span class="pre">0</span></tt>.</p>
|
||||||
|
</dd>
|
||||||
<dt>Otherwise,</dt>
|
<dt>Otherwise,</dt>
|
||||||
<dd><tt class="docutils literal"><span class="pre">((Dr2</span> <span class="pre">const&)rhs).distance_to((Dr1</span> <span class="pre">const&)lhs)</span> <span class="pre"><=</span> <span class="pre">0</span></tt>.</dd>
|
<dd><p class="first last"><tt class="docutils literal"><span class="pre">((Dr2</span> <span class="pre">const&)rhs).distance_to((Dr1</span> <span class="pre">const&)lhs)</span> <span class="pre"><=</span> <span class="pre">0</span></tt>.</p>
|
||||||
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<span class="target" id="minus"></span><pre class="literal-block">
|
<pre class="literal-block" id="minus">
|
||||||
template <class Dr1, class V1, class TC1, class R1, class D1,
|
template <class Dr1, class V1, class TC1, class R1, class D1,
|
||||||
class Dr2, class V2, class TC2, class R2, class D2>
|
class Dr2, class V2, class TC2, class R2, class D2>
|
||||||
typename enable_if_interoperable<Dr1,Dr2,difference>::type
|
typename enable_if_interoperable<Dr1,Dr2,difference>::type
|
||||||
@ -806,13 +830,15 @@ operator -(iterator_facade<Dr1,V1,TC1,R1,D1> const& lhs,
|
|||||||
<col class="field-body" />
|
<col class="field-body" />
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<tr class="field"><th class="field-name">Return Type:</th><td class="field-body"><p class="first">if <tt class="docutils literal"><span class="pre">is_convertible<Dr2,Dr1>::value</span></tt></p>
|
<tr class="field"><th class="field-name">Return Type:</th><td class="field-body"><p class="first">if <tt class="docutils literal"><span class="pre">is_convertible<Dr2,Dr1>::value</span></tt></p>
|
||||||
<blockquote class="last">
|
<blockquote>
|
||||||
<dl class="docutils">
|
<dl class="docutils">
|
||||||
<dt>then</dt>
|
<dt>then</dt>
|
||||||
<dd><tt class="docutils literal"><span class="pre">difference</span></tt> shall be
|
<dd><p class="first last"><tt class="docutils literal"><span class="pre">difference</span></tt> shall be
|
||||||
<tt class="docutils literal"><span class="pre">iterator_traits<Dr1>::difference_type</span></tt>.</dd>
|
<tt class="docutils literal"><span class="pre">iterator_traits<Dr1>::difference_type</span></tt>.</p>
|
||||||
|
</dd>
|
||||||
<dt>Otherwise</dt>
|
<dt>Otherwise</dt>
|
||||||
<dd><tt class="docutils literal"><span class="pre">difference</span></tt> shall be <tt class="docutils literal"><span class="pre">iterator_traits<Dr2>::difference_type</span></tt></dd>
|
<dd><p class="first last"><tt class="docutils literal"><span class="pre">difference</span></tt> shall be <tt class="docutils literal"><span class="pre">iterator_traits<Dr2>::difference_type</span></tt></p>
|
||||||
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
</td>
|
</td>
|
||||||
@ -820,9 +846,11 @@ operator -(iterator_facade<Dr1,V1,TC1,R1,D1> const& lhs,
|
|||||||
<tr class="field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">if <tt class="docutils literal"><span class="pre">is_convertible<Dr2,Dr1>::value</span></tt></p>
|
<tr class="field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">if <tt class="docutils literal"><span class="pre">is_convertible<Dr2,Dr1>::value</span></tt></p>
|
||||||
<dl class="last docutils">
|
<dl class="last docutils">
|
||||||
<dt>then</dt>
|
<dt>then</dt>
|
||||||
<dd><tt class="docutils literal"><span class="pre">-((Dr1</span> <span class="pre">const&)lhs).distance_to((Dr2</span> <span class="pre">const&)rhs)</span></tt>.</dd>
|
<dd><p class="first last"><tt class="docutils literal"><span class="pre">-((Dr1</span> <span class="pre">const&)lhs).distance_to((Dr2</span> <span class="pre">const&)rhs)</span></tt>.</p>
|
||||||
|
</dd>
|
||||||
<dt>Otherwise,</dt>
|
<dt>Otherwise,</dt>
|
||||||
<dd><tt class="docutils literal"><span class="pre">((Dr2</span> <span class="pre">const&)rhs).distance_to((Dr1</span> <span class="pre">const&)lhs)</span></tt>.</dd>
|
<dd><p class="first last"><tt class="docutils literal"><span class="pre">((Dr2</span> <span class="pre">const&)rhs).distance_to((Dr1</span> <span class="pre">const&)lhs)</span></tt>.</p>
|
||||||
|
</dd>
|
||||||
</dl>
|
</dl>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -831,17 +859,17 @@ operator -(iterator_facade<Dr1,V1,TC1,R1,D1> const& lhs,
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="tutorial-example">
|
<div class="section" id="tutorial-example">
|
||||||
<h1><a class="toc-backref" href="#id31" name="tutorial-example">Tutorial Example</a></h1>
|
<h1><a class="toc-backref" href="#id31">Tutorial Example</a></h1>
|
||||||
<!-- Copyright David Abrahams 2004. Use, modification and distribution is -->
|
<!-- Copyright David Abrahams 2004. Use, modification and distribution is -->
|
||||||
<!-- subject to the Boost Software License, Version 1.0. (See accompanying -->
|
<!-- subject to the Boost Software License, Version 1.0. (See accompanying -->
|
||||||
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
<p>In this section we'll walk through the implementation of a few
|
<p>In this section we'll walk through the implementation of a few
|
||||||
iterators using <tt class="docutils literal"><span class="pre">iterator_facade</span></tt>, based around the simple
|
iterators using <tt class="docutils literal"><span class="pre">iterator_facade</span></tt>, based around the simple
|
||||||
example of a linked list of polymorphic objects. This example was
|
example of a linked list of polymorphic objects. This example was
|
||||||
inspired by a <a class="reference" href="http://thread.gmane.org/gmane.comp.lib.boost.user/5100">posting</a> by Keith Macdonald on the <a class="reference" href="../../../more/mailing_lists.htm#users">Boost-Users</a>
|
inspired by a <a class="reference external" href="http://thread.gmane.org/gmane.comp.lib.boost.user/5100">posting</a> by Keith Macdonald on the <a class="reference external" href="http://www.boost.org/more/mailing_lists.htm#users">Boost-Users</a>
|
||||||
mailing list.</p>
|
mailing list.</p>
|
||||||
<div class="section" id="the-problem">
|
<div class="section" id="the-problem">
|
||||||
<h2><a class="toc-backref" href="#id32" name="the-problem">The Problem</a></h2>
|
<h2><a class="toc-backref" href="#id32">The Problem</a></h2>
|
||||||
<p>Say we've written a polymorphic linked list node base class:</p>
|
<p>Say we've written a polymorphic linked list node base class:</p>
|
||||||
<pre class="literal-block">
|
<pre class="literal-block">
|
||||||
# include <iostream>
|
# include <iostream>
|
||||||
@ -903,7 +931,7 @@ inline std::ostream& operator<<(std::ostream& s, node_base const&a
|
|||||||
lists.</p>
|
lists.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="a-basic-iterator-using-iterator-facade">
|
<div class="section" id="a-basic-iterator-using-iterator-facade">
|
||||||
<h2><a class="toc-backref" href="#id33" name="a-basic-iterator-using-iterator-facade">A Basic Iterator Using <tt class="docutils literal"><span class="pre">iterator_facade</span></tt></a></h2>
|
<h2><a class="toc-backref" href="#id33">A Basic Iterator Using <tt class="docutils literal"><span class="pre">iterator_facade</span></tt></a></h2>
|
||||||
<p>We will construct a <tt class="docutils literal"><span class="pre">node_iterator</span></tt> class using inheritance from
|
<p>We will construct a <tt class="docutils literal"><span class="pre">node_iterator</span></tt> class using inheritance from
|
||||||
<tt class="docutils literal"><span class="pre">iterator_facade</span></tt> to implement most of the iterator's operations.</p>
|
<tt class="docutils literal"><span class="pre">iterator_facade</span></tt> to implement most of the iterator's operations.</p>
|
||||||
<pre class="literal-block">
|
<pre class="literal-block">
|
||||||
@ -917,36 +945,36 @@ class node_iterator
|
|||||||
};
|
};
|
||||||
</pre>
|
</pre>
|
||||||
<div class="section" id="template-arguments-for-iterator-facade">
|
<div class="section" id="template-arguments-for-iterator-facade">
|
||||||
<h3><a class="toc-backref" href="#id34" name="template-arguments-for-iterator-facade">Template Arguments for <tt class="docutils literal"><span class="pre">iterator_facade</span></tt></a></h3>
|
<h3><a class="toc-backref" href="#id34">Template Arguments for <tt class="docutils literal"><span class="pre">iterator_facade</span></tt></a></h3>
|
||||||
<p><tt class="docutils literal"><span class="pre">iterator_facade</span></tt> has several template parameters, so we must decide
|
<p><tt class="docutils literal"><span class="pre">iterator_facade</span></tt> has several template parameters, so we must decide
|
||||||
what types to use for the arguments. The parameters are <tt class="docutils literal"><span class="pre">Derived</span></tt>,
|
what types to use for the arguments. The parameters are <tt class="docutils literal"><span class="pre">Derived</span></tt>,
|
||||||
<tt class="docutils literal"><span class="pre">Value</span></tt>, <tt class="docutils literal"><span class="pre">CategoryOrTraversal</span></tt>, <tt class="docutils literal"><span class="pre">Reference</span></tt>, and <tt class="docutils literal"><span class="pre">Difference</span></tt>.</p>
|
<tt class="docutils literal"><span class="pre">Value</span></tt>, <tt class="docutils literal"><span class="pre">CategoryOrTraversal</span></tt>, <tt class="docutils literal"><span class="pre">Reference</span></tt>, and <tt class="docutils literal"><span class="pre">Difference</span></tt>.</p>
|
||||||
<div class="section" id="derived">
|
<div class="section" id="derived">
|
||||||
<h4><a class="toc-backref" href="#id35" name="derived"><tt class="docutils literal"><span class="pre">Derived</span></tt></a></h4>
|
<h4><a class="toc-backref" href="#id35"><tt class="docutils literal"><span class="pre">Derived</span></tt></a></h4>
|
||||||
<p>Because <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> is meant to be used with the CRTP
|
<p>Because <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> is meant to be used with the CRTP
|
||||||
<a class="citation-reference" href="#cop95" id="id10" name="id10">[Cop95]</a> the first parameter is the iterator class name itself,
|
<a class="citation-reference" href="#cop95" id="id10">[Cop95]</a> the first parameter is the iterator class name itself,
|
||||||
<tt class="docutils literal"><span class="pre">node_iterator</span></tt>.</p>
|
<tt class="docutils literal"><span class="pre">node_iterator</span></tt>.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="value">
|
<div class="section" id="value">
|
||||||
<h4><a class="toc-backref" href="#id36" name="value"><tt class="docutils literal"><span class="pre">Value</span></tt></a></h4>
|
<h4><a class="toc-backref" href="#id36"><tt class="docutils literal"><span class="pre">Value</span></tt></a></h4>
|
||||||
<p>The <tt class="docutils literal"><span class="pre">Value</span></tt> parameter determines the <tt class="docutils literal"><span class="pre">node_iterator</span></tt>'s
|
<p>The <tt class="docutils literal"><span class="pre">Value</span></tt> parameter determines the <tt class="docutils literal"><span class="pre">node_iterator</span></tt>'s
|
||||||
<tt class="docutils literal"><span class="pre">value_type</span></tt>. In this case, we are iterating over <tt class="docutils literal"><span class="pre">node_base</span></tt>
|
<tt class="docutils literal"><span class="pre">value_type</span></tt>. In this case, we are iterating over <tt class="docutils literal"><span class="pre">node_base</span></tt>
|
||||||
objects, so <tt class="docutils literal"><span class="pre">Value</span></tt> will be <tt class="docutils literal"><span class="pre">node_base</span></tt>.</p>
|
objects, so <tt class="docutils literal"><span class="pre">Value</span></tt> will be <tt class="docutils literal"><span class="pre">node_base</span></tt>.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="categoryortraversal">
|
<div class="section" id="categoryortraversal">
|
||||||
<h4><a class="toc-backref" href="#id37" name="categoryortraversal"><tt class="docutils literal"><span class="pre">CategoryOrTraversal</span></tt></a></h4>
|
<h4><a class="toc-backref" href="#id37"><tt class="docutils literal"><span class="pre">CategoryOrTraversal</span></tt></a></h4>
|
||||||
<p>Now we have to determine which <a class="reference" href="new-iter-concepts.html#iterator-traversal-concepts-lib-iterator-traversal">iterator traversal concept</a> our
|
<p>Now we have to determine which <a class="reference external" href="new-iter-concepts.html#iterator-traversal-concepts-lib-iterator-traversal">iterator traversal concept</a> our
|
||||||
<tt class="docutils literal"><span class="pre">node_iterator</span></tt> is going to model. Singly-linked lists only have
|
<tt class="docutils literal"><span class="pre">node_iterator</span></tt> is going to model. Singly-linked lists only have
|
||||||
forward links, so our iterator can't can't be a <a class="reference" href="new-iter-concepts.html#bidirectional-traversal-iterators-lib-bidirectional-traversal-iterators">bidirectional
|
forward links, so our iterator can't can't be a <a class="reference external" href="new-iter-concepts.html#bidirectional-traversal-iterators-lib-bidirectional-traversal-iterators">bidirectional
|
||||||
traversal iterator</a>. Our iterator should be able to make multiple
|
traversal iterator</a>. Our iterator should be able to make multiple
|
||||||
passes over the same linked list (unlike, say, an
|
passes over the same linked list (unlike, say, an
|
||||||
<tt class="docutils literal"><span class="pre">istream_iterator</span></tt> which consumes the stream it traverses), so it
|
<tt class="docutils literal"><span class="pre">istream_iterator</span></tt> which consumes the stream it traverses), so it
|
||||||
must be a <a class="reference" href="new-iter-concepts.html#forward-traversal-iterators-lib-forward-traversal-iterators">forward traversal iterator</a>. Therefore, we'll pass
|
must be a <a class="reference external" href="new-iter-concepts.html#forward-traversal-iterators-lib-forward-traversal-iterators">forward traversal iterator</a>. Therefore, we'll pass
|
||||||
<tt class="docutils literal"><span class="pre">boost::forward_traversal_tag</span></tt> in this position <a class="footnote-reference" href="#category" id="id11" name="id11">[1]</a>.</p>
|
<tt class="docutils literal"><span class="pre">boost::forward_traversal_tag</span></tt> in this position<a class="footnote-reference" href="#category" id="id11"><sup>1</sup></a>.</p>
|
||||||
<table class="docutils footnote" frame="void" id="category" rules="none">
|
<table class="docutils footnote" frame="void" id="category" rules="none">
|
||||||
<colgroup><col class="label" /><col /></colgroup>
|
<colgroup><col class="label" /><col /></colgroup>
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<tr><td class="label"><a class="fn-backref" href="#id11" name="category">[1]</a></td><td><tt class="docutils literal"><span class="pre">iterator_facade</span></tt> also supports old-style category
|
<tr><td class="label"><a class="fn-backref" href="#id11">[1]</a></td><td><tt class="docutils literal"><span class="pre">iterator_facade</span></tt> also supports old-style category
|
||||||
tags, so we could have passed <tt class="docutils literal"><span class="pre">std::forward_iterator_tag</span></tt> here;
|
tags, so we could have passed <tt class="docutils literal"><span class="pre">std::forward_iterator_tag</span></tt> here;
|
||||||
either way, the resulting iterator's <tt class="docutils literal"><span class="pre">iterator_category</span></tt> will
|
either way, the resulting iterator's <tt class="docutils literal"><span class="pre">iterator_category</span></tt> will
|
||||||
end up being <tt class="docutils literal"><span class="pre">std::forward_iterator_tag</span></tt>.</td></tr>
|
end up being <tt class="docutils literal"><span class="pre">std::forward_iterator_tag</span></tt>.</td></tr>
|
||||||
@ -954,7 +982,7 @@ end up being <tt class="docutils literal"><span class="pre">std::forward_iterato
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="id12">
|
<div class="section" id="id12">
|
||||||
<h4><a class="toc-backref" href="#id38" name="id12"><tt class="docutils literal"><span class="pre">Reference</span></tt></a></h4>
|
<h4><a class="toc-backref" href="#id38"><tt class="docutils literal"><span class="pre">Reference</span></tt></a></h4>
|
||||||
<p>The <tt class="docutils literal"><span class="pre">Reference</span></tt> argument becomes the type returned by
|
<p>The <tt class="docutils literal"><span class="pre">Reference</span></tt> argument becomes the type returned by
|
||||||
<tt class="docutils literal"><span class="pre">node_iterator</span></tt>'s dereference operation, and will also be the
|
<tt class="docutils literal"><span class="pre">node_iterator</span></tt>'s dereference operation, and will also be the
|
||||||
same as <tt class="docutils literal"><span class="pre">std::iterator_traits<node_iterator>::reference</span></tt>. The
|
same as <tt class="docutils literal"><span class="pre">std::iterator_traits<node_iterator>::reference</span></tt>. The
|
||||||
@ -963,7 +991,7 @@ library's default for this parameter is <tt class="docutils literal"><span class
|
|||||||
type, we can omit this argument, or pass <tt class="docutils literal"><span class="pre">use_default</span></tt>.</p>
|
type, we can omit this argument, or pass <tt class="docutils literal"><span class="pre">use_default</span></tt>.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="difference">
|
<div class="section" id="difference">
|
||||||
<h4><a class="toc-backref" href="#id39" name="difference"><tt class="docutils literal"><span class="pre">Difference</span></tt></a></h4>
|
<h4><a class="toc-backref" href="#id39"><tt class="docutils literal"><span class="pre">Difference</span></tt></a></h4>
|
||||||
<p>The <tt class="docutils literal"><span class="pre">Difference</span></tt> argument determines how the distance between
|
<p>The <tt class="docutils literal"><span class="pre">Difference</span></tt> argument determines how the distance between
|
||||||
two <tt class="docutils literal"><span class="pre">node_iterator</span></tt>s will be measured and will also be the
|
two <tt class="docutils literal"><span class="pre">node_iterator</span></tt>s will be measured and will also be the
|
||||||
same as <tt class="docutils literal"><span class="pre">std::iterator_traits<node_iterator>::difference_type</span></tt>.
|
same as <tt class="docutils literal"><span class="pre">std::iterator_traits<node_iterator>::difference_type</span></tt>.
|
||||||
@ -990,14 +1018,14 @@ class node_iterator
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="constructors-and-data-members">
|
<div class="section" id="constructors-and-data-members">
|
||||||
<h3><a class="toc-backref" href="#id40" name="constructors-and-data-members">Constructors and Data Members</a></h3>
|
<h3><a class="toc-backref" href="#id40">Constructors and Data Members</a></h3>
|
||||||
<p>Next we need to decide how to represent the iterator's position.
|
<p>Next we need to decide how to represent the iterator's position.
|
||||||
This representation will take the form of data members, so we'll
|
This representation will take the form of data members, so we'll
|
||||||
also need to write constructors to initialize them. The
|
also need to write constructors to initialize them. The
|
||||||
<tt class="docutils literal"><span class="pre">node_iterator</span></tt>'s position is quite naturally represented using
|
<tt class="docutils literal"><span class="pre">node_iterator</span></tt>'s position is quite naturally represented using
|
||||||
a pointer to a <tt class="docutils literal"><span class="pre">node_base</span></tt>. We'll need a constructor to build an
|
a pointer to a <tt class="docutils literal"><span class="pre">node_base</span></tt>. We'll need a constructor to build an
|
||||||
iterator from a <tt class="docutils literal"><span class="pre">node_base*</span></tt>, and a default constructor to
|
iterator from a <tt class="docutils literal"><span class="pre">node_base*</span></tt>, and a default constructor to
|
||||||
satisfy the <a class="reference" href="new-iter-concepts.html#forward-traversal-iterators-lib-forward-traversal-iterators">forward traversal iterator</a> requirements <a class="footnote-reference" href="#default" id="id13" name="id13">[2]</a>.
|
satisfy the <a class="reference external" href="new-iter-concepts.html#forward-traversal-iterators-lib-forward-traversal-iterators">forward traversal iterator</a> requirements<a class="footnote-reference" href="#default" id="id13"><sup>2</sup></a>.
|
||||||
Our <tt class="docutils literal"><span class="pre">node_iterator</span></tt> then becomes:</p>
|
Our <tt class="docutils literal"><span class="pre">node_iterator</span></tt> then becomes:</p>
|
||||||
<pre class="literal-block">
|
<pre class="literal-block">
|
||||||
# include "node.hpp"
|
# include "node.hpp"
|
||||||
@ -1027,7 +1055,7 @@ class node_iterator
|
|||||||
<table class="docutils footnote" frame="void" id="default" rules="none">
|
<table class="docutils footnote" frame="void" id="default" rules="none">
|
||||||
<colgroup><col class="label" /><col /></colgroup>
|
<colgroup><col class="label" /><col /></colgroup>
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<tr><td class="label"><a class="fn-backref" href="#id13" name="default">[2]</a></td><td>Technically, the C++ standard places almost no
|
<tr><td class="label"><a class="fn-backref" href="#id13">[2]</a></td><td>Technically, the C++ standard places almost no
|
||||||
requirements on a default-constructed iterator, so if we were
|
requirements on a default-constructed iterator, so if we were
|
||||||
really concerned with efficiency, we could've written the
|
really concerned with efficiency, we could've written the
|
||||||
default constructor to leave <tt class="docutils literal"><span class="pre">m_node</span></tt> uninitialized.</td></tr>
|
default constructor to leave <tt class="docutils literal"><span class="pre">m_node</span></tt> uninitialized.</td></tr>
|
||||||
@ -1035,12 +1063,12 @@ default constructor to leave <tt class="docutils literal"><span class="pre">m_no
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="implementing-the-core-operations">
|
<div class="section" id="implementing-the-core-operations">
|
||||||
<h3><a class="toc-backref" href="#id41" name="implementing-the-core-operations">Implementing the Core Operations</a></h3>
|
<h3><a class="toc-backref" href="#id41">Implementing the Core Operations</a></h3>
|
||||||
<p>The last step is to implement the <a class="reference" href="#core-operations">core operations</a> required by
|
<p>The last step is to implement the <a class="reference internal" href="#core-operations">core operations</a> required by
|
||||||
the concepts we want our iterator to model. Referring to the
|
the concepts we want our iterator to model. Referring to the
|
||||||
<a class="reference" href="#core-operations">table</a>, we can see that the first three rows are applicable
|
<a class="reference internal" href="#core-operations">table</a>, we can see that the first three rows are applicable
|
||||||
because <tt class="docutils literal"><span class="pre">node_iterator</span></tt> needs to satisfy the requirements for
|
because <tt class="docutils literal"><span class="pre">node_iterator</span></tt> needs to satisfy the requirements for
|
||||||
<a class="reference" href="new-iter-concepts.html#readable-iterators-lib-readable-iterators">readable iterator</a>, <a class="reference" href="new-iter-concepts.html#single-pass-iterators-lib-single-pass-iterators">single pass iterator</a>, and <a class="reference" href="new-iter-concepts.html#incrementable-iterators-lib-incrementable-iterators">incrementable
|
<a class="reference external" href="new-iter-concepts.html#readable-iterators-lib-readable-iterators">readable iterator</a>, <a class="reference external" href="new-iter-concepts.html#single-pass-iterators-lib-single-pass-iterators">single pass iterator</a>, and <a class="reference external" href="new-iter-concepts.html#incrementable-iterators-lib-incrementable-iterators">incrementable
|
||||||
iterator</a>.</p>
|
iterator</a>.</p>
|
||||||
<p>We therefore need to supply <tt class="docutils literal"><span class="pre">dereference</span></tt>,
|
<p>We therefore need to supply <tt class="docutils literal"><span class="pre">dereference</span></tt>,
|
||||||
<tt class="docutils literal"><span class="pre">equal</span></tt>, and <tt class="docutils literal"><span class="pre">increment</span></tt> members. We don't want these members
|
<tt class="docutils literal"><span class="pre">equal</span></tt>, and <tt class="docutils literal"><span class="pre">increment</span></tt> members. We don't want these members
|
||||||
@ -1082,11 +1110,11 @@ class node_iterator
|
|||||||
};
|
};
|
||||||
</pre>
|
</pre>
|
||||||
<p>Voilà; a complete and conforming readable, forward-traversal
|
<p>Voilà; a complete and conforming readable, forward-traversal
|
||||||
iterator! For a working example of its use, see <a class="reference" href="../example/node_iterator1.cpp">this program</a>.</p>
|
iterator! For a working example of its use, see <a class="reference external" href="../example/node_iterator1.cpp">this program</a>.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="a-constant-node-iterator">
|
<div class="section" id="a-constant-node-iterator">
|
||||||
<h2><a class="toc-backref" href="#id42" name="a-constant-node-iterator">A constant <tt class="docutils literal"><span class="pre">node_iterator</span></tt></a></h2>
|
<h2><a class="toc-backref" href="#id42">A constant <tt class="docutils literal"><span class="pre">node_iterator</span></tt></a></h2>
|
||||||
<div class="sidebar">
|
<div class="sidebar">
|
||||||
<p class="first sidebar-title">Constant and Mutable iterators</p>
|
<p class="first sidebar-title">Constant and Mutable iterators</p>
|
||||||
<p>The term <strong>mutable iterator</strong> means an iterator through which
|
<p>The term <strong>mutable iterator</strong> means an iterator through which
|
||||||
@ -1187,7 +1215,7 @@ typedef node_iter<node_base const> node_const_iterator;
|
|||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="interoperability">
|
<div class="section" id="interoperability">
|
||||||
<h2><a class="toc-backref" href="#id43" name="interoperability">Interoperability</a></h2>
|
<h2><a class="toc-backref" href="#id43">Interoperability</a></h2>
|
||||||
<p>Our <tt class="docutils literal"><span class="pre">const_node_iterator</span></tt> works perfectly well on its own, but
|
<p>Our <tt class="docutils literal"><span class="pre">const_node_iterator</span></tt> works perfectly well on its own, but
|
||||||
taken together with <tt class="docutils literal"><span class="pre">node_iterator</span></tt> it doesn't quite meet
|
taken together with <tt class="docutils literal"><span class="pre">node_iterator</span></tt> it doesn't quite meet
|
||||||
expectations. For example, we'd like to be able to pass a
|
expectations. For example, we'd like to be able to pass a
|
||||||
@ -1197,9 +1225,9 @@ just as you can with <tt class="docutils literal"><span class="pre">std::list<
|
|||||||
<tt class="docutils literal"><span class="pre">node_const_iterator</span></tt> into the same list, we should be able to
|
<tt class="docutils literal"><span class="pre">node_const_iterator</span></tt> into the same list, we should be able to
|
||||||
compare them for equality.</p>
|
compare them for equality.</p>
|
||||||
<p>This expected ability to use two different iterator types together
|
<p>This expected ability to use two different iterator types together
|
||||||
is known as <a class="reference" href="new-iter-concepts.html#interoperable-iterators-lib-interoperable-iterators"><strong>interoperability</strong></a>. Achieving interoperability in
|
is known as <a class="reference external" href="new-iter-concepts.html#interoperable-iterators-lib-interoperable-iterators"><strong>interoperability</strong></a>. Achieving interoperability in
|
||||||
our case is as simple as templatizing the <tt class="docutils literal"><span class="pre">equal</span></tt> function and
|
our case is as simple as templatizing the <tt class="docutils literal"><span class="pre">equal</span></tt> function and
|
||||||
adding a templatized converting constructor <a class="footnote-reference" href="#broken" id="id16" name="id16">[3]</a> <a class="footnote-reference" href="#random" id="id17" name="id17">[4]</a>:</p>
|
adding a templatized converting constructor<a class="footnote-reference" href="#broken" id="id16"><sup>3</sup></a><a class="footnote-reference" href="#random" id="id17"><sup>4</sup></a>:</p>
|
||||||
<pre class="literal-block">
|
<pre class="literal-block">
|
||||||
template <class Value>
|
template <class Value>
|
||||||
class node_iter
|
class node_iter
|
||||||
@ -1244,23 +1272,23 @@ typedef impl::node_iterator<node_base const> node_const_iterator;
|
|||||||
<table class="docutils footnote" frame="void" id="broken" rules="none">
|
<table class="docutils footnote" frame="void" id="broken" rules="none">
|
||||||
<colgroup><col class="label" /><col /></colgroup>
|
<colgroup><col class="label" /><col /></colgroup>
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<tr><td class="label"><a class="fn-backref" href="#id16" name="broken">[3]</a></td><td>If you're using an older compiler and it can't handle
|
<tr><td class="label"><a class="fn-backref" href="#id16">[3]</a></td><td>If you're using an older compiler and it can't handle
|
||||||
this example, see the <a class="reference" href="../example/node_iterator2.hpp">example code</a> for workarounds.</td></tr>
|
this example, see the <a class="reference external" href="../example/node_iterator2.hpp">example code</a> for workarounds.</td></tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<table class="docutils footnote" frame="void" id="random" rules="none">
|
<table class="docutils footnote" frame="void" id="random" rules="none">
|
||||||
<colgroup><col class="label" /><col /></colgroup>
|
<colgroup><col class="label" /><col /></colgroup>
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<tr><td class="label"><a class="fn-backref" href="#id17" name="random">[4]</a></td><td>If <tt class="docutils literal"><span class="pre">node_iterator</span></tt> had been a <a class="reference" href="new-iter-concepts.html#random-access-traversal-iterators-lib-random-access-traversal-iterators">random access
|
<tr><td class="label"><a class="fn-backref" href="#id17">[4]</a></td><td>If <tt class="docutils literal"><span class="pre">node_iterator</span></tt> had been a <a class="reference external" href="new-iter-concepts.html#random-access-traversal-iterators-lib-random-access-traversal-iterators">random access
|
||||||
traversal iterator</a>, we'd have had to templatize its
|
traversal iterator</a>, we'd have had to templatize its
|
||||||
<tt class="docutils literal"><span class="pre">distance_to</span></tt> function as well.</td></tr>
|
<tt class="docutils literal"><span class="pre">distance_to</span></tt> function as well.</td></tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<p>You can see an example program which exercises our interoperable
|
<p>You can see an example program which exercises our interoperable
|
||||||
iterators <a class="reference" href="../example/node_iterator2.cpp">here</a>.</p>
|
iterators <a class="reference external" href="../example/node_iterator2.cpp">here</a>.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="telling-the-truth">
|
<div class="section" id="telling-the-truth">
|
||||||
<h2><a class="toc-backref" href="#id44" name="telling-the-truth">Telling the Truth</a></h2>
|
<h2><a class="toc-backref" href="#id44">Telling the Truth</a></h2>
|
||||||
<p>Now <tt class="docutils literal"><span class="pre">node_iterator</span></tt> and <tt class="docutils literal"><span class="pre">node_const_iterator</span></tt> behave exactly as
|
<p>Now <tt class="docutils literal"><span class="pre">node_iterator</span></tt> and <tt class="docutils literal"><span class="pre">node_const_iterator</span></tt> behave exactly as
|
||||||
you'd expect... almost. We can compare them and we can convert in
|
you'd expect... almost. We can compare them and we can convert in
|
||||||
one direction: from <tt class="docutils literal"><span class="pre">node_iterator</span></tt> to <tt class="docutils literal"><span class="pre">node_const_iterator</span></tt>.
|
one direction: from <tt class="docutils literal"><span class="pre">node_iterator</span></tt> to <tt class="docutils literal"><span class="pre">node_const_iterator</span></tt>.
|
||||||
@ -1269,15 +1297,15 @@ If we try to convert from <tt class="docutils literal"><span class="pre">node_co
|
|||||||
constructor tries to initialize <tt class="docutils literal"><span class="pre">node_iterator</span></tt>'s <tt class="docutils literal"><span class="pre">m_node</span></tt>, a
|
constructor tries to initialize <tt class="docutils literal"><span class="pre">node_iterator</span></tt>'s <tt class="docutils literal"><span class="pre">m_node</span></tt>, a
|
||||||
<tt class="docutils literal"><span class="pre">node*</span></tt> with a <tt class="docutils literal"><span class="pre">node</span> <span class="pre">const*</span></tt>. So what's the problem?</p>
|
<tt class="docutils literal"><span class="pre">node*</span></tt> with a <tt class="docutils literal"><span class="pre">node</span> <span class="pre">const*</span></tt>. So what's the problem?</p>
|
||||||
<p>The problem is that
|
<p>The problem is that
|
||||||
<tt class="docutils literal"><span class="pre">boost::</span></tt><a class="reference" href="../../type_traits/index.html#relationships"><tt class="docutils literal"><span class="pre">is_convertible</span></tt></a><tt class="docutils literal"><span class="pre"><node_const_iterator,node_iterator>::value</span></tt>
|
<tt class="docutils literal"><span class="pre">boost::</span></tt><a class="reference external" href="../../type_traits/index.html#relationships"><tt class="docutils literal"><span class="pre">is_convertible</span></tt></a><tt class="docutils literal"><span class="pre"><node_const_iterator,node_iterator>::value</span></tt>
|
||||||
will be <tt class="docutils literal"><span class="pre">true</span></tt>, but it should be <tt class="docutils literal"><span class="pre">false</span></tt>. <a class="reference" href="../../type_traits/index.html#relationships"><tt class="docutils literal"><span class="pre">is_convertible</span></tt></a>
|
will be <tt class="docutils literal"><span class="pre">true</span></tt>, but it should be <tt class="docutils literal"><span class="pre">false</span></tt>. <a class="reference external" href="../../type_traits/index.html#relationships"><tt class="docutils literal"><span class="pre">is_convertible</span></tt></a>
|
||||||
lies because it can only see as far as the <em>declaration</em> of
|
lies because it can only see as far as the <em>declaration</em> of
|
||||||
<tt class="docutils literal"><span class="pre">node_iter</span></tt>'s converting constructor, but can't look inside at
|
<tt class="docutils literal"><span class="pre">node_iter</span></tt>'s converting constructor, but can't look inside at
|
||||||
the <em>definition</em> to make sure it will compile. A perfect solution
|
the <em>definition</em> to make sure it will compile. A perfect solution
|
||||||
would make <tt class="docutils literal"><span class="pre">node_iter</span></tt>'s converting constructor disappear when
|
would make <tt class="docutils literal"><span class="pre">node_iter</span></tt>'s converting constructor disappear when
|
||||||
the <tt class="docutils literal"><span class="pre">m_node</span></tt> conversion would fail.</p>
|
the <tt class="docutils literal"><span class="pre">m_node</span></tt> conversion would fail.</p>
|
||||||
<p>In fact, that sort of magic is possible using
|
<p>In fact, that sort of magic is possible using
|
||||||
<a class="reference" href="../../utility/enable_if.html"><tt class="docutils literal"><span class="pre">boost::enable_if</span></tt></a>. By rewriting the converting constructor as
|
<a class="reference external" href="../../utility/enable_if.html"><tt class="docutils literal"><span class="pre">boost::enable_if</span></tt></a>. By rewriting the converting constructor as
|
||||||
follows, we can remove it from the overload set when it's not
|
follows, we can remove it from the overload set when it's not
|
||||||
appropriate:</p>
|
appropriate:</p>
|
||||||
<pre class="literal-block">
|
<pre class="literal-block">
|
||||||
@ -1302,18 +1330,19 @@ public:
|
|||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="wrap-up">
|
<div class="section" id="wrap-up">
|
||||||
<h2><a class="toc-backref" href="#id45" name="wrap-up">Wrap Up</a></h2>
|
<h2><a class="toc-backref" href="#id45">Wrap Up</a></h2>
|
||||||
<p>This concludes our <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> tutorial, but before you
|
<p>This concludes our <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> tutorial, but before you
|
||||||
stop reading we urge you to take a look at <a class="reference" href="iterator_adaptor.html"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt></a>.
|
stop reading we urge you to take a look at <a class="reference external" href="iterator_adaptor.html"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt></a>.
|
||||||
There's another way to approach writing these iterators which might
|
There's another way to approach writing these iterators which might
|
||||||
even be superior.</p>
|
even be superior.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<hr class="docutils footer" />
|
|
||||||
<div class="footer">
|
<div class="footer">
|
||||||
<a class="reference" href="iterator_facade.rst">View document source</a>.
|
<hr class="footer" />
|
||||||
Generated by <a class="reference" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
<a class="reference external" href="iterator_facade.rst">View document source</a>.
|
||||||
|
Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
0
doc/iterator_facade.pdf
Executable file → Normal file
0
doc/iterator_facade.pdf
Executable file → Normal file
@ -1,3 +1,7 @@
|
|||||||
|
.. Distributed under the Boost
|
||||||
|
.. Software License, Version 1.0. (See accompanying
|
||||||
|
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
++++++++++++++++
|
++++++++++++++++
|
||||||
Iterator Facade
|
Iterator Facade
|
||||||
++++++++++++++++
|
++++++++++++++++
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
.. Copyright David Abrahams 2006. Distributed under the Boost
|
||||||
|
.. Software License, Version 1.0. (See accompanying
|
||||||
|
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
``iterator_facade`` is a base class template that implements the
|
``iterator_facade`` is a base class template that implements the
|
||||||
interface of standard iterators in terms of a few core functions
|
interface of standard iterators in terms of a few core functions
|
||||||
and associated types, to be supplied by a derived iterator class.
|
and associated types, to be supplied by a derived iterator class.
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
.. Distributed under the Boost
|
||||||
|
.. Software License, Version 1.0. (See accompanying
|
||||||
|
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
.. Version 1.1 of this ReStructuredText document corresponds to
|
.. Version 1.1 of this ReStructuredText document corresponds to
|
||||||
n1530_, the paper accepted by the LWG for TR1.
|
n1530_, the paper accepted by the LWG for TR1.
|
||||||
|
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
.. Distributed under the Boost
|
||||||
|
.. Software License, Version 1.0. (See accompanying
|
||||||
|
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
.. Version 1.3 of this ReStructuredText document corresponds to
|
.. Version 1.3 of this ReStructuredText document corresponds to
|
||||||
n1530_, the paper accepted by the LWG for TR1.
|
n1530_, the paper accepted by the LWG for TR1.
|
||||||
|
|
||||||
|
2
doc/iterator_facade_tutorial.rst
Executable file → Normal file
2
doc/iterator_facade_tutorial.rst
Executable file → Normal file
@ -8,7 +8,7 @@ example of a linked list of polymorphic objects. This example was
|
|||||||
inspired by a `posting`__ by Keith Macdonald on the `Boost-Users`_
|
inspired by a `posting`__ by Keith Macdonald on the `Boost-Users`_
|
||||||
mailing list.
|
mailing list.
|
||||||
|
|
||||||
.. _`Boost-Users`: ../../../more/mailing_lists.htm#users
|
.. _`Boost-Users`: http://www.boost.org/more/mailing_lists.htm#users
|
||||||
|
|
||||||
__ http://thread.gmane.org/gmane.comp.lib.boost.user/5100
|
__ http://thread.gmane.org/gmane.comp.lib.boost.user/5100
|
||||||
|
|
||||||
|
36
doc/iterator_traits.html
Executable file → Normal file
36
doc/iterator_traits.html
Executable file → Normal file
@ -3,13 +3,13 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="generator" content="Docutils 0.3.8: http://docutils.sourceforge.net/" />
|
<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
|
||||||
<title>Iterator Traits</title>
|
<title>Iterator Traits</title>
|
||||||
<meta name="author" content="David Abrahams" />
|
<meta name="author" content="David Abrahams" />
|
||||||
<meta name="organization" content="Boost Consulting" />
|
<meta name="organization" content="Boost Consulting" />
|
||||||
<meta name="date" content="2004-11-01" />
|
<meta name="date" content="2006-09-11" />
|
||||||
<meta name="copyright" content="Copyright David Abrahams 2004." />
|
<meta name="copyright" content="Copyright David Abrahams 2004." />
|
||||||
<link rel="stylesheet" href="default.css" type="text/css" />
|
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="document" id="iterator-traits">
|
<div class="document" id="iterator-traits">
|
||||||
@ -21,36 +21,39 @@
|
|||||||
<tr><th class="docinfo-name">Author:</th>
|
<tr><th class="docinfo-name">Author:</th>
|
||||||
<td>David Abrahams</td></tr>
|
<td>David Abrahams</td></tr>
|
||||||
<tr><th class="docinfo-name">Contact:</th>
|
<tr><th class="docinfo-name">Contact:</th>
|
||||||
<td><a class="first last reference" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a></td></tr>
|
<td><a class="first last reference external" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a></td></tr>
|
||||||
<tr><th class="docinfo-name">Organization:</th>
|
<tr><th class="docinfo-name">Organization:</th>
|
||||||
<td><a class="first last reference" href="http://www.boost-consulting.com">Boost Consulting</a></td></tr>
|
<td><a class="first last reference external" href="http://www.boost-consulting.com">Boost Consulting</a></td></tr>
|
||||||
<tr><th class="docinfo-name">Date:</th>
|
<tr><th class="docinfo-name">Date:</th>
|
||||||
<td>2004-11-01</td></tr>
|
<td>2006-09-11</td></tr>
|
||||||
<tr><th class="docinfo-name">Copyright:</th>
|
<tr><th class="docinfo-name">Copyright:</th>
|
||||||
<td>Copyright David Abrahams 2004.</td></tr>
|
<td>Copyright David Abrahams 2004.</td></tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
<!-- Distributed under the Boost -->
|
||||||
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
<table class="docutils field-list" frame="void" rules="none">
|
<table class="docutils field-list" frame="void" rules="none">
|
||||||
<col class="field-name" />
|
<col class="field-name" />
|
||||||
<col class="field-body" />
|
<col class="field-body" />
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<tr class="field"><th class="field-name">abstract:</th><td class="field-body">Header <tt class="docutils literal"><span class="pre"><boost/iterator/iterator_traits.hpp></span></tt> provides
|
<tr class="field"><th class="field-name">abstract:</th><td class="field-body">Header <tt class="docutils literal"><span class="pre"><boost/iterator/iterator_traits.hpp></span></tt> provides
|
||||||
the ability to access an iterator's associated types using
|
the ability to access an iterator's associated types using
|
||||||
MPL-compatible <a class="reference" href="../../mpl/doc/refmanual/metafunction.html">metafunctions</a>.</td>
|
MPL-compatible <a class="reference external" href="../../mpl/doc/index.html#metafunctions">metafunctions</a>.</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<div class="section" id="overview">
|
<div class="section" id="overview">
|
||||||
<h1><a name="overview">Overview</a></h1>
|
<h1>Overview</h1>
|
||||||
<p><tt class="docutils literal"><span class="pre">std::iterator_traits</span></tt> provides access to five associated types
|
<p><tt class="docutils literal"><span class="pre">std::iterator_traits</span></tt> provides access to five associated types
|
||||||
of any iterator: its <tt class="docutils literal"><span class="pre">value_type</span></tt>, <tt class="docutils literal"><span class="pre">reference</span></tt>, <tt class="docutils literal"><span class="pre">pointer</span></tt>,
|
of any iterator: its <tt class="docutils literal"><span class="pre">value_type</span></tt>, <tt class="docutils literal"><span class="pre">reference</span></tt>, <tt class="docutils literal"><span class="pre">pointer</span></tt>,
|
||||||
<tt class="docutils literal"><span class="pre">iterator_category</span></tt>, and <tt class="docutils literal"><span class="pre">difference_type</span></tt>. Unfortunately,
|
<tt class="docutils literal"><span class="pre">iterator_category</span></tt>, and <tt class="docutils literal"><span class="pre">difference_type</span></tt>. Unfortunately,
|
||||||
such a "multi-valued" traits template can be difficult to use in a
|
such a "multi-valued" traits template can be difficult to use in a
|
||||||
metaprogramming context. <tt class="docutils literal"><span class="pre"><boost/iterator/iterator_traits.hpp></span></tt>
|
metaprogramming context. <tt class="docutils literal"><span class="pre"><boost/iterator/iterator_traits.hpp></span></tt>
|
||||||
provides access to these types using a standard <a class="reference" href="../../mpl/doc/refmanual/metafunction.html">metafunctions</a>.</p>
|
provides access to these types using a standard <a class="reference external" href="../../mpl/doc/index.html#metafunctions">metafunctions</a>.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="summary">
|
<div class="section" id="summary">
|
||||||
<h1><a name="summary">Summary</a></h1>
|
<h1>Summary</h1>
|
||||||
<p>Header <tt class="docutils literal"><span class="pre"><boost/iterator/iterator_traits.hpp></span></tt>:</p>
|
<p>Header <tt class="docutils literal"><span class="pre"><boost/iterator/iterator_traits.hpp></span></tt>:</p>
|
||||||
<pre class="literal-block">
|
<pre class="literal-block">
|
||||||
template <class Iterator>
|
template <class Iterator>
|
||||||
@ -96,13 +99,13 @@ struct iterator_category
|
|||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
<div class="section" id="broken-compiler-notes">
|
<div class="section" id="broken-compiler-notes">
|
||||||
<h1><a name="broken-compiler-notes">Broken Compiler Notes</a></h1>
|
<h1>Broken Compiler Notes</h1>
|
||||||
<p>Because of workarounds in Boost, you may find that these
|
<p>Because of workarounds in Boost, you may find that these
|
||||||
<a class="reference" href="../../mpl/doc/refmanual/metafunction.html">metafunctions</a> actually work better than the facilities provided by
|
<a class="reference external" href="../../mpl/doc/index.html#metafunctions">metafunctions</a> actually work better than the facilities provided by
|
||||||
your compiler's standard library.</p>
|
your compiler's standard library.</p>
|
||||||
<p>On compilers that don't support partial specialization, such as
|
<p>On compilers that don't support partial specialization, such as
|
||||||
Microsoft Visual C++ 6.0 or 7.0, you may need to manually invoke
|
Microsoft Visual C++ 6.0 or 7.0, you may need to manually invoke
|
||||||
<a class="reference" href="../../../doc/html/boost_typetraits/category.html#boost_typetraits.transform">BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION</a> on the
|
<a class="reference external" href="../../type_traits/index.html#transformations">BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION</a> on the
|
||||||
<tt class="docutils literal"><span class="pre">value_type</span></tt> of pointers that are passed to these metafunctions.</p>
|
<tt class="docutils literal"><span class="pre">value_type</span></tt> of pointers that are passed to these metafunctions.</p>
|
||||||
<p>Because of bugs in the implementation of GCC-2.9x, the name of
|
<p>Because of bugs in the implementation of GCC-2.9x, the name of
|
||||||
<tt class="docutils literal"><span class="pre">iterator_category</span></tt> is changed to <tt class="docutils literal"><span class="pre">iterator_category_</span></tt> on that
|
<tt class="docutils literal"><span class="pre">iterator_category</span></tt> is changed to <tt class="docutils literal"><span class="pre">iterator_category_</span></tt> on that
|
||||||
@ -111,10 +114,11 @@ either <tt class="docutils literal"><span class="pre">iterator_category</span></
|
|||||||
appropriate to the platform, is provided for portability.</p>
|
appropriate to the platform, is provided for portability.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<hr class="docutils footer" />
|
|
||||||
<div class="footer">
|
<div class="footer">
|
||||||
<a class="reference" href="iterator_traits.rst">View document source</a>.
|
<hr class="footer" />
|
||||||
Generated by <a class="reference" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
<a class="reference external" href="iterator_traits.rst">View document source</a>.
|
||||||
|
Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
0
doc/iterator_traits.pdf
Executable file → Normal file
0
doc/iterator_traits.pdf
Executable file → Normal file
4
doc/iterator_traits.rst
Executable file → Normal file
4
doc/iterator_traits.rst
Executable file → Normal file
@ -1,3 +1,7 @@
|
|||||||
|
.. Distributed under the Boost
|
||||||
|
.. Software License, Version 1.0. (See accompanying
|
||||||
|
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
+++++++++++++++++
|
+++++++++++++++++
|
||||||
Iterator Traits
|
Iterator Traits
|
||||||
+++++++++++++++++
|
+++++++++++++++++
|
||||||
|
3
doc/make_counting_iterator.rst
Executable file → Normal file
3
doc/make_counting_iterator.rst
Executable file → Normal file
@ -1,3 +1,6 @@
|
|||||||
|
.. Copyright David Abrahams 2006. Distributed under the Boost
|
||||||
|
.. Software License, Version 1.0. (See accompanying
|
||||||
|
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
|
@ -1,45 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" ?>
|
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
|
||||||
<head>
|
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
||||||
<meta name="generator" content="Docutils 0.3.6: http://docutils.sourceforge.net/" />
|
|
||||||
<title></title>
|
|
||||||
<link rel="stylesheet" href="default.css" type="text/css" />
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="document">
|
|
||||||
<pre class="literal-block">
|
|
||||||
template <class Predicate, class Iterator>
|
|
||||||
filter_iterator<Predicate,Iterator>
|
|
||||||
make_filter_iterator(Predicate f, Iterator x, Iterator end = Iterator());
|
|
||||||
</pre>
|
|
||||||
<table class="field-list" frame="void" rules="none">
|
|
||||||
<col class="field-name" />
|
|
||||||
<col class="field-body" />
|
|
||||||
<tbody valign="top">
|
|
||||||
<tr class="field"><th class="field-name">Returns:</th><td class="field-body">filter_iterator<Predicate,Iterator>(f, x, end)</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<pre class="literal-block">
|
|
||||||
template <class Predicate, class Iterator>
|
|
||||||
filter_iterator<Predicate,Iterator>
|
|
||||||
make_filter_iterator(Iterator x, Iterator end = Iterator());
|
|
||||||
</pre>
|
|
||||||
<table class="field-list" frame="void" rules="none">
|
|
||||||
<col class="field-name" />
|
|
||||||
<col class="field-body" />
|
|
||||||
<tbody valign="top">
|
|
||||||
<tr class="field"><th class="field-name">Returns:</th><td class="field-body">filter_iterator<Predicate,Iterator>(x, end)</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
<hr class="footer" />
|
|
||||||
<div class="footer">
|
|
||||||
<a class="reference" href="make_filter_iterator.rst">View document source</a>.
|
|
||||||
Generated by <a class="reference" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
3
doc/make_filter_iterator.rst
Executable file → Normal file
3
doc/make_filter_iterator.rst
Executable file → Normal file
@ -1,3 +1,6 @@
|
|||||||
|
.. Copyright David Abrahams 2006. Distributed under the Boost
|
||||||
|
.. Software License, Version 1.0. (See accompanying
|
||||||
|
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
.. Copyright David Abrahams 2006. Distributed under the Boost
|
||||||
|
.. Software License, Version 1.0. (See accompanying
|
||||||
|
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
template <class BidirectionalIterator>
|
template <class BidirectionalIterator>
|
||||||
|
4
doc/make_transform_iterator.rst
Executable file → Normal file
4
doc/make_transform_iterator.rst
Executable file → Normal file
@ -1,3 +1,7 @@
|
|||||||
|
.. Copyright David Abrahams 2006. Distributed under the Boost
|
||||||
|
.. Software License, Version 1.0. (See accompanying
|
||||||
|
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
template <class UnaryFunction, class Iterator>
|
template <class UnaryFunction, class Iterator>
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user