Skip to content

Commit eadead6

Browse files
committed
organizing metadata: removed lambda_base.
1 parent e6eab16 commit eadead6

File tree

4 files changed

+56
-79
lines changed

4 files changed

+56
-79
lines changed

ReflectionTemplateLib/rtl/detail/inc/FunctionCaller.hpp

Lines changed: 35 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -48,41 +48,41 @@ namespace rtl::detail
4848
template<class return_t> requires (member_kind == member::None && std::is_same_v<return_t, rtl::Return>)
4949
inline constexpr function<Return(args_t...)> HopFunction<member_kind, args_t...>::returnT() const
5050
{
51-
function<Return(traits::normal_sign_t<args_t>...)> erasedFn;
52-
initHopper(erasedFn);
53-
return erasedFn;
51+
function<Return(traits::normal_sign_t<args_t>...)> fn;
52+
initHopper(fn);
53+
return fn;
5454
}
5555

5656

5757
template<member member_kind, class ...args_t>
5858
template<class return_t> requires (member_kind == member::Static && std::is_same_v<return_t, rtl::Return>)
5959
inline constexpr const static_method<Return(args_t...)> HopFunction<member_kind, args_t...>::returnT() const
6060
{
61-
static_method<Return(traits::normal_sign_t<args_t>...)> erasedFn;
62-
initHopper(erasedFn);
63-
return erasedFn;
61+
static_method<Return(traits::normal_sign_t<args_t>...)> mth;
62+
initHopper(mth);
63+
return mth;
6464
}
6565

