// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "UnsyncCommon.h" #include "UnsyncThread.h" #include namespace unsync { template struct TObjectPool { TObjectPool(std::function&& InCreateObject) : CreateObject(InCreateObject) {} std::unique_ptr Acquire() { std::lock_guard LockGuard(Mutex); std::unique_ptr Result; if (AvailableObjects.empty()) { Result = std::unique_ptr(CreateObject()); } else { std::swap(Result, AvailableObjects.back()); AvailableObjects.pop_back(); } return Result; } void Release(std::unique_ptr&& Object) { std::lock_guard LockGuard(Mutex); AvailableObjects.push_back(std::move(Object)); } std::function CreateObject; std::vector> AvailableObjects; std::mutex Mutex; }; } // namespace unsync