45 if (callback ==
nullptr) {
51 return m_callbacks->emplace_back(param, callback) + 1;
72template <
typename CallbackFunction, const
char* (*GetName)()>
75 int32_t
Register(CallbackFunction callback,
void* param) {
80 template <
typename... U>
84 const char* name = GetName();
86 reinterpret_cast<CallbackFunction
>(cb.callback)(name, cb.param,
87 std::forward<U>(u)...);
92 template <
typename... U>
94 return Invoke(std::forward<U>(u)...);
103#define HAL_SIMCALLBACKREGISTRY_DEFINE_NAME(NAME) \
104 static LLVM_ATTRIBUTE_ALWAYS_INLINE constexpr const char* \
105 Get##NAME##Name() { \
123#define HAL_SIMCALLBACKREGISTRY_DEFINE_CAPI(TYPE, NS, CAPINAME, DATA, \
125 int32_t NS##_Register##CAPINAME##Callback(int32_t index, TYPE callback, \
127 return DATA[index].LOWERNAME.Register(callback, param); \
130 void NS##_Cancel##CAPINAME##Callback(int32_t index, int32_t uid) { \
131 DATA[index].LOWERNAME.Cancel(uid); \
147#define HAL_SIMCALLBACKREGISTRY_DEFINE_CAPI_NOINDEX(TYPE, NS, CAPINAME, DATA, \
149 int32_t NS##_Register##CAPINAME##Callback(TYPE callback, void* param) { \
150 return DATA->LOWERNAME.Register(callback, param); \
153 void NS##_Cancel##CAPINAME##Callback(int32_t uid) { \
154 DATA->LOWERNAME.Cancel(uid); \
169#define HAL_SIMCALLBACKREGISTRY_STUB_CAPI(TYPE, NS, CAPINAME) \
170 int32_t NS##_Register##CAPINAME##Callback(int32_t index, TYPE callback, \
175 void NS##_Cancel##CAPINAME##Callback(int32_t index, int32_t uid) {}
188#define HAL_SIMCALLBACKREGISTRY_STUB_CAPI_NOINDEX(TYPE, NS, CAPINAME) \
189 int32_t NS##_Register##CAPINAME##Callback(TYPE callback, void* param) { \
193 void NS##_Cancel##CAPINAME##Callback(int32_t uid) {}
#define LLVM_ATTRIBUTE_ALWAYS_INLINE
LLVM_ATTRIBUTE_ALWAYS_INLINE - On compilers where we have a directive to do so, mark a method "always...
Definition Compiler.h:277
Simulation callback registry.
Definition SimCallbackRegistry.h:73
void Invoke(U &&... u) const
Definition SimCallbackRegistry.h:81
LLVM_ATTRIBUTE_ALWAYS_INLINE void operator()(U &&... u) const
Definition SimCallbackRegistry.h:93
int32_t Register(CallbackFunction callback, void *param)
Definition SimCallbackRegistry.h:75
Definition SimCallbackRegistry.h:20
void Cancel(int32_t uid)
Definition SimCallbackRegistry.h:28
wpi::recursive_spinlock & GetMutex()
Definition SimCallbackRegistry.h:40
LLVM_ATTRIBUTE_ALWAYS_INLINE void DoReset()
Definition SimCallbackRegistry.h:54
wpi::recursive_spinlock m_mutex
Definition SimCallbackRegistry.h:60
void(*)() RawFunctor
Definition SimCallbackRegistry.h:22
int32_t DoRegister(RawFunctor callback, void *param)
Definition SimCallbackRegistry.h:43
void Reset()
Definition SimCallbackRegistry.h:35
std::unique_ptr< CallbackVector > m_callbacks
Definition SimCallbackRegistry.h:61
Vector which provides an integrated freelist for removal and reuse of individual elements.
Definition UidVector.h:73
A recursive spinlock mutex.
Definition spinlock.h:46
WPILib Hardware Abstraction Layer (HAL) namespace.
Definition InterruptManager.h:13