2
3
4
5
6
7
8
11#ifndef _MSTD_FUNCTION_VIEW_HPP_
12 #define _MSTD_FUNCTION_VIEW_HPP_
14 #include "fmt/chrono.h"
17 #include <mstd/config.hpp>
20_MSTD_WARNING(
"this is only available for c++17 and greater!");
23 #include <mstd/functions_types.hpp>
24 #include <mstd/is_same_function.hpp>
28 #pragma region VALIDITY_CHECKS
66 template<
class F,
class Ret,
class ArgsTuple>
69 template<
class F,
class Ret,
class... Args>
77 utils::is_valid_member_function_v<mstd::remove_cvref_t<MemberFunc>, F, Ret, Args...>;
82 template<
class FreeFunc>
91 template<
class MemberFunc>
105 template<
class Functor>
153 #pragma region FREE_FUNCTIONS
158 template<
class FreeFunc, std::enable_if_t<is_valid_free_function_v<FreeFunc>,
bool> =
true>
172 template<
class FreeFunc, std::enable_if_t<is_valid_free_function_v<FreeFunc>,
bool> =
true>
186 #pragma region MEMBER_FUNCTIONS
269 #pragma region FUNCTORS
304 template<
class Functor, std::enable_if_t<is_valid_functor_v<Functor,
false>,
bool> =
true>
317 template<
class Functor, std::enable_if_t<is_valid_functor_v<Functor,
true>,
bool> =
true>
330 template<
class Functor, std::enable_if_t<is_valid_functor_v<Functor,
true>,
bool> =
true>
369 if (
_invoker ==
nullptr) {
return true; }
404 template<
class F, std::enable_if_t<utils::is_valid_function_view_function_v<F>,
bool> =
true>
Definition function_view.hpp:406
function_view & operator=(function_view &&) noexcept=default
function_view(function_view &&) noexcept=default
function_view(const function_view &) noexcept=default
~function_view() noexcept override=default
static _MSTD_CONSTEXPR17 bool can_be_noexcept_v
Definition function_view.hpp:411
function_view() noexcept=default
function_view(nullptr_t) noexcept
Definition function_view.hpp:417
#define _MSTD_HAS_CXX17
Definition config.hpp:45
#define _MSTD_CONSTEXPR17
Definition config.hpp:76
#define _MSTD_HAS_CXX20
Definition config.hpp:52
Definition function_traits.hpp:23
static _MSTD_CONSTEXPR17 bool is_valid_function_view_function_v
Definition function_view.hpp:392
static _MSTD_CONSTEXPR17 bool is_valid_member_function_v
Definition function_view.hpp:35
static _MSTD_CONSTEXPR17 bool is_valid_free_function_v
Definition function_view.hpp:30
static _MSTD_CONSTEXPR17 bool is_valid_functor_v
Definition function_view.hpp:41
Definition arithmetic_types.hpp:23
Definition function_view.hpp:70
void * _parent
Definition function_view.hpp:114
virtual ~base_function_view() noexcept=default
base_function_view() noexcept
Definition function_view.hpp:118
static Ret _free_func_invoker(const function_storage &storage, void *, Args &&... args) noexcept(is_noexcept_function_v< FreeFunc >)
Definition function_view.hpp:83
static _MSTD_CONSTEXPR17 bool is_valid_member_function_v
Definition function_view.hpp:76
static _MSTD_CONSTEXPR17 bool is_valid_free_function_v
Definition function_view.hpp:73
base_function_view(FreeFunc &&freeFunc) noexcept
Definition function_view.hpp:160
base_function_view(base_function_view &&other) noexcept
Definition function_view.hpp:125
base_function_view & operator=(const Functor &functor) noexcept
Definition function_view.hpp:319
static Ret _functor_invoker(const function_storage &storage, void *, Args &&... args) noexcept(is_noexcept_function_v< Functor >)
Definition function_view.hpp:106
base_function_view & operator=(const base_function_view &other) noexcept
Definition function_view.hpp:138
void reset() noexcept
Definition function_view.hpp:335
static _MSTD_CONSTEXPR17 bool is_valid_functor_v
Definition function_view.hpp:80
base_function_view & operator=(FreeFunc &&freeFunc) noexcept
Definition function_view.hpp:174
base_function_view & operator=(Functor &functor) noexcept
Definition function_view.hpp:306
static Ret _member_func_invoker(const function_storage &storage, void *parent, Args &&... args) noexcept(is_noexcept_function_v< MemberFunc >)
Definition function_view.hpp:92
base_function_view(std::nullptr_t) noexcept
Definition function_view.hpp:120
base_function_view & operator=(base_function_view &&other) noexcept
Definition function_view.hpp:145
base_function_view & operator=(std::nullptr_t) noexcept
Definition function_view.hpp:133
base_function_view(const base_function_view &other) noexcept
Definition function_view.hpp:122
function_storage _storage
Definition function_view.hpp:113
_invoker_type _invoker
Definition function_view.hpp:115
Definition function_view.hpp:67
Definition function_view.hpp:58
void * functor_ptr
Definition function_view.hpp:60
void(* func_ptr)()
Definition function_view.hpp:61
std::byte mem_func_buffer[sizeof(void *) *3]
Definition function_view.hpp:62