blob: 953f7328ef77771331f863fb9d77b675e0c2a664 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
#pragma once
#include "language.hpp"
#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);
}
};
}
}
|