11 template <
typename T, n
bool isBaseObj>
class tbridger;
16 template <
typename Ret,
typename T,
template <
typename, n
bool>
class Marshaling,
typename... Args>
20 typedef Ret (T::*fptrType)(Args...);
27 *
new param(
"", Marshaling<Args,
tifSub<
typename typeTrait<Args>::Org,
node>::is>::onAddParam())...),
29 _src(dumSrc::singleton()) {}
33 allTrues<(
sizeof(Marshaling<Args, tifSub<typename typeTrait<Args>::Org,
node>::is>::canMarshal()) ==
34 sizeof(metaIf::yes))...>::value,
35 "can't marshal one of this func's parameter ntypes.");
38 const ntype& getType()
const override {
return _type; }
40 const baseObj& getOrigin()
const override {
47 str run(
const args& a)
override {
50 return _runNative(*evaluated);
53 void onCloneDeep(
const clonable& from)
override {
55 this->_type.onCloneDeep(rhs._type);
58 const src& getSrc()
const override {
return *_src; }
60 void setSrc(
const src& new1) { _src.bind(new1); }
71 template <
typename Ret,
typename T, n
bool isBaseObj,
template <
typename, n
bool>
class Marshaling,
typename... Args>
78 super(fptr, Marshaling<Ret,
tifSub<
typename typeTrait<Ret>::Org,
node>::is>::onGetRet()) {}
81 str _runNative(
args&
args)
override {
return _marshal(
args, std::index_sequence_for<Args...>()); }
83 template <
size_t... index>
str _marshal(
args&
args, std::index_sequence<index...>);
86 template <
typename T,
template <
typename, n
bool>
class Marshaling,
typename... Args>
92 tbridgeFunc(
typename super::fptrType fptr): super(fptr, Marshaling<void, false>::onGetRet()) {}
95 str _runNative(
args&
args)
override {
return _marshal(
args, std::index_sequence_for<Args...>()); }
97 template <
size_t... index>
str _marshal(
args&
args, std::index_sequence<index...>);
100 template <
typename T,
template <
typename, n
bool>
class Marshaling,
typename... Args>
106 tbridgeFunc(
typename super::fptrType fptr): super(fptr, Marshaling<void, false>::onGetRet()) {}
109 str _runNative(
args&
args)
override {
return _marshal(
args, std::index_sequence_for<Args...>()); }
111 template <
size_t... index>
str _marshal(
args& a, std::index_sequence<index...>) {
112 T& me = (T*) a.getMe() OR.err(
"object from frame does not exists.").ret(
str());
114 Marshaling<Args, tifSub<typename typeTrait<Args>::Org,
node>::is>::toNative(a[index])...);
115 return Marshaling<void, tifSub<void, node>::is>::toMgd();
119 template <
typename Ret,
typename T,
template <
typename, n
bool>
class Marshaling,
typename... Args>
126 super(fptr, Marshaling<Ret,
tifSub<
typename typeTrait<Ret>::Org,
node>::is>::onGetRet()) {}
129 str _runNative(
args&
args)
override {
return _marshal(
args, std::index_sequence_for<Args...>()); }
131 template <
size_t... index>
str _marshal(
args& a, std::index_sequence<index...>) {
132 T& me = (T*) a.getMe() OR.err(
"object from frame does not exists.").ret(
str());
133 return Marshaling<Ret, tifSub<typename typeTrait<Ret>::Org,
node>::is>::toMgd((me.*(this->_fptr))
134 (Marshaling<Args,
tifSub<
typename typeTrait<Args>::Org,
node>::is>::toNative(
Base class for all types without explicit super class.
Definition: adam.hpp:11
Function call arguments container.
Definition: args.hpp:13
Base class for all function types.
Definition: baseFunc.hpp:18
virtual params & getParams()
Base class for all objects in byeol language.
Definition: baseObj.hpp:24
Interface for objects that can be cloned.
Definition: clonable.hpp:12
Managed type for byeol objects.
Definition: mgdType.hpp:17
Base class for all AST nodes in byeol language.
Definition: node.hpp:30
Native type system for byeol language.
Definition: ntype.hpp:19
Managed object in byeol programming environment.
Definition: obj.hpp:19
Function parameter definition.
Definition: param.hpp:13
Function parameter list container.
Definition: params.hpp:15
Source location information.
Definition: src.hpp:11
Base bridge function template.
Definition: tbridgeFunc.hpp:17
Definition: tbridgeFunc.hpp:72
Bridge builder for C++ classes.
Definition: tbridger.hpp:18
Optional value wrapper with byeol-style interface.
Definition: tmay.hpp:18
Template type wrapper for type metadata management.
Definition: ttype.hpp:16
Type trait to check if T is subclass of super.
Definition: rtti.hpp:48