Removed access category tags from iterator library, made corresponding

changes elsewhere.

boost/iterator and libs/iterator/test were updated from
branch "simplify"


[SVN r20905]
This commit is contained in:
Dave Abrahams 2003-11-22 01:18:37 +00:00
parent 3289929679
commit 9542f4546b
6 changed files with 49 additions and 46 deletions

View File

@ -163,7 +163,7 @@ public:
allocate_space();
std::copy(rhs.begin(),rhs.end(),this->begin());
}
// Since assignment is a deep copy, multi_array_ref
// contains all the necessary code.
template <typename ConstMultiArray>

View File

@ -78,8 +78,7 @@ class sub_array;
template <typename T, std::size_t NumDims, typename TPtr = const T*>
class const_sub_array;
template <typename T, typename TPtr, std::size_t NumDims,
typename AccessCategory, typename Reference>
template <typename T, typename TPtr, std::size_t NumDims, typename Reference>
class array_iterator;
template <typename T, std::size_t NumDims, typename TPtr = const T*>
@ -244,20 +243,8 @@ public:
//
// iterator support
//
typedef typename
mpl::if_c<(NumDims == 1),
writable_lvalue_iterator_tag,
readable_writable_iterator_tag>::type iterator_tag;
typedef typename
mpl::if_c<(NumDims == 1),
readable_lvalue_iterator_tag,
readable_iterator_tag>::type const_iterator_tag;
typedef array_iterator<T,T*,NumDims,iterator_tag,reference> iterator;
typedef array_iterator<T,
T const*,NumDims,const_iterator_tag,const_reference> const_iterator;
typedef array_iterator<T,T*,NumDims,reference> iterator;
typedef array_iterator<T,T const*,NumDims,const_reference> const_iterator;
typedef ::boost::reverse_iterator<iterator> reverse_iterator;
typedef ::boost::reverse_iterator<const_iterator> const_reverse_iterator;

View File

