6 #ifndef TURI_UNITY_TOOLKIT_CLASS_WRAPPER_IMPL_HPP 7 #define TURI_UNITY_TOOLKIT_CLASS_WRAPPER_IMPL_HPP 8 #include <model_server/lib/toolkit_function_wrapper_impl.hpp> 12 namespace toolkit_class_wrapper_impl {
13 using turi::toolkit_function_wrapper_impl::generate_member_function_wrapper;
14 using turi::toolkit_function_wrapper_impl::generate_const_member_function_wrapper;
36 template <
typename T,
typename Ret,
typename... Args,
typename... VarArgs>
37 std::function<variant_type(model_base*, variant_map_type)>
38 generate_member_function_wrapper_indirect(Ret (T::* fn)(Args...), VarArgs... args) {
39 auto newfn = generate_member_function_wrapper<
sizeof...(Args), T, Ret, Args...>(fn, {args...});
40 return [newfn](model_base* curthis, variant_map_type in)->
variant_type {
41 return to_variant(newfn(dynamic_cast<T*>(curthis), in));
70 template <
typename T,
typename Ret,
typename... Args,
typename... VarArgs>
71 std::function<variant_type(model_base*, variant_map_type)>
72 generate_member_function_wrapper_indirect(Ret (T::* fn)(Args...)
const, VarArgs... args) {
73 auto newfn = generate_const_member_function_wrapper<
sizeof...(Args), T, Ret, Args...>(fn, {args...});
74 return [newfn](model_base* curthis, variant_map_type in)->
variant_type {
75 return to_variant(newfn(dynamic_cast<T*>(curthis), in));
91 template <
typename T,
typename Ret>
92 std::function<variant_type(model_base*, variant_map_type)>
93 generate_getter(Ret (T::* fn)()) {
94 return [fn](model_base* curthis, variant_map_type in)->
variant_type {
95 T* t =
dynamic_cast<T*
>(curthis);
118 template <
typename T,
typename Ret>
119 std::function<variant_type(model_base*, variant_map_type)>
120 generate_getter(Ret (T::* fn)()
const) {
121 return [fn](model_base* curthis, variant_map_type in)->
variant_type {
122 T* t =
dynamic_cast<T*
>(curthis);
145 template <
typename T,
typename SetValType>
146 std::function<variant_type(model_base*, variant_map_type)>
147 generate_setter(
void (T::* fn)(SetValType), std::string input_map_elem) {
148 return [fn, input_map_elem](model_base* curthis, variant_map_type in)->
variant_type {
149 SetValType val = variant_get_value<SetValType>(in[input_map_elem]);
150 T* t =
dynamic_cast<T*
>(curthis);
boost::make_recursive_variant< flexible_type, std::shared_ptr< unity_sgraph_base >, dataframe_t, std::shared_ptr< model_base >, std::shared_ptr< unity_sframe_base >, std::shared_ptr< unity_sarray_base >, std::map< std::string, boost::recursive_variant_ >, std::vector< boost::recursive_variant_ >, boost::recursive_wrapper< function_closure_info > >::type variant_type
variant_type to_variant(const T &f)