123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- #pragma once
- #include "fwd.h"
- #include "reserve.h"
- #include <util/memory/alloc.h>
- #include <vector>
- #include <initializer_list>
- template <class T, class A>
- class TVector: public std::vector<T, TReboundAllocator<A, T>> {
- public:
- using TBase = std::vector<T, TReboundAllocator<A, T>>;
- using TSelf = TVector<T, A>;
- using size_type = typename TBase::size_type;
- inline TVector()
- : TBase()
- {
- }
- inline TVector(const typename TBase::allocator_type& a)
- : TBase(a)
- {
- }
- inline explicit TVector(::NDetail::TReserveTag rt)
- : TBase()
- {
- this->reserve(rt.Capacity);
- }
- inline explicit TVector(::NDetail::TReserveTag rt, const typename TBase::allocator_type& a)
- : TBase(a)
- {
- this->reserve(rt.Capacity);
- }
- inline explicit TVector(size_type count)
- : TBase(count)
- {
- }
- inline explicit TVector(size_type count, const typename TBase::allocator_type& a)
- : TBase(count, a)
- {
- }
- inline TVector(size_type count, const T& val)
- : TBase(count, val)
- {
- }
- inline TVector(size_type count, const T& val, const typename TBase::allocator_type& a)
- : TBase(count, val, a)
- {
- }
- inline TVector(std::initializer_list<T> il)
- : TBase(il)
- {
- }
- inline TVector(std::initializer_list<T> il, const typename TBase::allocator_type& a)
- : TBase(il, a)
- {
- }
- inline TVector(const TSelf& src)
- : TBase(src)
- {
- }
- inline TVector(TSelf&& src) noexcept
- : TBase(std::forward<TSelf>(src))
- {
- }
- template <class TIter>
- inline TVector(TIter first, TIter last)
- : TBase(first, last)
- {
- }
- inline TSelf& operator=(const TSelf& src) {
- TBase::operator=(src);
- return *this;
- }
- inline TSelf& operator=(TSelf&& src) noexcept {
- TBase::operator=(std::forward<TSelf>(src));
- return *this;
- }
- inline TSelf& operator=(std::initializer_list<T> il) {
- this->assign(il.begin(), il.end());
- return *this;
- }
- inline explicit operator bool() const noexcept {
- return !this->empty();
- }
- Y_PURE_FUNCTION inline bool empty() const noexcept {
- return TBase::empty();
- }
- inline yssize_t ysize() const noexcept {
- return (yssize_t)TBase::size();
- }
- #ifdef _YNDX_LIBCXX_ENABLE_VECTOR_POD_RESIZE_UNINITIALIZED
- void yresize(size_type newSize) {
- if (std::is_pod<T>::value) {
- TBase::resize_uninitialized(newSize);
- } else {
- TBase::resize(newSize);
- }
- }
- #else
- void yresize(size_type newSize) {
- TBase::resize(newSize);
- }
- #endif
- inline void crop(size_type size) {
- if (this->size() > size) {
- this->erase(this->begin() + size, this->end());
- }
- }
- };
|