Compare commits

..

44 Commits

Author SHA1 Message Date
Marshall Clow
b126e2b48d Release 1.55.0
[SVN r86621]
2013-11-11 19:45:21 +00:00
Jeffrey Lee Hellrung, Jr.
6d0b2d4f8a Merging trunk to release; fixing typo in comments of iterator_facade.
[SVN r80818]
2012-10-02 13:30:46 +00:00
Jeffrey Lee Hellrung, Jr.
c9463e941f Merging boost/iterator from trunk to release (usability improvement after latest fix to function_input_iterator).
[SVN r80813]
2012-10-02 01:14:36 +00:00
Jeffrey Lee Hellrung, Jr.
9025bbfc2a Merging boost/iterator and libs/iterator trunk to release.
[SVN r80568]
2012-09-18 02:50:52 +00:00
Jeffrey Lee Hellrung, Jr.
c7fc3470d0 merging from trunk; fix #5127 from M. Morin; fix for refs #5697
[SVN r78184]
2012-04-24 21:28:07 +00:00
Jeremiah Willcock
fbbdcf8c99 Merged in BGL, enable_if, and related changes from trunk: r67035, r57559, r72837, r73010, r73026, r72960, r73425, r73424, r73009, r73998, r73997, r73006, r73630, r73631, r73999, r73422, r73423, r73996, r71221
[SVN r74023]
2011-08-23 18:26:46 +00:00
Daniel James
5d72ae48da Iterator: Use boost::result_of to determine nested result type of function in transform_iterator. Fixes #1427.
[SVN r70715]
2011-03-29 21:31:29 +00:00
Daniel James
1ca1caddff Iterator: merge several changes from trunk.
- Update iterator_facade test for #1019
  (header change already merged).
- Category of each iterator is reduced to a known category before we try to
  find a minimum. Fixes #1517.
- `function_input_iterator` from Dean Michael Berris. Fixes #2893
- Fix typo in `boost/iterator.hpp`. Fixes #3434.
- Always include `add_reference` header in iterator adaptor header.

Did not merge changes for #1427.


[SVN r70709]
2011-03-29 21:17:11 +00:00
Daniel James
d45b57c33c Revert [68076], refs #1427.
Will try to fix this properly in 1.47.


[SVN r68524]
2011-01-28 08:40:25 +00:00
Marshall Clow
5a88e6f958 Merging fixes to release; Fixes #1427
[SVN r68076]
2011-01-13 01:25:09 +00:00
Marshall Clow
36565eae63 Merging fixes to release; fixes #2294 fixes #4918 fixes #3645 refs #2823 refs #1427 refs #2893
[SVN r67792]
2011-01-08 18:38:08 +00:00
Daniel James
de4ef14f9b Merge documentation fixes.
* Use `doc/src/*.css` instead of `doc/html/*.css`.
* Remove wiki and people directories.
* Some documentation fixes.
* Left out `minimal.css` changes and boostbook changes because of clashes.


[SVN r63347]
2010-06-26 12:30:09 +00:00
Jeremiah Willcock
f65f03afcc Merged r62593 from trunk
[SVN r62594]
2010-06-08 19:11:44 +00:00
Troy D. Straszheim
cfc04ce11e rm cmake from the release branch before it goes out broken. Policy dictates that you never commit to release, you commit to trunk and merge to release.
[SVN r56941]
2009-10-17 01:10:45 +00:00
Troy D. Straszheim
25d4d34ebe Add basic copyright/license to keep cmake out of the inspection report
[SVN r55095]
2009-07-22 21:51:01 +00:00
John Maddock
ea26e9f109 Merge PDF build changes from Trunk.
[SVN r51417]
2009-02-23 18:39:32 +00:00
Troy D. Straszheim
264c186eac merge of cmake build files from trunk per beman
[SVN r50756]
2009-01-24 18:57:20 +00:00
Nicola Musatti
2ece3ac5c2 CodeGear patch. Fixes #2344
[SVN r49321]
2008-10-13 19:27:26 +00:00
Dave Abrahams
78effefadb Merging SunPro 5.9 workaround from trunk
[SVN r47467]
2008-07-16 04:52:14 +00:00
Daniel James
37c46f7da5 Merged revisions 43206,43208-43213 via svnmerge from
https://svn.boost.org/svn/boost/trunk

........
  r43206 | danieljames | 2008-02-10 09:55:03 +0000 (Sun, 10 Feb 2008) | 1 line
  
  Fix some broken links.
