@@ -9,29 +9,22 @@ ESPMemoryMonitor* ESPMemoryMonitor::_allocInstance = nullptr;
99namespace {
1010constexpr const char * kSamplerTaskName = " ESPMemoryMon" ;
1111
12- template <typename T>
13- struct FunctionPointerTraits ;
14-
15- template <typename R, typename ... Args>
16- struct FunctionPointerTraits <R (*)(Args...)> {
17- static constexpr size_t kArity = sizeof ...(Args);
18- };
19-
2012using RegisterFn = decltype (&heap_caps_register_failed_alloc_callback);
21- using RegisterTraits = FunctionPointerTraits<RegisterFn>;
22- using HookTraits = FunctionPointerTraits<esp_alloc_failed_hook_t >;
13+ using HookFn = esp_alloc_failed_hook_t ;
14+ using RegisterWithArgFn = esp_err_t (*)(HookFn, void *);
15+ using RegisterNoArgFn = esp_err_t (*)(HookFn);
2316
24- constexpr bool kRegisterSupportsArg = RegisterTraits:: kArity == 2 ;
25- constexpr bool kRegisterSupportsNoArg = RegisterTraits:: kArity == 1 ;
26- constexpr bool kAllocHookTakesArg = HookTraits:: kArity == 4 ;
27- constexpr bool kAllocHookTakesNoArg = HookTraits:: kArity == 3 ;
17+ constexpr bool kRegisterSupportsArg = std::is_convertible_v<RegisterFn, RegisterWithArgFn> ;
18+ constexpr bool kRegisterSupportsNoArg = std::is_convertible_v<RegisterFn, RegisterNoArgFn> ;
19+ constexpr bool kHookAcceptsThunk4 = std::is_convertible_v< decltype (&ESPMemoryMonitor::failedAllocThunk4), HookFn> ;
20+ constexpr bool kHookAcceptsThunk3 = std::is_convertible_v< decltype (&ESPMemoryMonitor::failedAllocThunk3), HookFn> ;
2821
2922static_assert (kRegisterSupportsArg || kRegisterSupportsNoArg ,
3023 " Unsupported heap_caps_register_failed_alloc_callback signature" );
31- static_assert (kAllocHookTakesArg || kAllocHookTakesNoArg , " Unsupported failed alloc hook signature" );
24+ static_assert (kHookAcceptsThunk4 || kHookAcceptsThunk3 , " Unsupported failed alloc hook signature" );
3225
33- constexpr bool kCanUseThunk4 = kAllocHookTakesArg && kRegisterSupportsArg ;
34- constexpr bool kCanUseThunk3 = kAllocHookTakesNoArg && (kRegisterSupportsArg || kRegisterSupportsNoArg );
26+ constexpr bool kCanUseThunk4 = kHookAcceptsThunk4 && kRegisterSupportsArg ;
27+ constexpr bool kCanUseThunk3 = kHookAcceptsThunk3 && (kRegisterSupportsArg || kRegisterSupportsNoArg );
3528
3629static_assert (kCanUseThunk4 || kCanUseThunk3 , " Unsupported failed alloc callback signature" );
3730
0 commit comments