← Back to file list Raw

src/CResourceTicket.h

#pragma once
#include <atomic>
#include <memory>
#include <mutex>
#include <condition_variable>
#include "CResource.h"
class CResourceTicket
{
public:
CResourceTicket() = default;
CResourceTicket(std::shared_ptr<CResource> res);
bool IsReady() const;
void Join();
std::shared_ptr<CResource> Get();
private:
enum class CState { Loading, Synchronising, Ready, Failed };
std::atomic<CState> state { CState::Loading };
std::shared_ptr<CResource> resource;
std::mutex mtx;
std::condition_variable cv;
friend class CResourcesManager;
};