........
  r43209 | danieljames | 2008-02-10 14:56:22 +0000 (Sun, 10 Feb 2008) | 1 line
  
  Link to people pages on the website, as they've been removed from the download.
........
  r43210 | danieljames | 2008-02-10 15:02:17 +0000 (Sun, 10 Feb 2008) | 1 line
  
  Point links to the pages that used to be in 'more' to the site.
........
  r43212 | danieljames | 2008-02-10 16:10:16 +0000 (Sun, 10 Feb 2008) | 1 line
  
  Fix links on the home page as well.
........
  r43213 | danieljames | 2008-02-10 16:21:22 +0000 (Sun, 10 Feb 2008) | 1 line
  
  Generated documentation which is no longer generated.
........


[SVN r43214]
2008-02-10 16:39:38 +00:00
Boris Gubenko
6d0f901b2e merge trunk version (changeset/42064) to release branch
[SVN r42129]
2007-12-17 18:43:36 +00:00
Beman Dawes
db0e0b7b91 Full merge from trunk at revision 41356 of entire boost-root tree.
[SVN r41370]
2007-11-25 18:38:02 +00:00
Beman Dawes
23d53055f9 Full merge from trunk at revision 41356 of entire boost-root tree.
[SVN r41369]
2007-11-25 18:07:19 +00:00
Beman Dawes
ff73538b5b Starting point for releases
[SVN r39706]
2007-10-05 14:25:06 +00:00
nobody
30685528c7 This commit was manufactured by cvs2svn to create tag
'Version_1_34_1'.

