mirror of
https://github.com/boostorg/multi_array.git
synced 2025-05-11 21:33:52 +00:00
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:
parent
3289929679
commit
9542f4546b
@ -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>
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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_) { }
|
||||
|
||||
|
@ -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*>
|
||||
|
30
test/Jamfile
30
test/Jamfile
@ -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 ]
|
||||
;
|
||||
|
Loading…
x
Reference in New Issue
Block a user