Skip to content

Commit af2a203

Browse files
committed
new ctor api setup, wip
1 parent e08ab47 commit af2a203

File tree

8 files changed

+31
-23
lines changed

8 files changed

+31
-23
lines changed

ReflectionTemplateLib/rtl/cache/cache_lambda_function.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,16 @@ namespace rtl::cache
2727
return instance_;
2828
}
2929

30+
template<detail::member mem_kind>
3031
std::pair<const dispatch::lambda_base*, const dispatch::erasure_base*> push(const dispatch::functor& p_functor) const
3132
{
33+
static_assert(mem_kind != detail::member::DefaultCtor, "default-ctor not cached here.");
34+
3235
using erase_ret_t = dispatch::erase_return<traits::normal_sign_t<signature_t>...>;
3336
m_erasure_cache.emplace_back(erase_ret_t());
3437

3538
erase_ret_t& eb = m_erasure_cache.back();
36-
eb.template init_base<false, return_t, signature_t...>();
39+
eb.template init_lambdas<mem_kind, return_t, signature_t...>();
3740

3841
m_cache.push_back(dispatch::lambda_function<signature_t...>(p_functor, eb));
3942
return { &m_cache.back(), &eb };

ReflectionTemplateLib/rtl/cache/cache_lambda_method.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ namespace rtl::cache
3333
m_erasure_cache.emplace_back(dispatch::aware_return_n_target<record_t, return_t, signature_t...>());
3434

3535
auto& eb = m_erasure_cache.back();
36-
eb.init_base();
36+
eb.init_lambdas();
3737
m_cache.push_back(dispatch::lambda_method<record_t, signature_t...>(p_functor, eb));
3838

3939
return { &m_cache.back(), &eb };

ReflectionTemplateLib/rtl/erasure/aware_constructor.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ namespace rtl::dispatch
1919
template<class record_t, class ...signature_t>
2020
struct aware_constructor
2121
{
22-
static Return get_allocator()
22+
static auto get_allocator()
2323
{
2424
return [](alloc p_alloc_on, traits::normal_sign_t<signature_t>&&...params)-> Return
2525
{
@@ -38,10 +38,10 @@ namespace rtl::dispatch
3838
else if (p_alloc_on == alloc::Heap)
3939
{
4040
return {
41-
error::None,
42-
detail::RObjectBuilder<record_t*>::template build<alloc::Heap>(
43-
new record_t(std::forward<signature_t>(params)...), &aware_constructor<record_t>::cloner, true
44-
)
41+
error::None, RObject{}
42+
//detail::RObjectBuilder<record_t*>::template build<alloc::Heap>(
43+
// new record_t(std::forward<signature_t>(params)...), &aware_constructor<record_t>::cloner, true
44+
//)
4545
};
4646
}
4747
return { error::EmptyRObject, RObject{} }; //dead code. compiler warning omitted.

ReflectionTemplateLib/rtl/erasure/aware_return_n_target.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ namespace rtl::dispatch
3434

3535
constexpr static bool is_void = (std::is_void_v<return_t>);
3636

37-
void init_base()
37+
void init_lambdas()
3838
{
3939
constexpr static bool is_const_cast_safe = (!traits::is_const_v<return_t>);
4040
base_t::m_return_id = detail::RObjectId::create<return_t, alloc::Stack>(is_const_cast_safe);

ReflectionTemplateLib/rtl/erasure/aware_return_n_target_const.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ namespace rtl::dispatch
3434

3535
constexpr static bool is_void = (std::is_void_v<return_t>);
3636

37-
void init_base()
37+
void init_lambdas()
3838
{
3939
constexpr static bool is_const_cast_safe = (!traits::is_const_v<return_t>);
4040
base_t::m_return_id = detail::RObjectId::create<return_t, alloc::Stack>(is_const_cast_safe);

ReflectionTemplateLib/rtl/erasure/erase_return.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,10 @@ namespace rtl::dispatch
3939

4040
lambda_ctor_t m_ctor_hopper = nullptr;
4141

42-
template<bool is_ctor, class return_t, class...signature_t>
43-
void init_base()
42+
template<detail::member mem_kind, class return_t, class...signature_t>
43+
void init_lambdas()
4444
{
45-
if constexpr (is_ctor)
45+
if constexpr (mem_kind == detail::member::UserCtor)
4646
{
4747
using record_t = return_t;
4848
m_ctor_hopper = aware_constructor<record_t, signature_t...>::get_allocator();

ReflectionTemplateLib/rtl/inc/type_meta.hpp

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ namespace rtl
4646
auto& lc = cache::lambda_function<return_t, signature_t...>::instance();
4747

4848
auto& functor = fc.push(p_fptr, p_record_uid, p_member_kind, p_index);
49-
auto [lambda, elambda] = lc.push(functor);
49+
auto [lambda, elambda] = lc.push<detail::member::None>(functor);
5050

5151
functor.set_lambda(lambda);
5252
functor.set_erasure(elambda);
@@ -93,17 +93,22 @@ namespace rtl
9393
if constexpr (sizeof...(signature_t) == 0)
9494
{
9595
auto& fc = cache::function_ptr<Return, alloc>::instance();
96-
auto& lc = cache::lambda_function<Return, alloc>::instance();
97-
9896
auto fptr = &dispatch::aware_constructor<record_t>::allocator;
97+
auto& functor = fc.push(fptr, traits::uid<record_t>::value, detail::member::DefaultCtor, p_index);
98+
return type_meta(functor);
99+
}
100+
else
101+
{
102+
auto& fc = cache::function_ptr<Return, alloc, signature_t...>::instance();
103+
auto& lc = cache::lambda_function<Return, alloc, signature_t...>::instance();
104+
105+
auto& functor = fc.push(nullptr, traits::uid<record_t>::value, detail::member::UserCtor, p_index);
106+
auto [lambda, elambda] = lc.push<detail::member::UserCtor>(functor);
99107

100-
//auto& functor = fc.push(fptr, traits::uid<record_t>::value, detail::member::Ctor, p_index);
101-
//auto [lambda, elambda] = lc.push(functor);
108+
functor.set_lambda(lambda);
109+
functor.set_erasure(elambda);
102110

103-
//functor.set_lambda(lambda);
104-
//functor.set_erasure(elambda);
105-
//return type_meta(functor);
111+
return type_meta(functor);
106112
}
107-
return type_meta();
108113
}
109114
}

ReflectionTemplateLib/rtl/rtl_constants.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,8 +133,8 @@ namespace rtl::detail
133133
Const, // Const-qualified instance method
134134
NonConst, // Non-const instance method
135135
Static, // Static methods
136-
Ctor,
137-
CopyCtor
136+
UserCtor,
137+
DefaultCtor
138138
};
139139

140140
constexpr const std::string_view NAMESPACE_GLOBAL = "global";

0 commit comments

Comments
 (0)