/* ======================================== Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. ======================================== */ #ifndef _INC_FUNCTION_H_ #define _INC_FUNCTION_H_ #include #include namespace Kernel { 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); }; template using FunctionOr = ErrorOr>; } // namespace Kernel #endif // !_INC_FUNCTION_H__