Skip to content

Commit e02d16f

Browse files
committed
Add missing header
1 parent 40174de commit e02d16f

3 files changed

Lines changed: 26 additions & 21 deletions

File tree

include/boost/container/experimental/segmented_copy.hpp

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include <boost/container/detail/config_begin.hpp>
2222
#include <boost/container/detail/workaround.hpp>
2323
#include <boost/container/experimental/segmented_iterator_traits.hpp>
24+
#include <boost/container/detail/iterator.hpp>
2425

2526
namespace boost {
2627
namespace container {
@@ -68,39 +69,41 @@ OutIter segmented_copy_dispatch
6869

6970
#endif //BOOST_CONTAINER_SEGMENTED_LOOP_UNROLLING
7071

72+
template <class InIter, class Sent, class OutIter, class Tag, class Cat>
73+
typename algo_enable_if_c<
74+
!Tag::value || is_sentinel<Sent, InIter>::value, OutIter>::type
75+
segmented_copy_dispatch(InIter first, Sent last, OutIter result, Tag, Cat)
76+
{
77+
for(; first != last; ++first, ++result)
78+
*result = *first;
79+
return result;
80+
}
81+
7182
template <class SegIter, class OutIter, class Cat>
7283
OutIter segmented_copy_dispatch(SegIter first, SegIter last, OutIter result, segmented_iterator_tag, Cat)
7384
{
7485
typedef segmented_iterator_traits<SegIter> traits;
75-
typedef typename traits::local_iterator local_iterator;
76-
typedef typename traits::segment_iterator segment_iterator;
86+
typedef typename traits::local_iterator local_iterator;
87+
typedef typename traits::segment_iterator segment_iterator;
88+
typedef typename segmented_iterator_traits<local_iterator>::is_segmented_iterator is_local_seg_t;
89+
typedef typename iterator_traits<local_iterator>::iterator_category local_cat_t;
7790

7891
segment_iterator sfirst = traits::segment(first);
7992
segment_iterator slast = traits::segment(last);
8093

8194
if(sfirst == slast) {
82-
return (segmented_copy)(traits::local(first), traits::local(last), result);
95+
return (segmented_copy_dispatch)(traits::local(first), traits::local(last), result, is_local_seg_t(), local_cat_t());
8396
}
8497
else {
85-
result = (segmented_copy)(traits::local(first), traits::end(sfirst), result);
98+
result = (segmented_copy_dispatch)(traits::local(first), traits::end(sfirst), result, is_local_seg_t(), local_cat_t());
8699

87100
for(++sfirst; sfirst != slast; ++sfirst)
88-
result = (segmented_copy)(traits::begin(sfirst), traits::end(sfirst), result);
101+
result = (segmented_copy_dispatch)(traits::begin(sfirst), traits::end(sfirst), result, is_local_seg_t(), local_cat_t());
89102

90-
return (segmented_copy)(traits::begin(sfirst), traits::local(last), result);
103+
return (segmented_copy_dispatch)(traits::begin(sfirst), traits::local(last), result, is_local_seg_t(), local_cat_t());
91104
}
92105
}
93106

94-
template <class InIter, class Sent, class OutIter, class Tag, class Cat>
95-
typename algo_enable_if_c<
96-
!Tag::value || is_sentinel<Sent, InIter>::value, OutIter>::type
97-
segmented_copy_dispatch(InIter first, Sent last, OutIter result, Tag, Cat)
98-
{
99-
for(; first != last; ++first, ++result)
100-
*result = *first;
101-
return result;
102-
}
103-
104107
} // namespace detail_algo
105108

106109
//! Copies elements from [first, last) to the range beginning at \c result.

include/boost/container/experimental/segmented_copy_if.hpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include <boost/container/detail/config_begin.hpp>
2222
#include <boost/container/detail/workaround.hpp>
2323
#include <boost/container/experimental/segmented_iterator_traits.hpp>
24+
#include <boost/container/detail/iterator.hpp>
2425

2526
namespace boost {
2627
namespace container {
@@ -90,20 +91,21 @@ OutIter segmented_copy_if_dispatch
9091
typedef typename traits::local_iterator local_iterator;
9192
typedef typename traits::segment_iterator segment_iterator;
9293
typedef typename segmented_iterator_traits<local_iterator>::is_segmented_iterator is_local_seg_t;
94+
typedef typename iterator_traits<local_iterator>::iterator_category local_cat_t;
9395

9496
segment_iterator sfirst = traits::segment(first);
9597
segment_iterator slast = traits::segment(last);
9698

9799
if(sfirst == slast) {
98-
return (segmented_copy_if_dispatch)(traits::local(first), traits::local(last), result, pred, is_local_seg_t(), Cat());
100+
return (segmented_copy_if_dispatch)(traits::local(first), traits::local(last), result, pred, is_local_seg_t(), local_cat_t());
99101
}
100102
else {
101-
result = (segmented_copy_if_dispatch)(traits::local(first), traits::end(sfirst), result, pred, is_local_seg_t(), Cat());
103+
result = (segmented_copy_if_dispatch)(traits::local(first), traits::end(sfirst), result, pred, is_local_seg_t(), local_cat_t());
102104

103105
for(++sfirst; sfirst != slast; ++sfirst)
104-
result = (segmented_copy_if_dispatch)(traits::begin(sfirst), traits::end(sfirst), result, pred, is_local_seg_t(), Cat());
106+
result = (segmented_copy_if_dispatch)(traits::begin(sfirst), traits::end(sfirst), result, pred, is_local_seg_t(), local_cat_t());
105107

106-
return (segmented_copy_if_dispatch)(traits::begin(sfirst), traits::local(last), result, pred, is_local_seg_t(), Cat());
108+
return (segmented_copy_if_dispatch)(traits::begin(sfirst), traits::local(last), result, pred, is_local_seg_t(), local_cat_t());
107109
}
108110
}
109111

include/boost/container/experimental/segmented_copy_n.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@
2121
#include <boost/container/detail/config_begin.hpp>
2222
#include <boost/container/detail/workaround.hpp>
2323
#include <boost/container/experimental/segmented_iterator_traits.hpp>
24-
#include <boost/container/detail/iterators.hpp>
2524
#include <boost/container/detail/std_fwd.hpp>
25+
#include <boost/container/detail/iterator.hpp>
2626

2727
namespace boost {
2828
namespace container {

0 commit comments

Comments
 (0)