From 53a5ad3cf95e435d89cc365bc5eb1a0c6d0afb52 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Tue, 17 Jan 2023 11:16:46 +0200 Subject: [PATCH] BAN: Function now properly forward arguments --- BAN/include/BAN/Function.h | 23 ++++++++++++----------- kernel/kernel/Input.cpp | 6 +++--- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/BAN/include/BAN/Function.h b/BAN/include/BAN/Function.h index c171d42aa..bc210aaa3 100644 --- a/BAN/include/BAN/Function.h +++ b/BAN/include/BAN/Function.h @@ -1,6 +1,7 @@ #pragma once #include +#include namespace BAN { @@ -30,13 +31,13 @@ namespace BAN new (m_storage) CallableMemberConst(function, owner); } - Ret operator()(const Args&... args) + Ret operator()(Args... args) { - ASSERT(HasFunction()); - return ((CallableBase*)m_storage)->call(args...); + ASSERT(*this); + return reinterpret_cast(m_storage)->call(Forward(args)...); } - bool HasFunction() const + operator bool() const { for (size_t i = 0; i < m_size; i++) if (m_storage[i]) @@ -48,7 +49,7 @@ namespace BAN struct CallableBase { virtual ~CallableBase() {} - virtual Ret call(const Args&...) = 0; + virtual Ret call(Args...) = 0; }; struct CallablePointer : public CallableBase @@ -57,9 +58,9 @@ namespace BAN : m_function(function) { } - virtual Ret call(const Args&... args) override + virtual Ret call(Args... args) override { - return m_function(args...); + return m_function(Forward(args)...); } private: @@ -74,9 +75,9 @@ namespace BAN , m_function(function) { } - virtual Ret call(const Args&... args) override + virtual Ret call(Args... args) override { - return (m_owner->*m_function)(args...); + return (m_owner->*m_function)(Forward(args)...); } private: @@ -92,9 +93,9 @@ namespace BAN , m_function(function) { } - virtual Ret call(const Args&... args) override + virtual Ret call(Args... args) override { - return (m_owner->*m_function)(args...); + return (m_owner->*m_function)(Forward(args)...); } private: diff --git a/kernel/kernel/Input.cpp b/kernel/kernel/Input.cpp index c3c4a6f15..34c4342f5 100644 --- a/kernel/kernel/Input.cpp +++ b/kernel/kernel/Input.cpp @@ -385,21 +385,21 @@ namespace Input while (!s_key_event_queue.Empty()) { - if (s_key_event_callback.HasFunction()) + if (s_key_event_callback) s_key_event_callback(s_key_event_queue.Front()); s_key_event_queue.Pop(); } while (!s_mouse_button_event_queue.Empty()) { - if (s_mouse_button_event_callback.HasFunction()) + if (s_mouse_button_event_callback) s_mouse_button_event_callback(s_mouse_button_event_queue.Front()); s_mouse_button_event_queue.Pop(); } while (!s_mouse_move_event_queue.Empty()) { - if (s_mouse_move_event_callback.HasFunction()) + if (s_mouse_move_event_callback) s_mouse_move_event_callback(s_mouse_move_event_queue.Front()); s_mouse_move_event_queue.Pop(); }