66+
6667
template<member member_kind, class ...args_t>
6768
template<class return_t> requires (member_kind == member::Static && !std::is_same_v<return_t, rtl::Return>)
6869
inline constexpr const static_method<return_t(args_t...)> HopFunction<member_kind, args_t...>::returnT() const
6970
{
70-
static_method<return_t(args_t...)> fn;
71+
static_method<return_t(args_t...)> mth;
7172
if (!m_argsTfnMeta.is_empty())
7273
{
7374
if (m_argsTfnMeta.get_member_kind() != member::Static) {
74-
fn.set_init_error(error::InvalidNonStaticMethodCaller);
75+
mth.set_init_error(error::InvalidNonStaticMethodCaller);
7576
}
76-
else if (m_argsTfnMeta.get_member_kind() == member::Static) {
77-
78-
const auto retId = traits::uid<return_t>::value;
79-
return m_argsTfnMeta.get_lambda()
80-
.template to_function<args_t...>()
81-
.template get_hopper<return_t>(retId)
82-
.f_ptr();
77+
else if (m_argsTfnMeta.get_member_kind() == member::Static &&
78+
traits::uid<return_t>::value == m_argsTfnMeta.get_return_id())
79+
{
80+
using function_t = dispatch::function_ptr<return_t, args_t...>;
81+
auto fptr = static_cast<const function_t&>(m_argsTfnMeta.get_functor()).f_ptr();
82+
return static_method<return_t(args_t...)>(fptr);
8383
}
8484
}
85-
return fn;
85+
return mth;
8686
}
8787

8888

@@ -93,15 +93,16 @@ namespace rtl::detail
9393
function<return_t(args_t...)> fn;
9494
if (!m_argsTfnMeta.is_empty())
9595
{
96-
if (m_argsTfnMeta.get_member_kind() == member::Static) {
96+
if (m_argsTfnMeta.get_member_kind() == member::Static)
97+
{
9798
fn.set_init_error(error::InvalidStaticMethodCaller);
9899
}
99-
else if (m_argsTfnMeta.get_member_kind() == member::None) {
100-
101-
const auto retId = traits::uid<return_t>::value;
102-
return m_argsTfnMeta.get_lambda()
103-
.template to_function<args_t...>()
104-
.template get_hopper<return_t>(retId);
100+
else if (m_argsTfnMeta.get_member_kind() == member::None &&
101+
traits::uid<return_t>::value == m_argsTfnMeta.get_return_id())
102+
{
103+
using function_t = dispatch::function_ptr<return_t, args_t...>;
104+
auto fptr = static_cast<const function_t&>(m_argsTfnMeta.get_functor()).f_ptr();
105+
return function<return_t(args_t...)>(fptr);
105106
}
106107
}
107108
return fn;
@@ -170,30 +171,30 @@ namespace rtl::detail
170171
//initializing pos '0' with empty 'type_meta'.
171172
std::vector<rtl::type_meta> overloadsFnMeta = { rtl::type_meta() };
172173

173-
for (auto& fnMeta : m_functorsMeta)
174+
for (auto& ty_meta : m_functorsMeta)
174175
{
175-
if (argsTfnMeta.is_empty() && strictArgsId == fnMeta.get_strict_args_id()) {
176-
argsTfnMeta = fnMeta;
176+
if (argsTfnMeta.is_empty() && strictArgsId == ty_meta.get_strict_args_id()) {
177+
argsTfnMeta = ty_meta;
177178
}
178-
if (normalArgsId == fnMeta.get_normal_args_id())
179+
if (normalArgsId == ty_meta.get_normal_args_id())
179180
{
180-
if (normalArgsId == fnMeta.get_strict_args_id()) {
181+
if (normalArgsId == ty_meta.get_strict_args_id()) {
181182
// same normal & strict ids, means no refs exists in target function's signature
182183
// target's function signature is call by value, always at pos '0'.
183184
// if doesn't exists, this pos is occupied by an empty 'type_meta'.
184-
overloadsFnMeta[0] = fnMeta;
185+
overloadsFnMeta[0] = ty_meta;
185186
}
186-
else if (!fnMeta.is_any_arg_ncref()) {
187+
else if (!ty_meta.is_any_arg_ncref()) {
187188
// its a const-ref-overload with no non-const-ref in signature, added from pos '1' onwards.
188-
overloadsFnMeta.push_back(fnMeta);
189+
overloadsFnMeta.push_back(ty_meta);
189190
}
190191
}
191192
}
192193

193-
for (auto& fnMeta : m_functorsMeta) {
194-
if (normalArgsId == fnMeta.get_normal_args_id() && fnMeta.is_any_arg_ncref()) {
194+
for (auto& ty_meta : m_functorsMeta) {
195+
if (normalArgsId == ty_meta.get_normal_args_id() && ty_meta.is_any_arg_ncref()) {
195196
// any remaining overload, const/non-const ref added from pos '1' onwards.
196-
overloadsFnMeta.push_back(fnMeta);
197+
overloadsFnMeta.push_back(ty_meta);
197198
}
198199
}
199200
return { argsTfnMeta, overloadsFnMeta };

ReflectionTemplateLib/rtl/detail/inc/MethodInvoker.hpp

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -164,9 +164,9 @@ namespace rtl::detail
164164
template<class return_t> requires (!traits::type_aware_v<record_t, return_t>)
165165
inline constexpr const method<record_t, return_t(args_t...)> HopMethod<record_t, args_t...>::returnT() const
166166
{
167-
method<record_t, return_t(traits::normal_sign_t<args_t>...)> erasedMth;
168-
initHopper<return_t>(erasedMth);
169-
return erasedMth;
167+
method<record_t, return_t(traits::normal_sign_t<args_t>...)> mth;
168+
initHopper<return_t>(mth);
169+
return mth;
170170
}
171171

172172

@@ -180,12 +180,11 @@ namespace rtl::detail
180180
if (m_argsTfnMeta.get_member_kind() == member::Static) {
181181
mth.set_init_error(error::InvalidStaticMethodCaller);
182182
}
183-
else {
183+
else if(traits::uid<return_t>::value == m_argsTfnMeta.get_return_id()) {
184184

185-
const auto retId = traits::uid<return_t>::value;
186-
return m_argsTfnMeta.get_lambda()
187-
.template to_method<record_t, args_t...>()
188-
.template get_hopper<return_t>(retId);
185+
using method_t = dispatch::method_ptr<record_t, return_t, args_t...>;
186+
auto fptr = static_cast<const method_t&>(m_argsTfnMeta.get_functor()).f_ptr();
187+
return method<record_t, return_t(args_t...)>(fptr);
189188
}
190189
}
191190
return mth;
@@ -204,37 +203,37 @@ namespace rtl::detail
204203
//initializing pos '0' with empty 'type_meta'.
205204
std::vector<type_meta> overloadsFnMeta = { type_meta() };
206205

207-
for (auto& fnMeta : m_functorsMeta)
206+
for (auto& ty_meta : m_functorsMeta)
208207
{
209208
if constexpr (!std::is_same_v<record_t, RObject>)
210209
{
211-
if (recordId != fnMeta.get_record_id()) {
210+
if (recordId != ty_meta.get_record_id()) {
212211
return { argsTfnMeta, overloadsFnMeta };
213212
}
214213
}
215214

216-
if (argsTfnMeta.is_empty() && strictArgsId == fnMeta.get_strict_args_id()) {
217-
argsTfnMeta = fnMeta;
215+
if (argsTfnMeta.is_empty() && strictArgsId == ty_meta.get_strict_args_id()) {
216+
argsTfnMeta = ty_meta;
218217
}
219-
if (normalArgsId == fnMeta.get_normal_args_id())
218+
if (normalArgsId == ty_meta.get_normal_args_id())
220219
{
221-
if (normalArgsId == fnMeta.get_strict_args_id()) {
220+
if (normalArgsId == ty_meta.get_strict_args_id()) {
222221
// same normal & strict ids, means no refs exists in target function's signature
223222
// target's function signature is call by value, always at pos '0'.
224223
// if doesn't exists, this pos is occupied by an empty 'type_meta'.
225-
overloadsFnMeta[0] = fnMeta;
224+
overloadsFnMeta[0] = ty_meta;
226225
}
227-
else if (!fnMeta.is_any_arg_ncref()) {
226+
else if (!ty_meta.is_any_arg_ncref()) {
228227
// its a const-ref-overload with no non-const-ref in signature, added from pos '1' onwards.
229-
overloadsFnMeta.push_back(fnMeta);
228+
overloadsFnMeta.push_back(ty_meta);
230229
}
231230
}
232231
}
233232

234-
for (auto& fnMeta : m_functorsMeta) {
235-
if (recordId == fnMeta.get_record_id() &&
236-
normalArgsId == fnMeta.get_normal_args_id() && fnMeta.is_any_arg_ncref()) {
237-
overloadsFnMeta.push_back(fnMeta);
233+
for (auto& ty_meta : m_functorsMeta) {
234+
if (recordId == ty_meta.get_record_id() &&
235+
normalArgsId == ty_meta.get_normal_args_id() && ty_meta.is_any_arg_ncref()) {
236+
overloadsFnMeta.push_back(ty_meta);
238237
}
239238
}
240239
return { argsTfnMeta, overloadsFnMeta };

ReflectionTemplateLib/rtl/inc/type_meta.h

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ namespace rtl
3838
GETTER(std::string, _return_str, m_functor->get().m_return_str)
3939
GETTER_CREF(std::vector<std::size_t>, _args_id_arr, m_functor->get().m_args_type_ids)
4040

41+
GETTER(traits::uid_t, _return_id, m_functor->get().m_return_id)
4142
GETTER(traits::uid_t, _record_id, m_functor->get().m_record_id)
4243
GETTER(traits::uid_t, _normal_args_id, m_functor->get().m_normal_args_id)
4344
GETTER(traits::uid_t, _strict_args_id, m_functor->get().m_strict_args_id)
@@ -59,18 +60,6 @@ namespace rtl
5960
template<class record_t, class ...signature_t>
6061
static type_meta add_constructor(std::size_t p_index);
6162

62-
template<class ..._signature>
63-
using lambda_fn_t = dispatch::lambda_function<_signature...>;
64-
65-
template<class rec_t, class ..._signature>
66-
using lambda_mth_t = dispatch::lambda_method<rec_t, _signature...>;
67-
68-
template<class ...args_t>
69-
constexpr const lambda_fn_t<args_t...>* get_lambda_function(std::size_t p_args_id = 0) const;
70-
71-
template<class record_t, class ...args_t>
72-
constexpr const lambda_mth_t<record_t, args_t...>* get_lambda_method(std::size_t p_recordId = 0, std::size_t p_args_id = 0) const;
73-
7463
private:
7564

7665
using functor_t = std::optional<std::reference_wrapper<const dispatch::functor>>;

ReflectionTemplateLib/rtl/inc/type_meta.hpp

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -24,18 +24,6 @@
2424

2525
namespace rtl
2626
{
27-
template<class ...args_t>
28-
inline constexpr const type_meta::lambda_fn_t<args_t...>* type_meta::get_lambda_function(std::size_t p_argsId) const
29-
{
30-
return m_functor->get().m_lambda->to_function<args_t...>(p_argsId);
31-
}
32-
33-
template<class record_t, class ...args_t>
34-
inline constexpr const type_meta::lambda_mth_t<record_t, args_t...>* type_meta::get_lambda_method(std::size_t p_recordId, std::size_t p_argsId) const
35-
{
36-
return m_functor->get().m_lambda->to_method<record_t, args_t...>(p_recordId, p_argsId);
37-
}
38-
3927
template<class return_t, class ...signature_t>
4028
inline type_meta type_meta::add_function(return_t(*p_fptr)(signature_t...), traits::uid_t p_record_uid, detail::member p_member_kind, std::size_t p_index)
4129
{

0 commit comments

Comments
 (0)