Skip to content

Commit 5b31ef8

Browse files
committed
organizing metadata: erased method lambda added.
1 parent b97efc2 commit 5b31ef8

File tree

10 files changed

+79
-16
lines changed

10 files changed

+79
-16
lines changed

ReflectionTemplateLib/rtl/dispatch/CMakeLists.txt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,17 @@
33
# Collect headers in this folder (absolute paths)
44
set(LOCAL_HEADERS
55

6-
"${CMAKE_CURRENT_SOURCE_DIR}/functor.h"
7-
"${CMAKE_CURRENT_SOURCE_DIR}/fn_signature.h"
8-
"${CMAKE_CURRENT_SOURCE_DIR}/fn_signature_rec.h"
6+
"${CMAKE_CURRENT_SOURCE_DIR}/functor.h"
97

108
"${CMAKE_CURRENT_SOURCE_DIR}/method_ptr.h"
119
"${CMAKE_CURRENT_SOURCE_DIR}/method_ptr.hpp"
12-
"${CMAKE_CURRENT_SOURCE_DIR}/function_ptr.h"
13-
"${CMAKE_CURRENT_SOURCE_DIR}/function_ptr.hpp"
10+
"${CMAKE_CURRENT_SOURCE_DIR}/method_lambda.h"
1411
"${CMAKE_CURRENT_SOURCE_DIR}/method_ptr_const.h"
1512
"${CMAKE_CURRENT_SOURCE_DIR}/method_ptr_const.hpp"
13+
14+
"${CMAKE_CURRENT_SOURCE_DIR}/function_ptr.h"
15+
"${CMAKE_CURRENT_SOURCE_DIR}/function_ptr.hpp"
16+
"${CMAKE_CURRENT_SOURCE_DIR}/function_lambda.h"
1617

1718
"${CMAKE_CURRENT_SOURCE_DIR}/lambda_base.h"
1819
"${CMAKE_CURRENT_SOURCE_DIR}/lambda_method.h"

ReflectionTemplateLib/rtl/dispatch/fn_signature.h renamed to ReflectionTemplateLib/rtl/dispatch/function_lambda.h

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,4 +85,54 @@ namespace rtl::dispatch
8585
template<class, class ...>
8686
friend struct dispatch::function_ptr;
8787
};
88+
}
89+
90+
91+
namespace rtl::dispatch
92+
{
93+
template<class...args_t>
94+
struct function_lambda<fn_void::yes, erase::t_method, args_t...> : lambda
95+
{
96+
using lambda_t = std::function<void(const lambda_base&, const RObject&, traits::normal_sign_t<args_t>...)>;
97+
98+
const lambda_t& get_hop() const {
99+
return m_lambda;
100+
}
101+
102+
private:
103+
104+
void set_hop(const lambda_t& lambda) {
105+
m_lambda = lambda;
106+
}
107+
108+
lambda_t m_lambda;
109+
110+
template<class, class, class ...>
111+
friend struct dispatch::method_ptr;
112+
};
113+
}
114+
115+
116+
namespace rtl::dispatch
117+
{
118+
template<class...args_t>
119+
struct function_lambda<fn_void::no, erase::t_method, args_t...> : lambda
120+
{
121+
using lambda_t = std::function<std::any(const lambda_base&, const RObject&, traits::normal_sign_t<args_t>...)>;
122+
123+
const lambda_t& get_hop() const {
124+
return m_lambda;
125+
}
126+
127+
private:
128+
129+
void set_hop(const lambda_t& lambda) {
130+
m_lambda = lambda;
131+
}
132+
133+
lambda_t m_lambda;
134+
135+
template<class, class, class ...>
136+
friend struct dispatch::method_ptr;
137+
};
88138
}

ReflectionTemplateLib/rtl/dispatch/function_ptr.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
#include <variant>
1515

1616
#include "functor.h"
17-
#include "fn_signature.h"
17+
#include "function_lambda.h"
1818

