Deque::fill
chris jefferson
caj@cs.york.ac.uk
Mon Dec 12 14:55:00 GMT 2005
Paolo Carlini wrote:
>
> + template<typename _Tp, typename _Ref, typename _Ptr>
> + struct _Deque_iterator;
> +
> + template<typename _Tp, typename _Ref, typename _Ptr>
> + void
> + fill(const _Deque_iterator<_Tp, _Ref, _Ptr>& __first,
> + const _Deque_iterator<_Tp, _Ref, _Ptr>& __last, const _Tp& __value)
> + {
> + typedef typename _Deque_iterator<_Tp, _Ref, _Ptr>::_Self _Self;
> +
> + for (typename _Self::_Map_pointer __node = __first._M_node + 1;
> + __node < __last._M_node; ++__node)
> + std::fill(*__node, *__node + _Self::_S_buffer_size(), __value);
> +
>
On a similar note to some simplifications in vector, would it be better
to "admit" that the size of a buffer is a compile-time constant, and
make it a static const, rather than a function call?
I mainly ask as I had a look a while ago at simplifying deque in the
case that the objects are big enough it "degrades" into a vector of
pointers to pointers. While the best simplifications would require
ABI-breaking, it's possible to overload things like operator++,
operator+, etc on _Deque_iterators with simpler versions which the
compiler doesn't seem capable of deducing by itself.
Chris
More information about the Libstdc++
mailing list