libstdc++: Specialize copy/copy_n for istreambuf_iterator and deque iterators
authorFrançois Dumont <fdumont@gcc.gnu.org>
Wed, 22 Jan 2020 17:21:28 +0000 (18:21 +0100)
committerFrançois Dumont <fdumont@gcc.gnu.org>
Thu, 4 Jun 2020 20:27:47 +0000 (22:27 +0200)
commit4e05c918d28e3fa66f5baaf556f6886447c68c9a
tree43106801a994eaaf30b9ce5134b76ac524143f7d
parent8e788ac671626344fa79390808c4d02302387d0f
libstdc++: Specialize copy/copy_n for istreambuf_iterator and deque iterators

Add __copy_n_a overloads for std::deque iterators to replace with C memmove
when possible. Expose std::copy_n implementation details in pre-C++11 modes
and use it for std::copy overloads.

libstdc++-v3/ChangeLog

* include/bits/stl_algo.h (__copy_n_a): Move to ...
* include/bits/stl_algobase.h (__copy_n_a): ...here. Add __strict
parameter.
(__copy_n_a(istreambuf_iterator<>, _Size, _Deque_iterator<>, bool)):
Declare.
(__niter_base(const _Safe_iterator<_Ite, _Seq,
random_access_iterator_tag>&)): Declare.
(__copy_move_a2(istreambuf_iterator<>, istreambuf_iterator<>,
_Deque_iterator<>)): Declare.
* include/bits/deque.tcc
(__copy_move_a2(istreambuf_iterator<>, istreambuf_iterator<>,
_Deque_iterator<>)): New.
(__copy_n_a(istreambuf_iterator<>, _Size, _Deque_iterator<>, bool)):
New.
* include/bits/streambuf_iterator.h
(__copy_n_a(istreambuf_iterator<>, _Size, _CharT*, bool)): Adapt.
* include/debug/safe_iterator.tcc (__niter_base): New.
* testsuite/25_algorithms/copy/streambuf_iterators/char/4.cc
(test03): New.
* testsuite/25_algorithms/copy/streambuf_iterators/char/debug/deque_neg.cc:
New test.
* testsuite/25_algorithms/copy_n/debug/istreambuf_ite_deque_neg.cc:
New test.
* testsuite/25_algorithms/copy_n/istreambuf_iterator/2.cc: New test.
* testsuite/25_algorithms/copy_n/istreambuf_iterator/deque.cc:
New test.
libstdc++-v3/include/bits/deque.tcc
libstdc++-v3/include/bits/stl_algo.h
libstdc++-v3/include/bits/stl_algobase.h
libstdc++-v3/include/bits/streambuf_iterator.h
libstdc++-v3/include/debug/safe_iterator.tcc
libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/4.cc
libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/debug/deque_neg.cc [new file with mode: 0644]
libstdc++-v3/testsuite/25_algorithms/copy_n/debug/istreambuf_ite_deque_neg.cc [new file with mode: 0644]
libstdc++-v3/testsuite/25_algorithms/copy_n/istreambuf_iterator/2.cc [new file with mode: 0644]
libstdc++-v3/testsuite/25_algorithms/copy_n/istreambuf_iterator/deque.cc [new file with mode: 0644]