13#ifndef CXXUTILS_COPY_BOUNDED_H
14#define CXXUTILS_COPY_BOUNDED_H
27template <
class InputIterator,
class OutputIterator,
28 class InputTag,
class OutputTag>
32 OutputIterator bego, OutputIterator endo,
36 while (begi != endi && bego != endo) {
48template <
class InputIterator,
class OutputIterator>
52 OutputIterator bego, OutputIterator endo,
53 const std::random_access_iterator_tag&,
54 const std::random_access_iterator_tag&)
56 size_t n = std::min (endi-begi, endo-bego);
57 return std::copy (begi, begi+n, bego);
75template <std::input_iterator InputIterator,
76 std::output_iterator<typename std::iterator_traits<InputIterator>::value_type> OutputIterator>
80 OutputIterator bego, OutputIterator endo)
83 (begi, endi, bego, endo,
84 typename std::iterator_traits<InputIterator>::iterator_category(),
85 typename std::iterator_traits<OutputIterator>::iterator_category());
96template <
class InputRange,
class OutputRange>
100 ->
decltype (std::begin(output))
103 (std::begin(input), std::end(input),
104 std::begin(output), std::end(output));
118template <
class InputRange,
class OutputRange>
122 ->
decltype (std::begin(output))
125 (std::begin(input), std::end(input),
126 std::begin(output), std::end(output));
OutputIterator copy_bounded(InputIterator begi, InputIterator endi, OutputIterator bego, OutputIterator endo)
Copy a range with bounds restriction.
OutputIterator copy_bounded1(InputIterator begi, InputIterator endi, OutputIterator bego, OutputIterator endo, const InputTag &, const OutputTag &)
Copy a range with bounds restriction; generic version.