Skip to content

Commit 1278e71

Browse files
committed
organizing metadata: wip.
1 parent 2ae0414 commit 1278e71

File tree

14 files changed

+163
-87
lines changed

14 files changed

+163
-87
lines changed

ReflectionTemplateLib/rtl/cache/cache_function_ptr.h

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,10 @@ namespace rtl::cache
2828
return instance_;
2929
}
3030

31-
const dispatch::functor& push(return_t(*fptr)(signature_t...), traits::uid_t p_record_uid, detail::member member_kind, std::size_t lambda_index) const
31+
const dispatch::functor& push_ctor(return_t(*fptr)(signature_t...), traits::uid_t p_record_uid, std::size_t lambda_index) const
3232
{
33-
m_cache.emplace_back(std::make_pair(function_t(fptr, p_record_uid, member_kind), lambda_index));
34-
35-
function_t& fn = m_cache.back().first;
36-
if (member_kind == detail::member::None || member_kind == detail::member::Static) {
37-
fn.init_lambda();
38-
}
39-
return fn;
33+
m_cache.emplace_back(std::make_pair(function_t(fptr, p_record_uid, detail::member::DefaultCtor), lambda_index));
34+
return m_cache.back().first;
4035
}
4136

4237
template<class record_t>
@@ -48,6 +43,17 @@ namespace rtl::cache
4843
return fn;
4944
}
5045

