/* ======================================== Copyright (C) 2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. File: Verify.h Purpose: System Call Interface Verification Layer. ======================================== */ #pragma once #include namespace LibSystem::Verify { /// @author 0xf00sec, and Amlal El Mahrouss /// @brief safe cast operator. template inline R sys_safe_cast(const T* ptr) { ::_rtl_assert(ptr, "safe cast failed!"); return static_cast(const_cast(ptr)); } template inline Void sys_safe_cast(const T* ptr) = delete; template struct is_castable { using return_type = U; constexpr static BOOL value = false; }; template struct is_castable { using return_type = T; constexpr static BOOL value = true; }; /// @author Amlal El Mahrouss /// @brief Safe constexpr cast. template constexpr R* sys_constexpr_cast(T* ptr) { static_assert(is_castable::value, "types cannot be casted."); return static_cast(ptr); } } // namespace LibSystem::Verify