#pragma once #include #include #include template class TVectorType = TVector> class TLockFreeQueueBatch { private: TLockFreeStack>*> Stack; public: bool IsEmpty() { return Stack.IsEmpty(); } void EnqueueAll(TAutoPtr>> vec) { Stack.Enqueue(vec.Release()); } void DequeueAllSingleConsumer(TVectorType>* r) { TTempTlsVector>*> vs; Stack.DequeueAllSingleConsumer(vs.GetVector()); for (typename TVector>*>::reverse_iterator i = vs.GetVector()->rbegin(); i != vs.GetVector()->rend(); ++i) { if (i == vs.GetVector()->rend()) { r->swap(**i); } else { r->insert(r->end(), (*i)->begin(), (*i)->end()); } delete *i; } } };