#pragma once

#include <stlfwd>

struct TDefaultLFCounter;

template <class T, class TCounter = TDefaultLFCounter>
class TLockFreeQueue;

template <class T, class TCounter = TDefaultLFCounter>
class TAutoLockFreeQueue;

template <class T>
class TLockFreeStack;

class IThreadFactory;

struct IObjectInQueue;
class TThreadFactoryHolder;

using TThreadFunction = std::function<void()>;

class IThreadPool;
class TFakeThreadPool;
class TThreadPool;
class TAdaptiveThreadPool;
class TSimpleThreadPool;

template <class TQueueType, class TSlave>
class TThreadPoolBinder;