40 using Lock = std::recursive_mutex;
41 using Locker = std::lock_guard<Lock>;
47 std::map<RE::VMHandle, EventName>
_regs;
51 template <
class Enable,
class... Args>
54 template <
class... Args>
58 RE::BSScript::is_return_convertible<Args>...>>,
75 for (
auto& reg : _regs) {
77 vm->SendEvent(reg.first, reg.second.c_str(), args);
83 std::tuple args(
VMArg(std::forward<Args>(a_args))...);
87 task->AddTask([args,
this]()
mutable {
94 template <
class Tuple, std::size_t... I>
95 inline void SendEvent_Tuple(Tuple&& a_tuple, std::index_sequence<I...>)
97 SendEvent(std::get<I>(std::forward<Tuple>(a_tuple)).Unpack()...);
118 for (
auto& reg : _regs) {
120 vm->SendEvent(reg.first, reg.second.c_str(), args);
129 task->AddTask([
this]() {
136 template <
class... Args>
Definition: BGSBaseAlias.h:12
static VirtualMachine * GetSingleton()
Definition: RegistrationMap.h:20
RegistrationMapBase & operator=(const RegistrationMapBase &a_rhs)
bool Register(const void *a_object, RE::BSFixedString a_callback, RE::VMTypeID a_typeID)
bool Save(SerializationInterface *a_intfc, std::uint32_t a_type, std::uint32_t a_version)
bool Unregister(const RE::BGSBaseAlias *a_alias)
Lock _lock
Definition: RegistrationMap.h:48
RegistrationMapBase(const RegistrationMapBase &a_rhs)
std::string EventName
Definition: RegistrationMap.h:42
std::map< RE::VMHandle, EventName > _regs
Definition: RegistrationMap.h:47
RegistrationMapBase(RegistrationMapBase &&a_rhs)
RegistrationMapBase & operator=(RegistrationMapBase &&a_rhs)
bool Register(const RE::TESForm *a_form, RE::BSFixedString a_callback)
bool Unregister(const void *a_object, RE::VMTypeID a_typeID)
bool Unregister(const RE::TESForm *a_form)
bool Save(SerializationInterface *a_intfc)
bool Load(SerializationInterface *a_intfc)
std::recursive_mutex Lock
Definition: RegistrationMap.h:40
std::lock_guard< Lock > Locker
Definition: RegistrationMap.h:41
bool Register(const RE::BGSBaseAlias *a_alias, RE::BSFixedString a_callback)
RegistrationMap & operator=(const RegistrationMap &a_rhs)=default
RegistrationMap(const RegistrationMap &)=default
RegistrationMap & operator=(RegistrationMap &&a_rhs)=default
RegistrationMap()=default
RegistrationMap(RegistrationMap &&)=default
void SendEvent(Args... a_args)
Definition: RegistrationMap.h:72
void QueueEvent(Args... a_args)
Definition: RegistrationMap.h:81
~RegistrationMap()=default
RegistrationMap()=default
~RegistrationMap()=default
RegistrationMap(const RegistrationMap &)=default
RegistrationMap & operator=(const RegistrationMap &)=default
RegistrationMap & operator=(RegistrationMap &&)=default
RegistrationMap(RegistrationMap &&)=default
void SendEvent()
Definition: RegistrationMap.h:114
void QueueEvent()
Definition: RegistrationMap.h:125
Definition: RegistrationMap.h:52
Definition: Interfaces.h:71
std::uint32_t VMTypeID
Definition: BSCoreTypes.h:9
BSScript::IFunctionArguments * MakeFunctionArguments(Args &&... a_args)
Definition: FunctionArguments.h:80
VMArg(T &&) -> VMArg< T >
string(const CharT(&)[N]) -> string< CharT, N - 1 >
const TaskInterface * GetTaskInterface() noexcept
Definition: NiBinaryStream.h:94
Definition: RegistrationTraits.h:40