Skip to content

Commit 5c7ed65

Browse files
committed
new-ctor-apis: code fixes. wip.
1 parent d514c4f commit 5c7ed65

File tree

3 files changed

+21
-11
lines changed

3 files changed

+21
-11
lines changed

ReflectionTemplateLib/rtl/cache/cache_lambda_function.h

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

30-
template<detail::member mem_kind>
3130
std::pair<const dispatch::lambda_base*, const dispatch::erasure_base*> push(const dispatch::functor& p_functor) const
3231
{
33-
static_assert(mem_kind != detail::member::DefaultCtor, "default-ctor not cached here.");
32+
using erase_ret_t = dispatch::erase_return<traits::normal_sign_t<signature_t>...>;
33+
m_erasure_cache.emplace_back(erase_ret_t());
34+
35+
erase_ret_t& eb = m_erasure_cache.back();
36+
eb.template init_lambdas<detail::member::None, return_t, signature_t...>();
37+
38+
m_cache.push_back(dispatch::lambda_function<signature_t...>(p_functor, eb));
39+
return { &m_cache.back(), &eb };
40+
}
3441

42+
template<class record_t>
43+
std::pair<const dispatch::lambda_base*, const dispatch::erasure_base*> push(const dispatch::functor& p_functor) const
44+
{
3545
using erase_ret_t = dispatch::erase_return<traits::normal_sign_t<signature_t>...>;
3646
m_erasure_cache.emplace_back(erase_ret_t());
3747

3848
erase_ret_t& eb = m_erasure_cache.back();
39-
eb.template init_lambdas<mem_kind, return_t, signature_t...>();
49+
eb.template init_lambdas<detail::member::UserCtor, record_t, signature_t...>();
4050

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

ReflectionTemplateLib/rtl/erasure/aware_constructor.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,10 @@ namespace rtl::dispatch
3838
else if (p_alloc_on == alloc::Heap)
3939
{
4040
return {
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-
//)
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+
)
4545
};
4646
}
4747
return { error::EmptyRObject, RObject{} }; //dead code. compiler warning omitted.

ReflectionTemplateLib/rtl/inc/type_meta.hpp

Lines changed: 4 additions & 4 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.template push<detail::member::None>(functor);
49+
auto [lambda, elambda] = lc.push(functor);
5050

5151
functor.set_lambda(lambda);
5252
functor.set_erasure(elambda);
@@ -99,11 +99,11 @@ namespace rtl
9999
}
100100
else
101101
{
102-
auto& fc = cache::function_ptr<Return, alloc, signature_t...>::instance();
103-
auto& lc = cache::lambda_function<Return, alloc, signature_t...>::instance();
102+
auto& fc = cache::function_ptr<Return, signature_t...>::instance();
103+
auto& lc = cache::lambda_function<Return, signature_t...>::instance();
104104

105105
auto& functor = fc.push(nullptr, traits::uid<record_t>::value, detail::member::UserCtor, p_index);
106-
auto [lambda, elambda] = lc.template push<detail::member::UserCtor>(functor);
106+
auto [lambda, elambda] = lc.template push<record_t>(functor);
107107

108108
functor.set_lambda(lambda);
109109
functor.set_erasure(elambda);

0 commit comments

Comments
 (0)