@ -19,6 +19,7 @@
//
#include "boost/concept_check.hpp"
#include "boost/iterator/iterator_concepts.hpp"
namespace boost {
namespace detail {
@ -99,6 +100,11 @@ namespace multi_array {
typedef typename Array::extent_gen extent_gen;
typedef typename Array::extent_range extent_range;
BOOST_CLASS_REQUIRE(iterator, boost_concepts, ForwardTraversalConcept);
BOOST_CLASS_REQUIRE(iterator, boost_concepts, ReadableIteratorConcept);
BOOST_CLASS_REQUIRE(const_iterator, boost_concepts, ForwardTraversalConcept);
BOOST_CLASS_REQUIRE(const_iterator, boost_concepts, ReadableIteratorConcept);
Array a;
size_type st;
const size_type* stp;
@ -180,6 +186,12 @@ namespace multi_array {
typedef typename Array::extent_gen extent_gen;
typedef typename Array::extent_range extent_range;
BOOST_CLASS_REQUIRE(iterator, boost_concepts, ForwardTraversalConcept);
BOOST_CLASS_REQUIRE(iterator, boost_concepts, ReadableIteratorConcept);
BOOST_CLASS_REQUIRE(iterator, boost_concepts, WritableIteratorConcept);
BOOST_CLASS_REQUIRE(const_iterator, boost_concepts, ForwardTraversalConcept);
BOOST_CLASS_REQUIRE(const_iterator, boost_concepts, ReadableIteratorConcept);
Array a;
size_type st;
const size_type* stp;

View File

@ -43,28 +43,25 @@ struct operator_arrow_proxy
};
template <typename T, typename TPtr, std::size_t NumDims,
typename AccessCategory, typename Reference>
template <typename T, typename TPtr, std::size_t NumDims, typename Reference>
class array_iterator :
public iterator_facade<
array_iterator<T,TPtr,NumDims,AccessCategory,Reference>,
array_iterator<T,TPtr,NumDims,Reference>,
typename value_accessor_generator<T,NumDims>::type::value_type,
AccessCategory,
::boost::random_access_traversal_tag,
boost::random_access_traversal_tag,
Reference
>,
private value_accessor_generator<T,NumDims>::type
{
friend class iterator_core_access;
template <typename TT, typename TP, std::size_t N, typename AC, typename R>
template <typename TT, typename TP, std::size_t N, typename R>
friend class array_iterator;
typedef typename value_accessor_generator<T,NumDims>::type access_t;
typedef iterator_facade<
array_iterator<T,TPtr,NumDims,AccessCategory,Reference>,
array_iterator<T,TPtr,NumDims,Reference>,
typename access_t::value_type,
AccessCategory,
::boost::random_access_traversal_tag,
Reference
> facade_type;
@ -93,9 +90,11 @@ public:
idx_(idx), base_(base), extents_(extents),
strides_(strides), index_base_(index_base) { }
template <typename OPtr, typename Cat, typename ORef>
array_iterator(const
array_iterator<T,OPtr,NumDims,Cat,ORef>& rhs)
template <typename OPtr, typename ORef>
array_iterator(
const array_iterator<T,OPtr,NumDims,ORef>& rhs
, typename boost::enable_if_convertible<OPtr,TPtr>::type* = 0
)
: idx_(rhs.idx_), base_(rhs.base_), extents_(rhs.extents_),
strides_(rhs.strides_), index_base_(rhs.index_base_) { }

View File

@ -71,6 +71,9 @@ public:
// make const_multi_array_ref a friend of itself
template <typename,std::size_t,typename>
friend class const_multi_array_ref;
// template <typename From, typename To> // needed for enable_if_convertible tests
// friend class boost::detail::is_convertible_basic_impl;
#endif
template <typename OPtr>
@ -322,9 +325,10 @@ public:
void set_base_ptr(TPtr new_base) { base_ = new_base; }
template <typename OPtr>
const_multi_array_ref(const detail::multi_array::
const_sub_array<T,NumDims,OPtr>& rhs)
: base_(rhs.origin()),
const_multi_array_ref(
const detail::multi_array::const_sub_array<T,NumDims,OPtr>& rhs
)
: base_(0), // playing it "safe"; so we learn of errors
storage_(c_storage_order()),
origin_offset_(0), directional_offset_(0),
num_elements_(rhs.num_elements())
@ -395,7 +399,6 @@ private:
}
};
template <typename T, std::size_t NumDims>
class multi_array_ref :
public const_multi_array_ref<T,NumDims,T*>

View File

@ -9,20 +9,7 @@ subproject libs/multi_array/test ;
import testing ;
test-suite multi_array
: [ run constructors.cpp <lib>../../test/build/boost_test_exec_monitor ]
[ run access.cpp <lib>../../test/build/boost_test_exec_monitor ]
[ run compare.cpp <lib>../../test/build/boost_test_exec_monitor ]
[ run iterators.cpp <lib>../../test/build/boost_test_exec_monitor ]
[ run slice.cpp <lib>../../test/build/boost_test_exec_monitor ]
[ run assign.cpp <lib>../../test/build/boost_test_exec_monitor ]
[ run index_bases.cpp <lib>../../test/build/boost_test_exec_monitor ]
[ run storage_order.cpp <lib>../../test/build/boost_test_exec_monitor ]
[ run reshape.cpp <lib>../../test/build/boost_test_exec_monitor ]
[ run range1.cpp <lib>../../test/build/boost_test_exec_monitor ]
[ run idxgen1.cpp <lib>../../test/build/boost_test_exec_monitor ]
[ run stl_interaction.cpp <lib>../../test/build/boost_test_exec_monitor ]
[ run resize.cpp <lib>../../test/build/boost_test_exec_monitor ]
[ compile concept_checks.cpp ]
:
[ compile-fail fail_cbracket.cpp ]
[ compile-fail fail_cdata.cpp ]
[ compile-fail fail_citerator.cpp ]
@ -45,4 +32,19 @@ test-suite multi_array
[ compile-fail fail_ref_cview.cpp ]
[ compile-fail fail_ref_cview2.cpp ]
[ compile-fail fail_ref_cview3.cpp ]
[ run constructors.cpp <lib>../../test/build/boost_test_exec_monitor ]
[ run access.cpp <lib>../../test/build/boost_test_exec_monitor ]
[ run compare.cpp <lib>../../test/build/boost_test_exec_monitor ]
[ run iterators.cpp <lib>../../test/build/boost_test_exec_monitor ]
[ run slice.cpp <lib>../../test/build/boost_test_exec_monitor ]
[ run assign.cpp <lib>../../test/build/boost_test_exec_monitor ]
[ run index_bases.cpp <lib>../../test/build/boost_test_exec_monitor ]
[ run storage_order.cpp <lib>../../test/build/boost_test_exec_monitor ]
[ run reshape.cpp <lib>../../test/build/boost_test_exec_monitor ]
[ run range1.cpp <lib>../../test/build/boost_test_exec_monitor ]
[ run idxgen1.cpp <lib>../../test/build/boost_test_exec_monitor ]
[ run stl_interaction.cpp <lib>../../test/build/boost_test_exec_monitor ]
[ run resize.cpp <lib>../../test/build/boost_test_exec_monitor ]
[ compile concept_checks.cpp ]
;