1 #ifndef OSMSCOUT_OBJECTPOOL_H 2 #define OSMSCOUT_OBJECTPOOL_H 41 std::scoped_lock<std::mutex> guard(mutex);
42 if (!
IsValid(o) || pool.size()==maxSize){
50 using Ptr = std::unique_ptr<T, std::function<void(T*)>>;
56 pool.reserve(std::min((
size_t)100, maxSize));
66 virtual T*
MakeNew() noexcept = 0;
80 std::scoped_lock<std::mutex> guard(mutex);
88 return std::unique_ptr<T>(
nullptr);
91 return Ptr(o, [
this](T* o){ Return(o); });
96 std::scoped_lock<std::mutex> guard(mutex);
102 std::scoped_lock<std::mutex> guard(mutex);
112 #endif //OSMSCOUT_OBJECTPOOL_H Definition: ObjectPool.h:33
std::unique_ptr< FileScanner, std::function< void(FileScanner *)> > Ptr
Definition: ObjectPool.h:50
virtual void Destroy(T *o) noexcept
Definition: ObjectPool.h:68
virtual T * MakeNew() noexcept=0
ObjectPool(size_t maxSize)
Definition: ObjectPool.h:53
size_t Size()
Definition: ObjectPool.h:94
virtual ~ObjectPool()
Definition: ObjectPool.h:59
void Clear()
Definition: ObjectPool.h:100
virtual Ptr Borrow()
Definition: ObjectPool.h:78
virtual bool IsValid(T *) noexcept
Definition: ObjectPool.h:73