Index: src/libchcore/TSimpleOrderedBufferQueue.h =================================================================== diff -u -N -rc719644bb4360fcf7ccf6f1139bcae852bd6effd -rd99302fce795dbb5139659016a5da7948f141fb4 --- src/libchcore/TSimpleOrderedBufferQueue.h (.../TSimpleOrderedBufferQueue.h) (revision c719644bb4360fcf7ccf6f1139bcae852bd6effd) +++ src/libchcore/TSimpleOrderedBufferQueue.h (.../TSimpleOrderedBufferQueue.h) (revision d99302fce795dbb5139659016a5da7948f141fb4) @@ -23,18 +23,24 @@ #include "TCoreException.h" #include "TOverlappedDataBuffer.h" #include "TBufferList.h" +#include "TSharedCount.h" namespace chcore { class TSimpleOrderedBufferQueue : private std::set { public: + TSimpleOrderedBufferQueue() : m_spCount(std::make_shared>()) + { + } + void Push(TOverlappedDataBuffer* pBuffer) { if(!pBuffer) throw TCoreException(eErr_InvalidArgument, L"pBuffer is NULL", LOCATION); if(!insert(pBuffer).second) throw TCoreException(eErr_InvalidArgument, L"Buffer already exists in the collection", LOCATION); + m_spCount->Increase(); } TOverlappedDataBuffer* Pop() @@ -44,6 +50,8 @@ TOverlappedDataBuffer* pBuffer = *begin(); erase(begin()); + m_spCount->Decrease(); + return pBuffer; } @@ -64,6 +72,8 @@ spBuffers->Push(pBuffer); } clear(); + + m_spCount->SetValue(0); } bool IsEmpty() const @@ -73,8 +83,16 @@ size_t GetCount() const { - return size(); + return m_spCount->GetValue(); } + + TSharedCountPtr GetSharedCount() + { + return m_spCount; + } + + private: + TSharedCountPtr m_spCount; }; }