summaryrefslogtreecommitdiff
path: root/modules/lang/c++/c_transfer.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'modules/lang/c++/c_transfer.hpp')
-rw-r--r--modules/lang/c++/c_transfer.hpp39
1 files changed, 39 insertions, 0 deletions
diff --git a/modules/lang/c++/c_transfer.hpp b/modules/lang/c++/c_transfer.hpp
index 5de204c..953f732 100644
--- a/modules/lang/c++/c_transfer.hpp
+++ b/modules/lang/c++/c_transfer.hpp
@@ -4,4 +4,43 @@
#include "c_types.hpp"
namespace saw {
+namespace impl {
+template<typename T, typename Enc>
+struct c_transfer_generater;
+
+template<typename T, typename Enc>
+struct c_transfer_generater<T,Enc> {
+public:
+ static error_or<void> apply (const lang_c::config& cfg, lang_c::transfer_binding_state& state){
+
+ return make_error<err::not_implemented>();
+ }
+};
+
+template<typename... TransTypes, typename Enc>
+struct c_transfer_generater<tmpl_group<TransTypes...>, Enc> {
+private:
+ // Not used currently
+ using ReducedTmplGroup = typename tmpl_reduce<tmpl_group<TransTypes...>>::type;
+private:
+ template<uint64_t i>
+ static error_or<void> apply_ele(const lang_c::config& cfg, lang_c::transfer_binding_state& state){
+ if constexpr ( i < sizeof...(TransTypes)){
+ {
+ using pType = typename parameter_pack_type<i, TransTypes...>::type;
+ auto eov = c_transfer_generater<pType, Enc>::apply(cfg,state);
+ if(eov.is_error()){
+ return eov;
+ }
+ }
+ return apply_ele<i+1u>(cfg,state);
+ }
+ return make_void();
+ }
+public:
+ static error_or<void> apply(const lang_c::config& cfg, lang_c::transfer_binding_state& state){
+ return apply_ele<0u>(cfg, state);
+ }
+};
+}
}