diff options
Diffstat (limited to 'modules/lang/c++/c_transfer.hpp')
-rw-r--r-- | modules/lang/c++/c_transfer.hpp | 39 |
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); + } +}; +} } |