Index: src/libchcore/TFailedBufferQueue.h
===================================================================
diff -u -N
--- src/libchcore/TFailedBufferQueue.h	(revision b6a48931b8155a01d871d050f52d915abb2df8ca)
+++ src/libchcore/TFailedBufferQueue.h	(revision 0)
@@ -1,105 +0,0 @@
-// ============================================================================
-//  Copyright (C) 2001-2016 by Jozef Starosczyk
-//  ixen@copyhandler.com
-//
-//  This program is free software; you can redistribute it and/or modify
-//  it under the terms of the GNU Library General Public License
-//  (version 2) as published by the Free Software Foundation;
-//
-//  This program is distributed in the hope that it will be useful,
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//  GNU General Public License for more details.
-//
-//  You should have received a copy of the GNU Library General Public
-//  License along with this program; if not, write to the
-//  Free Software Foundation, Inc.,
-//  59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-// ============================================================================
-#ifndef __TFAILEDBUFFERQUEUE_H__
-#define __TFAILEDBUFFERQUEUE_H__
-
-#include <set>
-#include "TEvent.h"
-#include "TOverlappedDataBuffer.h"
-#include "TCoreException.h"
-#include "TBufferList.h"
-
-namespace chcore
-{
-	class TFailedBufferQueue
-	{
-	public:
-		static const unsigned long long NoPosition = 0xffffffffffffffff;
-
-	public:
-		TFailedBufferQueue();
-
-		template<class T>
-		void PushWithFallback(TOverlappedDataBuffer* pBuffer, T& rRetryQueue)
-		{
-			if (!pBuffer->HasError())
-				throw TCoreException(eErr_InvalidArgument, L"Cannot push successful buffer to failed queue", LOCATION);
-			if(pBuffer->GetFilePosition() < m_ullErrorPosition)
-			{
-				// case: new buffer failed at even earlier position in file than the one that failed previously (should also work for numeric_limits::max())
-				// - move existing buffers with errors to failed read buffers, add current one to full queue
-				m_ullErrorPosition = pBuffer->GetFilePosition();
-
-				BufferCollection newQueue;
-
-				for(TOverlappedDataBuffer* pBuf : m_setBuffers)
-				{
-					if(pBuf->HasError())
-						rRetryQueue.Push(pBuf, true);
-					else
-					{
-						auto pairInsert = newQueue.insert(pBuf);
-						if (!pairInsert.second)
-							throw TCoreException(eErr_InvalidArgument, L"Tried to insert duplicate buffer into the collection", LOCATION);
-					}
-				}
-
-				if(newQueue.size() != m_setBuffers.size())
-					std::swap(m_setBuffers, newQueue);
-			}
-			else if(pBuffer->GetFilePosition() > m_ullErrorPosition)
-			{
-				// case: new buffer failed at position later than the one that failed before - add to failed buffers
-				// for retry
-				rRetryQueue.Push(pBuffer, true);
-				return;
-			}
-			//else throw TCoreException (will be thrown by insert() below)
-
-			auto pairInsert = m_setBuffers.insert(pBuffer);
-			if (!pairInsert.second)
-				throw TCoreException(eErr_InvalidArgument, L"Tried to insert duplicate buffer into the collection", LOCATION);
-
-			UpdateHasBuffers();
-		}
-
-		TOverlappedDataBuffer* Pop();
-
-		void Clear();
-
-		size_t GetCount() const;
-		bool IsEmpty() const;
-
-		HANDLE GetHasBuffersEvent() const;
-		void ReleaseBuffers(const TBufferListPtr& spBuffers);
-
-	private:
-		bool IsBufferReady() const;
-		void UpdateHasBuffers();
-
-	private:
-		using BufferCollection = std::set<TOverlappedDataBuffer*, CompareBufferPositions>;
-
-		BufferCollection m_setBuffers;
-		TEvent m_eventHasBuffers;
-		unsigned long long m_ullErrorPosition = NoPosition;
-	};
-}
-
-#endif