diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-12-11 08:34:36 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2025-12-11 08:34:36 +0100 |
| commit | fe58b444de6c00089010d308a39f78890b1782b6 (patch) | |
| tree | 84849ef1576aca5410210503c58268d3a9592c14 /src/kernel/NeKit/Vettable.h | |
| parent | 076c8378e96a9fac9864c9d02bb63fa7dd423e4a (diff) | |
feat: kernel: `Vettable.h` interface and concepts.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'src/kernel/NeKit/Vettable.h')
| -rw-r--r-- | src/kernel/NeKit/Vettable.h | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/src/kernel/NeKit/Vettable.h b/src/kernel/NeKit/Vettable.h new file mode 100644 index 00000000..d2479bf0 --- /dev/null +++ b/src/kernel/NeKit/Vettable.h @@ -0,0 +1,59 @@ + +/* ======================================== + + Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. + +======================================== */ + +#ifndef __NE_KIT_VETTABLE_H__ +#define __NE_KIT_VETTABLE_H__ + +#include <CompilerKit/CompilerKit.h> +#include <NeKit/Config.h> + +#define NE_VETTABLE : public ::Kernel::IVettable + +namespace Kernel { +/// @brief Vet interface for objects. +struct IVettable { + explicit IVettable() = default; + virtual ~IVettable() = default; + + NE_COPY_DEFAULT(IVettable) +}; + +struct INotVettable { + explicit INotVettable() = default; + virtual ~INotVettable() = default; + + NE_COPY_DEFAULT(INotVettable) +}; + +template <typename T> +struct Vettable final { + static constexpr bool kValue = false; +}; + +template <> +struct Vettable<INotVettable> final { + static constexpr bool kValue = false; +}; + +template <> +struct Vettable<IVettable> final { + static constexpr bool kValue = true; +}; + +/// @brief Concept version of Vettable. +template <typename T, typename OnFallback> +concept IsVettable = requires(OnFallback fallback) { + { Vettable<T>::kValue ? true : fallback() }; +}; + +template <typename T, typename OnFallback> +concept IsNotVettable = requires(OnFallback fallback) { + { !Vettable<T>::kValue ? true : fallback() }; +}; +} // namespace Kernel + +#endif // !__NE_KIT_VETTABLE_H__
\ No newline at end of file |
