123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- #pragma once
- #include <util/memory/smallobj.h>
- #include "ptr.h"
- template <class T>
- class TFastQueue {
- struct THelper: public TObjectFromPool<THelper>, public TIntrusiveListItem<THelper> {
- inline THelper(const T& t)
- : Obj(t)
- {
- }
- T Obj;
- };
- public:
- inline TFastQueue()
- : Pool_(TDefaultAllocator::Instance())
- , Size_(0)
- {
- }
- inline void Push(const T& t) {
- Queue_.PushFront(new (&Pool_) THelper(t));
- ++Size_;
- }
- inline T Pop() {
- Y_ASSERT(!this->Empty());
- THolder<THelper> tmp(Queue_.PopBack());
- --Size_;
- return tmp->Obj;
- }
- inline size_t Size() const noexcept {
- return Size_;
- }
- Y_PURE_FUNCTION inline bool Empty() const noexcept {
- return !this->Size();
- }
- inline explicit operator bool() const noexcept {
- return !this->Empty();
- }
- private:
- typename THelper::TPool Pool_;
- TIntrusiveListWithAutoDelete<THelper, TDelete> Queue_;
- size_t Size_;
- };
|