46+
const dispatch::functor& push(return_t(*fptr)(signature_t...), traits::uid_t p_record_uid, detail::member member_kind, std::size_t lambda_index) const
47+
{
48+
m_cache.emplace_back(std::make_pair(function_t(fptr, p_record_uid, member_kind), lambda_index));
49+
50+
function_t& fn = m_cache.back().first;
51+
if (member_kind == detail::member::None || member_kind == detail::member::Static) {
52+
fn.init_lambda();
53+
}
54+
return fn;
55+
}
56+
5157
std::pair<dispatch::functor*, std::size_t> find(return_t(*fptr)(signature_t...)) const
5258
{
5359
for (auto& itr : m_cache)

ReflectionTemplateLib/rtl/cache/cache_method_ptr.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
#include <list>
1515

16-
#include "method_ptr.h"
16+
#include "method_ptr.hpp"
1717

1818
namespace rtl::cache
1919
{
@@ -33,7 +33,9 @@ namespace rtl::cache
3333
const dispatch::functor& push(functor_t fptr, std::size_t lambda_index) const
3434
{
3535
m_cache.emplace_back(std::make_pair(method_t(fptr), lambda_index));
36-
return m_cache.back().first;
36+
method_t& fn = m_cache.back().first;
37+
fn.init_lambda();
38+
return fn;
3739
}
3840

3941
std::pair<dispatch::functor*, std::size_t> find(functor_t fptr) const

ReflectionTemplateLib/rtl/cache/cache_method_ptr_const.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
#include <list>
1515

16-
#include "method_ptr_const.h"
16+
#include "method_ptr_const.hpp"
1717

1818
namespace rtl::cache
1919
{
@@ -33,7 +33,9 @@ namespace rtl::cache
3333
const dispatch::functor& push(functor_t fptr, std::size_t lambda_index) const
3434
{
3535
m_cache.emplace_back(std::make_pair(method_t(fptr), lambda_index));
36-
return m_cache.back().first;
36+
method_t& fn = m_cache.back().first;
37+
//fn.init_lambda();
38+
return fn;
3739
}
3840

3941
std::pair<const dispatch::functor*, std::size_t> find(functor_t fptr) const

ReflectionTemplateLib/rtl/dispatch/fn_signature.h

Lines changed: 33 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,22 @@
1717
namespace rtl::dispatch
1818
{
1919
template<class...args_t>
20-
struct function_lambda<erase::t_ctor, args_t...> : lambda
20+
struct function_lambda<fn_void::no, erase::t_ctor, args_t...> : lambda
2121
{
2222
using lambda_t = std::function<Return(alloc, traits::normal_sign_t<args_t>...)>;
2323

24-
const lambda_t& get_ctor_hop() const {
24+
const lambda_t& get_hop() const {
2525
return m_lambda;
2626
}
2727

2828
private:
2929

30-
lambda_t m_lambda;
31-
32-
void set_ctor_hop(const lambda_t& lambda) {
30+
void set_hop(const lambda_t& lambda) {
3331
m_lambda = lambda;
3432
}
3533

34+
lambda_t m_lambda;
35+
3636
template<class, class ...>
3737
friend struct dispatch::function_ptr;
3838
};
@@ -42,31 +42,47 @@ namespace rtl::dispatch
4242
namespace rtl::dispatch
4343
{
4444
template<class...args_t>
45-
struct function_lambda<erase::t_return, args_t...> : lambda
45+
struct function_lambda<fn_void::yes, erase::t_return, args_t...> : lambda
4646
{
47-
using lambda_vt = std::function<void(const functor&, traits::normal_sign_t<args_t>...)>;
48-
using lambda_rt = std::function<std::any(const functor&, traits::normal_sign_t<args_t>...)>;
47+
using lambda_t = std::function<void(const lambda_base&, traits::normal_sign_t<args_t>...)>;
4948

50-
const lambda_vt& get_method_vhop() const {
51-
return std::get<lambda_vt>(m_lambda);
49+
const lambda_t& get_hop() const {
50+
return m_lambda;
5251
}
5352

54-
const lambda_rt& get_method_rhop() const {
55-
return std::get<lambda_rt>(m_lambda);
53+
private:
54+
55+
void set_hop(const lambda_t& lambda) {
56+
m_lambda = lambda;
5657
}
5758

58-
private:
59+
lambda_t m_lambda;
60+
61+
template<class, class ...>
62+
friend struct dispatch::function_ptr;
63+
};
64+
}
5965

60-
std::variant<lambda_vt, lambda_rt> m_lambda;
6166

62-
void set_method_vhop(const lambda_vt& lambda) {
63-
m_lambda = lambda;
67+
namespace rtl::dispatch
68+
{
69+
template<class...args_t>
70+
struct function_lambda<fn_void::no, erase::t_return, args_t...> : lambda
71+
{
72+
using lambda_t = std::function<std::any(const lambda_base&, traits::normal_sign_t<args_t>...)>;
73+
74+
const lambda_t& get_hop() const {
75+
return m_lambda;
6476
}
6577

66-
void set_method_rhop(const lambda_rt& lambda) {
78+
private:
79+
80+
void set_hop(const lambda_t& lambda) {
6781
m_lambda = lambda;
6882
}
6983

84+
lambda_t m_lambda;
85+
7086
template<class, class ...>
7187
friend struct dispatch::function_ptr;
7288
};

ReflectionTemplateLib/rtl/dispatch/fn_signature_rec.h

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,28 +20,31 @@ namespace rtl::dispatch
2020
struct method_lambda<erase::t_return, place_t, args_t...> : lambda
2121
{
2222
using record_t = place_t;
23-
using lambda_vt = std::function<void(const functor&, const record_t&, traits::normal_sign_t<args_t>...)>;
24-
using lambda_rt = std::function<std::any(const functor&, const record_t&, traits::normal_sign_t<args_t>...)>;
23+
using lambda_vt = std::function<void(const lambda_base&, const record_t&, traits::normal_sign_t<args_t>...)>;
24+
using lambda_rt = std::function<std::any(const lambda_base&, const record_t&, traits::normal_sign_t<args_t>...)>;
2525

26-
const lambda_vt& get_method_vhop() const {
26+
const lambda_vt& get_vhop() const {
2727
return std::get<lambda_vt>(m_lambda);
2828
}
2929

30-
const lambda_rt& get_method_rhop() const {
30+
const lambda_rt& get_rhop() const {
3131
return std::get<lambda_rt>(m_lambda);
3232
}
3333

3434
private:
3535

3636
std::variant<lambda_vt, lambda_rt> m_lambda;
3737

38-
void set_method_vhop(const lambda_vt& lambda) {
38+
void set_vhop(const lambda_vt& lambda) {
3939
m_lambda = lambda;
4040
}
4141

42-
void set_method_rhop(const lambda_rt& lambda) {
42+
void set_rhop(const lambda_rt& lambda) {
4343
m_lambda = lambda;
4444
}
45+
46+
template<class, class , class...>
47+
friend struct method_ptr;
4548
};
4649
}
4750

@@ -52,27 +55,30 @@ namespace rtl::dispatch
5255
struct method_lambda<erase::t_target, place_t, args_t...> : lambda
5356
{
5457
using return_t = place_t;
55-
using lambda_vt = std::function<void(const functor&, const rtl::RObject&, traits::normal_sign_t<args_t>...)>;
56-
using lambda_rt = std::function<return_t(const functor&, const rtl::RObject&, traits::normal_sign_t<args_t>...)>;
58+
using lambda_vt = std::function<void(const lambda_base&, const rtl::RObject&, traits::normal_sign_t<args_t>...)>;
59+
using lambda_rt = std::function<return_t(const lambda_base&, const rtl::RObject&, traits::normal_sign_t<args_t>...)>;
5760

58-
const lambda_vt& get_method_vhop() const {
61+
const lambda_vt& get_vhop() const {
5962
return std::get<lambda_vt>(m_lambda);
6063
}
6164

62-
const lambda_rt& get_method_rhop() const {
65+
const lambda_rt& get_rhop() const {
6366
return std::get<lambda_rt>(m_lambda);
6467
}
6568

6669
private:
6770

6871
std::variant<lambda_vt, lambda_rt> m_lambda;
6972

70-
void set_method_vhop(const lambda_vt& lambda) {
73+
void set_vhop(const lambda_vt& lambda) {
7174
m_lambda = lambda;
7275
}
7376

74-
void set_method_rhop(const lambda_rt& lambda) {
77+
void set_rhop(const lambda_rt& lambda) {
7578
m_lambda = lambda;
7679
}
80+
81+
template<class, class, class...>
82+
friend struct method_ptr;
7783
};
7884
}

ReflectionTemplateLib/rtl/dispatch/function_ptr.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,12 @@ namespace rtl::dispatch
4949

5050
const functor_t m_functor;
5151

52-
using ctor_t = function_lambda<erase::t_ctor, signature_t...>;
53-
using func_t = function_lambda<erase::t_return, signature_t...>;
52+
static constexpr auto fn_void_v = (std::is_void_v<return_t> ? fn_void::yes : fn_void::no);
5453

55-
std::variant<func_t, ctor_t> erased_fn;
54+
using ctor_t = function_lambda<fn_void::no, erase::t_ctor, signature_t...>;
55+
using func_t = function_lambda<fn_void_v, erase::t_return, signature_t...>;
56+
57+
std::variant<ctor_t, func_t> m_lambda;
5658

5759
void init_lambda();
5860

ReflectionTemplateLib/rtl/dispatch/function_ptr.hpp

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -19,31 +19,33 @@
1919
namespace rtl::dispatch
2020
{
2121
template<class return_t, class ...signature_t>
22-
void rtl::dispatch::function_ptr<return_t, signature_t...>::init_lambda()
22+
template<class record_t>
23+
void function_ptr<return_t, signature_t...>::init_lambda_ctor()
2324
{
24-
erased_fn = func_t();
25-
func_t& fn = std::get<func_t>(erased_fn);
25+
m_lambda = ctor_t();
26+
ctor_t& fn = m_lambda.emplace<ctor_t>();
27+
28+
fn.set_hop(aware_constructor<record_t, signature_t...>::get_allocator());
2629

27-
if constexpr (std::is_void_v<return_t>) {
28-
// fn.set_method_vhop(aware_return<return_t, signature_t..>::get_lambda_void())
29-
}
30-
else {
31-
// fn.set_method_rhop(aware_return<return_t, signature_t..>::get_lambda_any_return())
32-
}
3330
functor::m_lambdas = std::vector<lambda*>(1);
34-
functor::m_lambdas[index::erased_return] = (&fn);
31+
functor::m_lambdas[index::erased_ctor] = (&fn);
3532
}
3633

34+
3735
template<class return_t, class ...signature_t>
38-
template<class record_t>
39-
void function_ptr<return_t, signature_t...>::init_lambda_ctor()
36+
void rtl::dispatch::function_ptr<return_t, signature_t...>::init_lambda()
4037
{
41-
erased_fn = ctor_t();
42-
ctor_t& fn = std::get<ctor_t>(erased_fn);
38+
m_lambda = func_t();
39+
func_t& fn = m_lambda.emplace<func_t>();
4340

44-
fn.set_ctor_hop(aware_constructor<record_t, signature_t...>::get_allocator());
41+
if constexpr (fn_void_v == fn_void::yes) {
42+
fn.set_hop(aware_return<return_t, signature_t...>::get_lambda_void());
43+
}
44+
else {
45+
fn.set_hop(aware_return<return_t, signature_t...>::get_lambda_any_return());
46+
}
4547

4648
functor::m_lambdas = std::vector<lambda*>(1);
47-
functor::m_lambdas[index::erased_ctor] = (&fn);
49+
functor::m_lambdas[index::erased_return] = (&fn);
4850
}
4951
}

ReflectionTemplateLib/rtl/dispatch/functor.h

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,13 @@ namespace rtl::dispatch
2323

2424
protected:
2525

26+
enum index {
27+
erased_ctor = 0,
28+
erased_return = 0,
29+
erased_target = 1,
30+
erased_method = 2
31+
};
32+
2633
std::string m_record_str;
2734
std::string m_return_str;
2835
std::string m_signature_str;
@@ -39,12 +46,6 @@ namespace rtl::dispatch
3946

4047
detail::member m_member_kind = detail::member::None;
4148

42-
enum index {
43-
erased_ctor = 0,
44-
erased_return = 0,
45-
erased_target = 1
46-
};
47-
4849
std::vector<lambda*> m_lambdas;
4950

5051
private:

ReflectionTemplateLib/rtl/dispatch/method_ptr.hpp

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,26 @@ namespace rtl::dispatch
2020
template<class record_t, class return_t, class ...signature_t>
2121
void method_ptr<record_t, return_t, signature_t...>::init_lambda()
2222
{
23-
//if constexpr (std::is_void_v<return_t>) {
24-
// m_erased_return.
25-
//}
26-
//else {
27-
// // fn.set_method_rhop(aware_return<return_t, signature_t..>::get_lambda_any_return())
28-
//}
23+
if constexpr (std::is_void_v<return_t>)
24+
{
25+
{
26+
const auto& fn = aware_return_n_target<record_t, return_t, signature_t...>::e_return_a_target_fnv();
27+
m_erased_return.set_vhop(fn);
28+
} {
29+
//const auto& fn = aware_return_n_target<record_t, return_t, signature_t...>::e_target_a_return_fnv();
30+
//m_erased_target.set_vhop(fn);
31+
}
32+
}
33+
else
34+
{
35+
{
36+
const auto& fn = aware_return_n_target<record_t, return_t, signature_t...>::e_return_a_target_fnr();
37+
m_erased_return.set_rhop(fn);
38+
} {
39+
const auto& fn = aware_return_n_target<record_t, return_t, signature_t...>::e_target_a_return_fnr();
40+
m_erased_target.set_rhop(fn);
41+
}
42+
}
2943

3044
functor::m_lambdas = std::vector<lambda*>(2);
3145
functor::m_lambdas[index::erased_return] = (&m_erased_return);

ReflectionTemplateLib/rtl/dispatch/method_ptr_const.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,5 +54,10 @@ namespace rtl::dispatch
5454

5555
method_lambda<erase::t_return, record_t, signature_t...> m_erased_return;
5656
method_lambda<erase::t_target, return_t, signature_t...> m_erased_target;
57+
58+
void init_lambda();
59+
60+
template<class, class, class ...>
61+
friend struct cache::method_ptr;
5762
};
5863
}

0 commit comments

Comments
 (0)