1919
namespace rtl::dispatch
2020
{

ReflectionTemplateLib/rtl/dispatch/function_ptr.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
#pragma once
1313

1414
#include "function_ptr.h"
15-
#include "fn_signature.h"
15+
#include "function_lambda.h"
1616
#include "aware_return.h"
1717
#include "aware_constructor.h"
1818

ReflectionTemplateLib/rtl/dispatch/method_ptr.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,7 @@
1111

1212
#pragma once
1313

14-
#include <variant>
15-
1614
#include "functor.h"
17-
#include "fn_signature_rec.h"
1815

1916
namespace rtl::dispatch
2017
{
@@ -54,6 +51,7 @@ namespace rtl::dispatch
5451

5552
static constexpr auto fn_void_v = (std::is_void_v<return_t> ? fn_void::yes : fn_void::no);
5653

54+
function_lambda<fn_void_v, erase::t_method, signature_t...> m_erased_method;
5755
method_lambda<fn_void_v, erase::t_return, record_t, signature_t...> m_erased_return;
5856
method_lambda<fn_void_v, erase::t_target, return_t, signature_t...> m_erased_target;
5957

ReflectionTemplateLib/rtl/dispatch/method_ptr.hpp

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212
#pragma once
1313

1414
#include "method_ptr.h"
15-
#include "fn_signature_rec.h"
15+
#include "method_lambda.h"
16+
#include "function_lambda.h"
1617
#include "aware_return_n_target.h"
1718

1819
namespace rtl::dispatch
@@ -23,26 +24,39 @@ namespace rtl::dispatch
2324
if constexpr (fn_void_v == fn_void::yes)
2425
{
2526
{
27+
// erased-return-aware-target (e_return_a_target)
2628
const auto& fn = aware_return_n_target<record_t, return_t, signature_t...>::e_return_a_target_fnv();
2729
m_erased_return.set_hop(fn);
2830
} {
31+
// erased-target-aware-return (e_target_a_return)
2932
const auto& fn = aware_return_n_target<record_t, return_t, signature_t...>::e_target_a_return_fnv();
3033
m_erased_target.set_hop(fn);
34+
} {
35+
// erased-return-erased-target (e_return_e_target)
36+
const auto& fn = aware_return_n_target<record_t, return_t, signature_t...>::e_return_e_target_fnv();
37+
m_erased_method.set_hop(fn);
3138
}
3239
}
3340
else
3441
{
3542
{
43+
// erased-return-aware-target (e_return_a_target)
3644
const auto& fn = aware_return_n_target<record_t, return_t, signature_t...>::e_return_a_target_fnr();
3745
m_erased_return.set_hop(fn);
3846
} {
47+
// erased-target-aware-return (e_target_a_return)
3948
const auto& fn = aware_return_n_target<record_t, return_t, signature_t...>::e_target_a_return_fnr();
4049
m_erased_target.set_hop(fn);
50+
} {
51+
// erased-return-erased-target (e_return_e_target)
52+
const auto& fn = aware_return_n_target<record_t, return_t, signature_t...>::e_return_e_target_fnr();
53+
m_erased_method.set_hop(fn);
4154
}
4255
}
4356

44-
functor::m_lambdas = std::vector<lambda*>(2);
57+
functor::m_lambdas = std::vector<lambda*>(3);
4558
functor::m_lambdas[index::erased_return] = (&m_erased_return);
4659
functor::m_lambdas[index::erased_target] = (&m_erased_target);
60+
functor::m_lambdas[index::erased_method] = (&m_erased_method);
4761
}
4862
}

ReflectionTemplateLib/rtl/dispatch/method_ptr_const.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
#include <tuple>
1515

1616
#include "functor.h"
17-
#include "fn_signature_rec.h"
17+
#include "method_lambda.h"
1818

1919
namespace rtl::dispatch
2020
{

ReflectionTemplateLib/rtl/dispatch/method_ptr_const.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111

1212
#pragma once
1313

14+
#include "method_lambda.h"
1415
#include "method_ptr_const.h"
15-
#include "fn_signature_rec.h"
1616
#include "aware_return_n_target_const.h"
1717

1818
namespace rtl::dispatch

ReflectionTemplateLib/rtl/rtl_forward_decls.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,6 @@ namespace rtl
8888
template<class record_t, class ...signature_t>
8989
struct lambda_method;
9090

91-
struct functor;
92-
9391
struct lambda_base;
9492

9593
struct erasure_base;
@@ -108,6 +106,8 @@ namespace rtl
108106

109107

110108
//--- These should be enough for replacement.
109+
struct functor;
110+
111111
struct lambda {};
112112

113113
enum class fn_void {

0 commit comments

Comments
 (0)