Skip to content

Commit 2ae0414

Browse files
committed
organizing metadata: re-name/factor. wip.
1 parent 0943010 commit 2ae0414

File tree

14 files changed

+111
-151
lines changed

14 files changed

+111
-151
lines changed

ReflectionTemplateLib/rtl/cache/cache_function_ptr.h

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,17 +31,23 @@ namespace rtl::cache
3131
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
3232
{
3333
m_cache.emplace_back(std::make_pair(function_t(fptr, p_record_uid, member_kind), lambda_index));
34-
34+
3535
function_t& fn = m_cache.back().first;
36-
if (member_kind == detail::member::UserCtor) {
37-
fn.init_erased_ctor();
38-
}
39-
else {
40-
fn.init_erased_fn();
36+
if (member_kind == detail::member::None || member_kind == detail::member::Static) {
37+
fn.init_lambda();
4138
}
4239
return fn;
4340
}
4441

42+
template<class record_t>
43+
const dispatch::functor& push_ctor(traits::uid_t p_record_uid, std::size_t lambda_index) const
44+
{
45+
m_cache.emplace_back(std::make_pair(function_t(nullptr, p_record_uid, detail::member::UserCtor), lambda_index));
46+
function_t& fn = m_cache.back().first;
47+
fn.template init_lambda_ctor<record_t>();
48+
return fn;
49+
}
50+
4551
std::pair<dispatch::functor*, std::size_t> find(return_t(*fptr)(signature_t...)) const
4652
{
4753
for (auto& itr : m_cache)

ReflectionTemplateLib/rtl/dispatch/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
set(LOCAL_HEADERS
55

66
"${CMAKE_CURRENT_SOURCE_DIR}/functor.h"
7-
"${CMAKE_CURRENT_SOURCE_DIR}/fn_meta.h"
87
"${CMAKE_CURRENT_SOURCE_DIR}/fn_signature.h"
98
"${CMAKE_CURRENT_SOURCE_DIR}/fn_signature_rec.h"
109

ReflectionTemplateLib/rtl/dispatch/fn_meta.h

Lines changed: 0 additions & 53 deletions
This file was deleted.

ReflectionTemplateLib/rtl/dispatch/fn_signature.h

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,12 @@
1212
#pragma once
1313

1414
#include <variant>
15-
16-
#include "fn_meta.h"
15+
#include "rtl_forward_decls.h"
1716

1817
namespace rtl::dispatch
1918
{
2019
template<class...args_t>
21-
struct function_er_ctor : fn_lambda
20+
struct function_lambda<erase::t_ctor, args_t...> : lambda
2221
{
2322
using lambda_t = std::function<Return(alloc, traits::normal_sign_t<args_t>...)>;
2423

@@ -34,19 +33,19 @@ namespace rtl::dispatch
3433
m_lambda = lambda;
3534
}
3635

37-
template<class return_t, class ...signature_t>
38-
friend struct function_ptr;
36+
template<class, class ...>
37+
friend struct dispatch::function_ptr;
3938
};
4039
}
4140

4241

4342
namespace rtl::dispatch
4443
{
4544
template<class...args_t>
46-
struct function_er_return : fn_lambda
45+
struct function_lambda<erase::t_return, args_t...> : lambda
4746
{
48-
using lambda_vt = std::function<void(const fn_meta&, traits::normal_sign_t<args_t>...)>;
49-
using lambda_rt = std::function<std::any(const fn_meta&, traits::normal_sign_t<args_t>...)>;
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>...)>;
5049

5150
const lambda_vt& get_method_vhop() const {
5251
return std::get<lambda_vt>(m_lambda);
@@ -68,7 +67,7 @@ namespace rtl::dispatch
6867
m_lambda = lambda;
6968
}
7069

71-
template<class return_t, class ...signature_t>
72-
friend struct function_ptr;
70+
template<class, class ...>
71+
friend struct dispatch::function_ptr;
7372
};
7473
}

ReflectionTemplateLib/rtl/dispatch/fn_signature_rec.h

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

1414
#include <variant>
15-
16-
#include "fn_meta.h"
15+
#include "rtl_forward_decls.h"
1716

1817
namespace rtl::dispatch
1918
{
20-
template<class record_t, class...args_t>
21-
struct method_er_return : fn_lambda
19+
template<class place_t, class...args_t>
20+
struct method_lambda<erase::t_return, place_t, args_t...> : lambda
2221
{
23-
using lambda_vt = std::function<void(const fn_meta&, const record_t&, traits::normal_sign_t<args_t>...)>;
24-
using lambda_rt = std::function<std::any(const fn_meta&, const record_t&, traits::normal_sign_t<args_t>...)>;
22+
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>...)>;
2525

2626
const lambda_vt& get_method_vhop() const {
2727
return std::get<lambda_vt>(m_lambda);
@@ -48,11 +48,12 @@ namespace rtl::dispatch
4848

4949
namespace rtl::dispatch
5050
{
51-
template<class return_t, class...args_t>
52-
struct method_er_target : fn_lambda
51+
template<class place_t, class...args_t>
52+
struct method_lambda<erase::t_target, place_t, args_t...> : lambda
5353
{
54-
using lambda_vt = std::function<void(const fn_meta&, const rtl::RObject&, traits::normal_sign_t<args_t>...)>;
55-
using lambda_rt = std::function<return_t(const fn_meta&, const rtl::RObject&, traits::normal_sign_t<args_t>...)>;
54+
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>...)>;
5657

5758
const lambda_vt& get_method_vhop() const {
5859
return std::get<lambda_vt>(m_lambda);

ReflectionTemplateLib/rtl/dispatch/function_ptr.h

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,14 +49,15 @@ namespace rtl::dispatch
4949

5050
const functor_t m_functor;
5151

52-
using ctor_et = function_er_ctor<signature_t...>;
53-
using func_et = function_er_return<signature_t...>;
52+
using ctor_t = function_lambda<erase::t_ctor, signature_t...>;
53+
using func_t = function_lambda<erase::t_return, signature_t...>;
5454

55-
std::variant<func_et, ctor_et> erased_fn;
55+
std::variant<func_t, ctor_t> erased_fn;
5656

57-
void init_erased_fn();
57+
void init_lambda();
5858

59-
void init_erased_ctor();
59+
template<class record_t>
60+
void init_lambda_ctor();
6061

6162
template<class, class ...>
6263
friend struct cache::function_ptr;

ReflectionTemplateLib/rtl/dispatch/function_ptr.hpp

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,28 +14,36 @@
1414
#include "function_ptr.h"
1515
#include "fn_signature.h"
1616
#include "aware_return.h"
17+
#include "aware_constructor.h"
1718

1819
namespace rtl::dispatch
1920
{
2021
template<class return_t, class ...signature_t>
21-
void rtl::dispatch::function_ptr<return_t, signature_t...>::init_erased_fn()
22+
void rtl::dispatch::function_ptr<return_t, signature_t...>::init_lambda()
2223
{
23-
erased_fn = func_et();
24-
func_et& fn = std::get<func_et>(erased_fn);
25-
m_lambdas.push_back(&fn);
24+
erased_fn = func_t();
25+
func_t& fn = std::get<func_t>(erased_fn);
2626

27-
//if constexpr (std::is_void_v<return_t>) {
27+
if constexpr (std::is_void_v<return_t>) {
2828
// fn.set_method_vhop(aware_return<return_t, signature_t..>::get_lambda_void())
29-
//}
30-
//else {
29+
}
30+
else {
3131
// fn.set_method_rhop(aware_return<return_t, signature_t..>::get_lambda_any_return())
32-
//}
32+
}
33+
functor::m_lambdas = std::vector<lambda*>(1);
34+
functor::m_lambdas[index::erased_return] = (&fn);
3335
}
3436

3537
template<class return_t, class ...signature_t>
36-
void function_ptr<return_t, signature_t...>::init_erased_ctor()
38+
template<class record_t>
39+
void function_ptr<return_t, signature_t...>::init_lambda_ctor()
3740
{
38-
erased_fn = ctor_et();
39-
m_lambdas.push_back(&std::get<ctor_et>(erased_fn));
41+
erased_fn = ctor_t();
42+
ctor_t& fn = std::get<ctor_t>(erased_fn);
43+
44+
fn.set_ctor_hop(aware_constructor<record_t, signature_t...>::get_allocator());
45+
46+
functor::m_lambdas = std::vector<lambda*>(1);
47+
functor::m_lambdas[index::erased_ctor] = (&fn);
4048
}
4149
}

ReflectionTemplateLib/rtl/dispatch/functor.h

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,12 @@ namespace rtl::dispatch
4040
detail::member m_member_kind = detail::member::None;
4141

4242
enum index {
43-
ctor = 0, // constructor
44-
fn_eret = 0, // function-erased-return
45-
mth_eret = 0, // method-erased-return
46-
mth_etar = 1 // method-erased-target
43+
erased_ctor = 0,
44+
erased_return = 0,
45+
erased_target = 1
4746
};
4847

49-
std::vector<fn_lambda*> m_lambdas;
48+
std::vector<lambda*> m_lambdas;
5049

5150
private:
5251

ReflectionTemplateLib/rtl/dispatch/method_ptr.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,12 @@ namespace rtl::dispatch
5252

5353
const functor_t m_functor;
5454

55-
method_er_return<record_t, signature_t...> m_erased_target;
56-
method_er_target<return_t, signature_t...> m_erased_return;
55+
method_lambda<erase::t_return, record_t, signature_t...> m_erased_return;
56+
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
}

ReflectionTemplateLib/rtl/dispatch/method_ptr.hpp

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,21 +11,24 @@
1111

1212
#pragma once
1313

14-
#include "function_ptr.h"
14+
#include "method_ptr.h"
15+
#include "fn_signature_rec.h"
16+
#include "aware_return_n_target.h"
1517

1618
namespace rtl::dispatch
1719
{
18-
template<class return_t, class ...signature_t>
19-
void rtl::dispatch::function_ptr<return_t, signature_t...>::init_erased_fn()
20+
template<class record_t, class return_t, class ...signature_t>
21+
void method_ptr<record_t, return_t, signature_t...>::init_lambda()
2022
{
21-
erased_fn = func_et();
22-
m_lambdas.push_back(&std::get<func_et>(erased_fn));
23-
}
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+
//}
2429

25-
template<class return_t, class ...signature_t>
26-
void function_ptr<return_t, signature_t...>::init_erased_ctor()
27-
{
28-
erased_fn = ctor_et();
29-
m_lambdas.push_back(&std::get<ctor_et>(erased_fn));
30+
functor::m_lambdas = std::vector<lambda*>(2);
31+
functor::m_lambdas[index::erased_return] = (&m_erased_return);
32+
functor::m_lambdas[index::erased_target] = (&m_erased_target);
3033
}
3134
}

0 commit comments

Comments
 (0)