NeKernel dev
Loading...
Searching...
No Matches
Function.h
Go to the documentation of this file.
1/* ========================================
2
3 Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license.
4
5======================================== */
6
7#pragma once
8
9#include <NeKit/Config.h>
10#include <NeKit/ErrorOr.h>
11
12namespace Kernel {
16template <typename T, typename... Args>
17class Function final {
18 public:
19 Function() = default;
20
21 public:
22 explicit Function(T (*Fn)(Args... args)) : fFn(Fn) {}
23
24 ~Function() = default;
25
26 Function& operator=(const Function&) = default;
27 Function(const Function&) = default;
28
29 template <typename... XArgs>
30 T operator()(Args&&... args) {
31 return fFn(args...);
32 }
33
34 template <typename... XArgs>
35 T Call(Args&&... args) {
36 return fFn(args...);
37 }
38
39 operator bool() { return fFn; }
40
41 bool operator!() { return !fFn; }
42
43 private:
44 T (*fFn)(Args... args){nullptr};
45};
46
47template <typename T, typename... Args>
48using FunctionOr = ErrorOr<Function<T, Args...>>;
49} // namespace Kernel
ErrorOr class for error handling.
Definition ErrorOr.h:22
Function wrapper class.
Definition Function.h:17
Function(const Function &)=default
Function(T(*Fn)(Args... args))
Definition Function.h:22
T operator()(Args &&... args)
Definition Function.h:30
Function()=default
T(* fFn)(Args... args)
Definition Function.h:44
Function & operator=(const Function &)=default
~Function()=default
bool operator!()
Definition Function.h:41
T Call(Args &&... args)
Definition Function.h:35
UPS inline definitions.
Definition Device.h:12
ErrorOr< Function< T, Args... > > FunctionOr
Definition Function.h:48