copy/copy_backward/fill/fill_n/equal rework
François Dumont
frs.dumont@gmail.com
Fri Sep 27 21:14:00 GMT 2019
On 9/27/19 2:28 PM, Jonathan Wakely wrote:
> On 09/09/19 20:34 +0200, François Dumont wrote:
>> Hi
>>
>> Â Â Â This patch improves stl_algobase.h
>> copy/copy_backward/fill/fill_n/equal implementations. The
>> improvements are:
>>
>> - activation of algo specialization for __gnu_debug::_Safe_iterator
>> (w/o _GLIBCXX_DEBUG mode)
>>
>> - activation of algo specialization for _Deque_iterator even if mixed
>> with another kind of iterator.
>>
>> - activation of algo specializations __copy_move_a2 for something
>> else than pointers. For example this code:
>>
>> std::vector<char> v { 'a', 'b', .... };
>>
>> ostreambuf_iterator out(std::cout);
>>
>> std::copy(v.begin(), v.end(), out);
>>
>> is not calling the specialization __copy_move_a2(const char*, const
>> char*, ostreambuf_iterator<>);
>>
>> It also fix a _GLIBCXX_DEBUG issue where the __niter_base
>> specialization was wrongly removing the _Safe_iterator<> layer. The
>> testsuite/25_algorithms/copy/debug/1_neg.cc test case was failing on
>> a debug assertion because _after_ the copy we were trying to
>> increment the vector iterator after past-the-end. Of course the
>> problem is the _after_, Debug mode should detect this _before_ it
>> takes place which it does now.
>>
>> Note that std::fill_n is now making use of std::fill for some
>> optimizations dealing with random access iterators.
>>
>> Performances are very good:
>
> This looks good, but I'm unable to apply the patch:
>
>
> error: patch failed: libstdc++-v3/include/bits/deque.tcc:967
> error: libstdc++-v3/include/bits/deque.tcc: patch does not apply
> error: patch failed: libstdc++-v3/include/bits/stl_algobase.h:499
> error: libstdc++-v3/include/bits/stl_algobase.h: patch does not apply
>
> Could you regenerate the patch (against a clean master tree) and
> resend? Thanks.
>
Here it is, thanks.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: algos.patch
Type: text/x-patch
Size: 88672 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/libstdc++/attachments/20190927/77ba137c/attachment.bin>
More information about the Libstdc++
mailing list