[SVN r38286]
2007-07-24 19:28:14 +00:00
Thomas Witt
c849f35965 Doc and build fixes by Dave Abrahams.
[SVN r38154]
2007-07-06 19:47:17 +00:00
Dave Abrahams
aa483f4961 Correct testing bugs:
either changing assert(...) or BOOST_ASSERT(...) to BOOST_TEST
    (in my code only)

    or adding "return boost::report_errors();" where it was clearly
    missing (and a pure bug, in anyone's code).

    or changing BOOST_TEST to BOOST_CHECK where the integer library
    was clearly using Boost.Test and not returning report_errors().


[SVN r37063]
2007-02-25 15:28:02 +00:00
Rene Rivera
93c010eb51 Remove obsolete Boost.Build v1 files.
[SVN r35880]
2006-11-06 17:10:46 +00:00
Thomas Witt
0dc017b1a8 Remove unfinished quickbook documentation from release.
[SVN r35678]
2006-10-20 19:05:37 +00:00
Thomas Witt
92c92bbbf8 Remove internal doc from release.
[SVN r35676]
2006-10-20 18:03:38 +00:00
Dave Abrahams
f51591cb04 Cleans up license/copyright warnings
[SVN r35406]
2006-09-29 01:59:59 +00:00
Dave Abrahams
624131ce46 merged from HEAD
[SVN r35238]
2006-09-21 00:52:02 +00:00
Dave Abrahams
47da2546f9 merged from HEAD
[SVN r35211]
2006-09-19 16:50:44 +00:00
Dave Abrahams
8a53abc1e8 merged from HEAD
[SVN r35152]
2006-09-18 02:38:38 +00:00
Dave Abrahams
b258a435cc Stop relying on new concept check facilities that aren't in 1.34.0
[SVN r35128]
2006-09-15 16:45:19 +00:00
Dave Abrahams
43e4f1a766 merged from HEAD
[SVN r35127]
2006-09-15 16:41:43 +00:00
Dave Abrahams
02d22c12ae fix for http://tinyurl.com/kbwzm
[SVN r35102]
2006-09-13 22:36:10 +00:00
Dave Abrahams
70ef2f0e81 fix for http://tinyurl.com/zuohe
[SVN r35101]
2006-09-13 22:24:14 +00:00
Dave Abrahams
b7283c93c6 merged from trunk
[SVN r35075]
2006-09-12 22:34:33 +00:00
Dave Abrahams
5184d64b80 Add missing license/copyright
[SVN r35070]
2006-09-11 22:27:29 +00:00
Dave Abrahams
f482354ffd merged from trunk
[SVN r33820]
2006-04-25 20:35:01 +00:00
Nicola Musatti
7a2b9d66a9 Borland workaround updated
[SVN r33719]
2006-04-17 14:23:24 +00:00
Dave Abrahams
d79112ee5a merged from trunk
[SVN r33713]
2006-04-16 18:03:52 +00:00
nobody
4a5e8f175a This commit was manufactured by cvs2svn to create branch 'RC_1_34_0'.
[SVN r33417]
2006-03-21 02:26:31 +00:00
5 changed files with 121 additions and 133 deletions

View File

@@ -106,7 +106,7 @@ The ``iterator_category`` member of ``iterator_facade`` is
.. parsed-literal::
*iterator-category*\ (CategoryOrTraversal, reference, value_type)
*iterator-category*\ (CategoryOrTraversal, value_type, reference)
where *iterator-category* is defined as follows:

View File

@@ -73,8 +73,15 @@ struct iterator_writability_disabled
// Convert an iterator_facade's traversal category, Value parameter,
// and ::reference type to an appropriate old-style category.
//
// Due to changeset 21683, this now never results in a category convertible
// to output_iterator_tag.
// If writability has been disabled per the above metafunction, the
// result will not be convertible to output_iterator_tag.
//
// Otherwise, if Traversal == single_pass_traversal_tag, the following
// conditions will result in a tag that is convertible both to
// input_iterator_tag and output_iterator_tag:
//
// 1. Reference is a reference to non-const
// 2. Reference is not a reference and is convertible to Value
//
template <class Traversal, class ValueParam, class Reference>
struct iterator_facade_default_category

View File

@@ -1,88 +0,0 @@
// (C) Copyright David Abrahams 2002.
// (C) Copyright Jeremy Siek 2002.
// (C) Copyright Thomas Witt 2002.
// (C) Copyright Jeffrey Lee Hellrung, Jr. 2012.
// 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)
#ifndef BOOST_OPERATOR_BRACKETS_DISPATCH_07102012JLH_HPP
#define BOOST_OPERATOR_BRACKETS_DISPATCH_07102012JLH_HPP
#include <boost/iterator/detail/facade_iterator_category.hpp>
#include <boost/type_traits/is_pod.hpp>
#include <boost/type_traits/remove_const.hpp>
#include <boost/mpl/if.hpp>
namespace boost { namespace detail {
// operator[] must return a proxy in case iterator destruction invalidates
// referents.
// To see why, consider the following implementation of operator[]:
// reference operator[](difference_type n) const
// { return *(*this + n); }
// The problem here is that operator[] would return a reference created from
// a temporary iterator.
template <class Value>
struct operator_brackets_value
{
typedef Value result_type;
template <class Iterator>
static result_type apply(Iterator const & i)
{ return *i; }
};
template <class Iterator, class Reference>
struct operator_brackets_const_proxy
{
class result_type
{
Iterator const m_i;
explicit result_type(Iterator const & i) : m_i(i) { }
friend struct operator_brackets_const_proxy;
void operator=(result_type&);
public:
operator Reference() const { return *m_i; }
};
static result_type apply(Iterator const & i)
{ return result_type(i); }
};
template <class Iterator, class Reference>
struct operator_brackets_proxy
{
class result_type
{
Iterator const m_i;
explicit result_type(Iterator const & i) : m_i(i) { }
friend struct operator_brackets_proxy;
void operator=(result_type&);
public:
operator Reference() const { return *m_i; }
operator_brackets_proxy const & operator=(
typename Iterator::value_type const & x) const
{ *m_i = x; return *this; }
};
static result_type apply(Iterator const & i)
{ return result_type(i); }
};
template <class Iterator, class ValueType, class Reference>
struct operator_brackets_dispatch
{
typedef typename mpl::if_c<
iterator_writability_disabled<ValueType,Reference>::value,
typename mpl::if_c<
boost::is_POD<ValueType>::value,
operator_brackets_value<typename boost::remove_const<ValueType>::type>,
operator_brackets_const_proxy<Iterator,Reference>
>::type,
operator_brackets_proxy<Iterator,Reference>
>::type type;
};
} } // namespace detail / namespace boost
#endif // #ifndef BOOST_OPERATOR_BRACKETS_DISPATCH_07102012JLH_HPP

View File

@@ -1,7 +1,6 @@
// (C) Copyright David Abrahams 2002.
// (C) Copyright Jeremy Siek 2002.
// (C) Copyright Thomas Witt 2002.
// (C) copyright Jeffrey Lee Hellrung, Jr. 2012.
// 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)
@@ -14,7 +13,6 @@
#include <boost/iterator/detail/facade_iterator_category.hpp>
#include <boost/iterator/detail/enable_if.hpp>
#include <boost/iterator/detail/operator_brackets_dispatch.hpp>
#include <boost/static_assert.hpp>
#include <boost/utility/addressof.hpp>
@@ -77,7 +75,7 @@ namespace boost
, Return
, int[3]
>::type type;
};
};
#else
: ::boost::iterators::enable_if<
mpl::or_<
@@ -87,7 +85,7 @@ namespace boost
, Return
>
{};
#endif
#endif
//
// Generates associated types for an iterator_facade with the
@@ -96,7 +94,7 @@ namespace boost
template <
class ValueParam
, class CategoryOrTraversal
, class Reference
, class Reference
, class Difference
>
struct iterator_facade_types
@@ -104,16 +102,16 @@ namespace boost
typedef typename facade_iterator_category<
CategoryOrTraversal, ValueParam, Reference
>::type iterator_category;
typedef typename remove_const<ValueParam>::type value_type;
// Not the real associated pointer type
typedef typename mpl::eval_if<
boost::detail::iterator_writability_disabled<ValueParam,Reference>
, add_pointer<const value_type>
, add_pointer<value_type>
>::type pointer;
# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
&& (BOOST_WORKAROUND(_STLPORT_VERSION, BOOST_TESTED_AT(0x452)) \
|| BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, BOOST_TESTED_AT(310))) \
@@ -159,7 +157,7 @@ namespace boost
private:
mutable value_type stored_value;
};
//
// In general, we can't determine that such an iterator isn't
// writable -- we also need to store a copy of the old iterator so
@@ -211,7 +209,7 @@ namespace boost
{
return stored_iterator;
}
private:
mutable value_type stored_value;
Iterator stored_iterator;
@@ -223,7 +221,7 @@ namespace boost
struct is_non_proxy_reference_impl
{
static Reference r;
template <class R>
static typename mpl::if_<
is_convertible<
@@ -233,17 +231,17 @@ namespace boost
, char[1]
, char[2]
>::type& helper(R const&);
BOOST_STATIC_CONSTANT(bool, value = sizeof(helper(r)) == 1);
};
template <class Reference, class Value>
struct is_non_proxy_reference
: mpl::bool_<
is_non_proxy_reference_impl<Reference, Value>::value
>
{};
# else
# else
template <class Reference, class Value>
struct is_non_proxy_reference
: is_convertible<
@@ -252,8 +250,8 @@ namespace boost
, Value const volatile*
>
{};
# endif
# endif
// A metafunction to choose the result type of postfix ++
//
// Because the C++98 input iterator requirements say that *r++ has
@@ -275,7 +273,7 @@ namespace boost
mpl::and_<
// A proxy is only needed for readable iterators
is_convertible<Reference,Value const&>
// No multipass iterator can have values that disappear
// before positions can be re-visited
, mpl::not_<
@@ -298,7 +296,7 @@ namespace boost
// standard's requirements. If *i is not a reference type, we must still
// produce an lvalue to which a pointer can be formed. We do that by
// returning a proxy object containing an instance of the reference object.
template <class Reference>
template <class Reference, class Pointer>
struct operator_arrow_dispatch // proxy references
{
struct proxy
@@ -317,10 +315,10 @@ namespace boost
}
};
template <class T>
struct operator_arrow_dispatch<T&> // "real" references
template <class T, class Pointer>
struct operator_arrow_dispatch<T&, Pointer> // "real" references
{
typedef T* result_type;
typedef Pointer result_type;
static result_type apply(T& x)
{
return boost::addressof(x);
@@ -330,12 +328,79 @@ namespace boost
# if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
// Deal with ETI
template<>
struct operator_arrow_dispatch<int>
struct operator_arrow_dispatch<int, int>
{
typedef int result_type;
};
# endif
// A proxy return type for operator[], needed to deal with
// iterators that may invalidate referents upon destruction.
// Consider the temporary iterator in *(a + n)
template <class Iterator>
class operator_brackets_proxy
{
// Iterator is actually an iterator_facade, so we do not have to
// go through iterator_traits to access the traits.
typedef typename Iterator::reference reference;
typedef typename Iterator::value_type value_type;
public:
operator_brackets_proxy(Iterator const& iter)
: m_iter(iter)
{}
operator reference() const
{
return *m_iter;
}
operator_brackets_proxy& operator=(value_type const& val)
{
*m_iter = val;
return *this;
}
private:
Iterator m_iter;
};
// A metafunction that determines whether operator[] must return a
// proxy, or whether it can simply return a copy of the value_type.
template <class ValueType, class Reference>
struct use_operator_brackets_proxy
: mpl::not_<
mpl::and_<
// Really we want an is_copy_constructible trait here,
// but is_POD will have to suffice in the meantime.
boost::is_POD<ValueType>
, iterator_writability_disabled<ValueType,Reference>
>
>
{};
template <class Iterator, class Value, class Reference>
struct operator_brackets_result
{
typedef typename mpl::if_<
use_operator_brackets_proxy<Value,Reference>
, operator_brackets_proxy<Iterator>
, Value
>::type type;
};
template <class Iterator>
operator_brackets_proxy<Iterator> make_operator_brackets_result(Iterator const& iter, mpl::true_)
{
return operator_brackets_proxy<Iterator>(iter);
}
template <class Iterator>
typename Iterator::value_type make_operator_brackets_result(Iterator const& iter, mpl::false_)
{
return *iter;
}
struct choose_difference_type
{
template <class I1, class I2>
@@ -349,13 +414,13 @@ namespace boost
, typename I1::difference_type
, typename I2::difference_type
>
# else
# else
mpl::eval_if<
is_convertible<I2,I1>
, iterator_difference<I1>
, iterator_difference<I2>
>
# endif
# endif
{};
};
@@ -373,7 +438,7 @@ namespace boost
operator op( \
iterator_facade<Derived1, V1, TC1, Reference1, Difference1> const& lhs \
, iterator_facade<Derived2, V2, TC2, Reference2, Difference2> const& rhs)
# else
# else
# define BOOST_ITERATOR_FACADE_INTEROP_HEAD(prefix, op, result_type) \
template < \
class Derived1, class V1, class TC1, class Reference1, class Difference1 \
@@ -386,7 +451,7 @@ namespace boost
operator op( \
iterator_facade<Derived1, V1, TC1, Reference1, Difference1> const& lhs \
, iterator_facade<Derived2, V2, TC2, Reference2, Difference2> const& rhs)
# endif
# endif
# define BOOST_ITERATOR_FACADE_PLUS_HEAD(prefix,args) \
template <class Derived, class V, class TC, class R, class D> \
@@ -403,12 +468,12 @@ namespace boost
//
class iterator_core_access
{
# if defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
# if defined(BOOST_NO_MEMBER_TEMPLATE_FRIENDS)
// Tasteless as this may seem, making all members public allows member templates
// to work in the absence of member template friends.
public:
# else
template <class I, class V, class TC, class R, class D> friend class iterator_facade;
# define BOOST_ITERATOR_FACADE_RELATION(op) \
@@ -551,15 +616,14 @@ namespace boost
> associated_types;
typedef boost::detail::operator_arrow_dispatch<
Reference> operator_arrow_dispatch_;
typedef typename boost::detail::operator_brackets_dispatch<
Derived, Value, Reference>::type operator_brackets_dispatch_;
Reference
, typename associated_types::pointer
> operator_arrow_dispatch_;
protected:
// For use by derived classes
typedef iterator_facade<Derived,Value,CategoryOrTraversal,Reference,Difference> iterator_facade_;
public:
typedef typename associated_types::value_type value_type;
@@ -579,11 +643,16 @@ namespace boost
{
return operator_arrow_dispatch_::apply(*this->derived());
}
typename operator_brackets_dispatch_::result_type
typename boost::detail::operator_brackets_result<Derived,Value,reference>::type
operator[](difference_type n) const
{
return operator_brackets_dispatch_::apply(this->derived() + n);
typedef boost::detail::use_operator_brackets_proxy<Value,Reference> use_proxy;
return boost::detail::make_operator_brackets_result<Derived>(
this->derived() + n
, use_proxy()
);
}
Derived& operator++()
@@ -602,7 +671,7 @@ namespace boost
return tmp;
}
# endif
Derived& operator--()
{
iterator_core_access::decrement(this->derived());
@@ -657,14 +726,14 @@ namespace boost
{
typename boost::detail::postfix_increment_result<I,V,R,TC>::type
tmp(*static_cast<I*>(&i));
++i;
return tmp;
}
# endif
# endif
//
// Comparison operator implementation. The library supplied operators
// enables the user to provide fully interoperable constant/mutable

View File

@@ -82,7 +82,7 @@ int main()
typedef boost::indirect_iterator<char**, int, std::random_access_iterator_tag, long&, short> Iter;
STATIC_ASSERT_SAME(Iter::value_type, int);
STATIC_ASSERT_SAME(Iter::reference, long&);
STATIC_ASSERT_SAME(Iter::pointer, long*);
STATIC_ASSERT_SAME(Iter::pointer, int*);
STATIC_ASSERT_SAME(Iter::difference_type, short);
}
return 0;