forked from OSchip/llvm-project
parent
498687bff2
commit
c862ea27b7
|
@ -136,90 +136,6 @@ struct __serial_move_merge
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename _RandomAccessIterator1, typename _OutputIterator>
|
|
||||||
void
|
|
||||||
__init_buf(_RandomAccessIterator1 __xs, _RandomAccessIterator1 __xe, _OutputIterator __zs, bool __bMove)
|
|
||||||
{
|
|
||||||
const _OutputIterator __ze = __zs + (__xe - __xs);
|
|
||||||
typedef typename std::iterator_traits<_OutputIterator>::value_type _ValueType;
|
|
||||||
if (__bMove)
|
|
||||||
{
|
|
||||||
// Initialize the temporary buffer and move keys to it.
|
|
||||||
for (; __zs != __ze; ++__xs, ++__zs)
|
|
||||||
new (&*__zs) _ValueType(std::move(*__xs));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Initialize the temporary buffer
|
|
||||||
for (; __zs != __ze; ++__zs)
|
|
||||||
new (&*__zs) _ValueType;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO is this actually used anywhere?
|
|
||||||
template <typename _Buf>
|
|
||||||
class __stack
|
|
||||||
{
|
|
||||||
typedef typename std::iterator_traits<decltype(_Buf(0).get())>::value_type _ValueType;
|
|
||||||
typedef typename std::iterator_traits<_ValueType*>::difference_type _DifferenceType;
|
|
||||||
|
|
||||||
_Buf _M_buf;
|
|
||||||
_ValueType* _M_ptr;
|
|
||||||
_DifferenceType _M_maxsize;
|
|
||||||
|
|
||||||
__stack(const __stack&) = delete;
|
|
||||||
void
|
|
||||||
operator=(const __stack&) = delete;
|
|
||||||
|
|
||||||
public:
|
|
||||||
__stack(_DifferenceType __max_size) : _M_buf(__max_size), _M_maxsize(__max_size) { _M_ptr = _M_buf.get(); }
|
|
||||||
|
|
||||||
~__stack()
|
|
||||||
{
|
|
||||||
assert(size() <= _M_maxsize);
|
|
||||||
while (!empty())
|
|
||||||
pop();
|
|
||||||
}
|
|
||||||
|
|
||||||
const _Buf&
|
|
||||||
buffer() const
|
|
||||||
{
|
|
||||||
return _M_buf;
|
|
||||||
}
|
|
||||||
size_t
|
|
||||||
size() const
|
|
||||||
{
|
|
||||||
assert(_M_ptr - _M_buf.get() <= _M_maxsize);
|
|
||||||
assert(_M_ptr - _M_buf.get() >= 0);
|
|
||||||
return _M_ptr - _M_buf.get();
|
|
||||||
}
|
|
||||||
bool
|
|
||||||
empty() const
|
|
||||||
{
|
|
||||||
assert(_M_ptr >= _M_buf.get());
|
|
||||||
return _M_ptr == _M_buf.get();
|
|
||||||
}
|
|
||||||
void
|
|
||||||
push(const _ValueType& __v)
|
|
||||||
{
|
|
||||||
assert(size() < _M_maxsize);
|
|
||||||
new (_M_ptr) _ValueType(__v);
|
|
||||||
++_M_ptr;
|
|
||||||
}
|
|
||||||
const _ValueType&
|
|
||||||
top() const
|
|
||||||
{
|
|
||||||
return *(_M_ptr - 1);
|
|
||||||
}
|
|
||||||
void
|
|
||||||
pop()
|
|
||||||
{
|
|
||||||
assert(_M_ptr > _M_buf.get());
|
|
||||||
--_M_ptr;
|
|
||||||
(*_M_ptr).~_ValueType();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace __utils
|
} // namespace __utils
|
||||||
} // namespace __pstl
|
} // namespace __pstl
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue