OpenMiner  0.0.1a
Voxel game engine
Public Types | Public Member Functions | Static Public Member Functions | List of all members
sol::function_detail::upvalue_member_variable< T, Function, is_yielding > Struct Template Reference

#include <sol.hpp>

Public Types

typedef std::remove_pointer_t< std::decay_t< Function > > function_type
 
typedef lua_bind_traits< function_typetraits_type
 

Public Member Functions

int operator() (lua_State *L)
 

Static Public Member Functions

static int real_call (lua_State *L) noexcept(traits_type::is_noexcept)
 
static int call (lua_State *L)
 

Member Typedef Documentation

§ function_type

template<typename T, typename Function, bool is_yielding>
typedef std::remove_pointer_t<std::decay_t<Function> > sol::function_detail::upvalue_member_variable< T, Function, is_yielding >::function_type

§ traits_type

template<typename T, typename Function, bool is_yielding>
typedef lua_bind_traits<function_type> sol::function_detail::upvalue_member_variable< T, Function, is_yielding >::traits_type

Member Function Documentation

§ call()

template<typename T, typename Function, bool is_yielding>
static int sol::function_detail::upvalue_member_variable< T, Function, is_yielding >::call ( lua_State *  L)
inlinestatic
13983  {
13984  int nr = detail::typed_static_trampoline<decltype(&real_call), (&real_call)>(L);
13985  if (is_yielding) {
13986  return lua_yield(L, nr);
13987  }
13988  else {
13989  return nr;
13990  }
13991  }

§ operator()()

template<typename T, typename Function, bool is_yielding>
int sol::function_detail::upvalue_member_variable< T, Function, is_yielding >::operator() ( lua_State *  L)
inline
13993  {
13994  return call(L);
13995  }
static int call(lua_State *L)
Definition: sol.hpp:13983

§ real_call()

template<typename T, typename Function, bool is_yielding>
static int sol::function_detail::upvalue_member_variable< T, Function, is_yielding >::real_call ( lua_State *  L)
inlinestaticnoexcept
13963  {
13964  // Layout:
13965  // idx 1...n: verbatim data of member variable pointer
13966  // idx n + 1: is the object's void pointer
13967  // We don't need to store the size, because the other side is templated
13968  // with the same member function pointer type
13969  auto memberdata = stack::stack_detail::get_as_upvalues<function_type>(L);
13970  auto objdata = stack::stack_detail::get_as_upvalues<T*>(L, memberdata.second);
13971  auto& mem = *objdata.first;
13972  function_type& var = memberdata.first;
13973  switch (lua_gettop(L)) {
13974  case 0:
13975  return call_detail::call_wrapped<T, true, false, -1>(L, var, mem);
13976  case 1:
13977  return call_detail::call_wrapped<T, false, false, -1>(L, var, mem);
13978  default:
13979  return luaL_error(L, "sol: incorrect number of arguments to member variable function");
13980  }
13981  }
std::remove_pointer_t< std::decay_t< Function > > function_type
Definition: sol.hpp:13960
auto var(V &&v)
Definition: sol.hpp:13018
int call_wrapped(lua_State *L, Fx &&fx, Args &&... args)
Definition: sol.hpp:13729

The documentation for this struct was generated from the following file: