12345678910111213141516171819202122232425262728293031323334353637383940 |
- #pragma once
- #include "thread_extra.h"
- #include <util/generic/vector.h>
- #include <util/system/yassert.h>
- template <typename T, typename TTag = void, template <typename, class> class TVectorType = TVector>
- class TTempTlsVector {
- private:
- struct TTagForTls {};
- TVectorType<T, std::allocator<T>>* Vector;
- public:
- TVectorType<T, std::allocator<T>>* GetVector() {
- return Vector;
- }
- TTempTlsVector() {
- Vector = FastTlsSingletonWithTag<TVectorType<T, std::allocator<T>>, TTagForTls>();
- Y_ASSERT(Vector->empty());
- }
- ~TTempTlsVector() {
- Clear();
- }
- void Clear() {
- Vector->clear();
- }
- size_t Capacity() const noexcept {
- return Vector->capacity();
- }
- void Shrink() {
- Vector->shrink_to_fit();
- }
- };
|