/* ======================================== Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. ======================================== */ #pragma once #include #include namespace Kernel { /// ================================================================================ /// @brief Function wrapper class. /// ================================================================================ template class Function final { public: Function() = default; public: explicit Function(T (*Fn)(Args... args)) : fFn(Fn) {} ~Function() = default; Function& operator=(const Function&) = default; Function(const Function&) = default; template T operator()(Args&&... args) { return fFn(args...); } template T Call(Args&&... args) { return fFn(args...); } operator bool() { return fFn; } bool operator!() { return !fFn; } private: T (*fFn)(Args... args){nullptr}; }; template using FunctionOr = ErrorOr>; } // namespace Kernel