rpcsx/rpcs3/Emu/Event.h

38 lines
765 B
C
Raw Normal View History

2014-08-08 20:25:45 +02:00
#pragma once
2015-07-01 19:09:26 +02:00
#include "Emu/IdManager.h"
struct lv2_event_queue_t;
2014-12-22 01:56:04 +01:00
2014-08-08 20:25:45 +02:00
class EventManager
{
2015-07-01 19:09:26 +02:00
std::mutex m_mutex;
std::unordered_map<u64, std::shared_ptr<lv2_event_queue_t>> m_map;
2014-08-08 20:25:45 +02:00
public:
void Init();
void Clear();
bool UnregisterKey(u64 key);
2015-03-04 05:42:04 +01:00
2015-07-01 19:09:26 +02:00
template<typename... Args, typename = std::enable_if_t<std::is_constructible<lv2_event_queue_t, Args...>::value>> std::shared_ptr<lv2_event_queue_t> MakeEventQueue(u64 key, Args&&... args)
{
2015-07-01 19:09:26 +02:00
std::lock_guard<std::mutex> lock(m_mutex);
if (key && m_map.find(key) != m_map.end())
{
return nullptr;
}
auto queue = idm::make_ptr<lv2_event_queue_t>(std::forward<Args>(args)...);
2015-07-01 19:09:26 +02:00
if (key)
{
m_map[key] = queue;
}
2015-07-01 19:09:26 +02:00
return queue;
}
std::shared_ptr<lv2_event_queue_t> GetEventQueue(u64 key);
2014-08-08 20:25:45 +02:00
};