Skip to content

Commit 22d7c2e

Browse files
committed
organizing fptr metadata, wip.
1 parent 4bf6fe7 commit 22d7c2e

File tree

4 files changed

+128
-3
lines changed

4 files changed

+128
-3
lines changed

ReflectionTemplateLib/rtl/dispatch/fn_signature.h

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,66 @@ namespace rtl::dispatch
1818
template<class...args_t>
1919
struct fn_signature : fn_meta
2020
{
21+
using lambda_vt = std::function<void(const fn_meta&, traits::normal_sign_t<args_t>...)>;
2122

23+
using lambda_rt = std::function<std::any(const fn_meta&, traits::normal_sign_t<args_t>...)>;
24+
25+
using lambda_ctor_t = std::function<Return(alloc, traits::normal_sign_t<args_t>...)>;
26+
27+
using lambda_mth_vt = std::function<void(const lambda_base&, const RObject&, traits::normal_sign_t<args_t>...)>;
28+
29+
using lambda_mth_rt = std::function<std::any(const lambda_base&, const RObject&, traits::normal_sign_t<args_t>...)>;
30+
31+
constexpr lambda_vt get_function_vhop() const {
32+
return fn_vhop;
33+
}
34+
35+
constexpr lambda_rt get_function_rhop() const {
36+
return fn_rhop;
37+
}
38+
39+
constexpr lambda_ctor_t get_ctor_hop() const {
40+
return ctor_hop;
41+
}
42+
43+
constexpr lambda_mth_vt get_method_vhop() const {
44+
return mth_vhop;
45+
}
46+
47+
constexpr lambda_mth_rt get_method_rhop() const {
48+
return mth_rhop;
49+
}
50+
51+
private:
52+
53+
lambda_vt fn_vhop = nullptr;
54+
lambda_rt fn_rhop = nullptr;
55+
56+
lambda_mth_vt mth_vhop = nullptr;
57+
lambda_mth_rt mth_rhop = nullptr;
58+
lambda_ctor_t ctor_hop = nullptr;
59+
60+
fn_lambda* erased_return = nullptr;
61+
fn_lambda* erased_target = nullptr;
62+
63+
constexpr void set_function_vhop(const lambda_vt& lambda) const {
64+
fn_vhop = lambda;
65+
}
66+
67+
constexpr void set_function_rhop(const lambda_rt& lambda) const {
68+
fn_rhop = lambda;
69+
}
70+
71+
constexpr void set_ctor_hop(const lambda_ctor_t& lambda) const {
72+
ctor_hop = lambda;
73+
}
74+
75+
constexpr void set_method_vhop(const lambda_mth_vt& lambda) const {
76+
mth_vhop = lambda;
77+
}
78+
79+
constexpr void set_method_rhop(const lambda_mth_rt& lambda) const {
80+
mth_rhop = lambda;
81+
}
2282
};
2383
}

ReflectionTemplateLib/rtl/dispatch/fn_signature_rec.h

Lines changed: 56 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,67 @@
1111

1212
#pragma once
1313

14-
#include "fn_signature.h"
14+
#include "fn_meta.h"
1515

1616
namespace rtl::dispatch
1717
{
1818
template<class record_t, class...args_t>
19-
struct fn_signature_rec : fn_signature<args_t...>
19+
struct fn_signature_target : fn_lambda
2020
{
21+
using lambda_vt = std::function<void(const fn_meta&, const record_t&, traits::normal_sign_t<args_t>...)>;
22+
using lambda_rt = std::function<std::any(const fn_meta&, const record_t&, traits::normal_sign_t<args_t>...)>;
2123

24+
constexpr lambda_vt get_method_vhop() const {
25+
return vhop;
26+
}
27+
28+
constexpr lambda_rt get_method_rhop() const {
29+
return rhop;
30+
}
31+
32+
private:
33+
34+
lambda_vt vhop = nullptr;
35+
lambda_rt rhop = nullptr;
36+
37+
constexpr void set_method_vhop(const lambda_vt& lambda) const {
38+
vhop = lambda;
39+
}
40+
41+
constexpr void set_method_rhop(const lambda_rt& lambda) const {
42+
rhop = lambda;
43+
}
44+
};
45+
}
46+
47+
48+
namespace rtl::dispatch
49+
{
50+
template<class return_t, class...args_t>
51+
struct fn_signature_return : fn_lambda
52+
{
53+
using lambda_vt = std::function<void(const fn_meta&, const rtl::RObject&, traits::normal_sign_t<args_t>...)>;
54+
using lambda_rt = std::function<return_t(const fn_meta&, const rtl::RObject&, traits::normal_sign_t<args_t>...)>;
55+
56+
constexpr lambda_vt get_method_vhop() const {
57+
return vhop;
58+
}
59+
60+
constexpr lambda_rt get_method_rhop() const {
61+
return rhop;
62+
}
63+
64+
private:
65+
66+
lambda_vt vhop = nullptr;
67+
lambda_rt rhop = nullptr;
68+
69+
constexpr void set_method_vhop(const lambda_vt& lambda) const {
70+
vhop = lambda;
71+
}
72+
73+
constexpr void set_method_rhop(const lambda_rt& lambda) const {
74+
rhop = lambda;
75+
}
2276
};
2377
}

ReflectionTemplateLib/rtl/dispatch/method_ptr.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515

1616
#include "functor.h"
1717

18+
#include "fn_signature_rec.h"
19+
1820
namespace rtl::dispatch
1921
{
2022
template<class record_t, class return_t, class ...signature_t>
@@ -50,5 +52,9 @@ namespace rtl::dispatch
5052
private:
5153

5254
const functor_t m_functor;
55+
56+
fn_signature_target<record_t, signature_t...> m_erased_target;
57+
58+
fn_signature_return<return_t, signature_t...> m_erased_return;
5359
};
5460
}

ReflectionTemplateLib/rtl/rtl_forward_decls.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,11 +104,16 @@ namespace rtl
104104
//--- These should be enough for replacement.
105105
struct fn_meta;
106106

107+
struct fn_lambda {};
108+
107109
template<class...args_t>
108110
struct fn_signature;
109111

110112
template<class record_t, class...args_t>
111-
struct fn_signature_rec;
113+
struct fn_signature_target;
114+
115+
template<class return_t, class...args_t>
116+
struct fn_signature_return;
112117

113118
template<class return_t, class ...signature_t>
114119
struct function_ptr;

0 commit comments

Comments
 (0)