OpenMiner  0.0.1a
Voxel game engine
Public Member Functions | Public Attributes | Private Types | Private Member Functions | List of all members
sol::proxy< Table, Key > Struct Template Reference

#include <sol.hpp>

Inheritance diagram for sol::proxy< Table, Key >:
sol::proxy_base< proxy< Table, Key > > sol::proxy_base_tag

Public Member Functions

template<typename T >
 proxy (Table table, T &&k)
 
template<typename T >
proxyset (T &&item)
 
template<typename... Args>
proxyset_function (Args &&... args)
 
template<typename U , meta::enable< meta::neg< is_lua_reference_or_proxy< meta::unwrap_unqualified_t< U >>>, meta::is_callable< meta::unwrap_unqualified_t< U >>> = meta::enabler>
proxyoperator= (U &&other)
 
template<typename U , meta::disable< meta::neg< is_lua_reference_or_proxy< meta::unwrap_unqualified_t< U >>>, meta::is_callable< meta::unwrap_unqualified_t< U >>> = meta::enabler>
proxyoperator= (U &&other)
 
template<typename T >
proxyoperator= (std::initializer_list< T > other)
 
template<typename T >
decltype(auto) get () const
 
template<typename T >
decltype(auto) get_or (T &&otherwise) const
 
template<typename T , typename D >
decltype(auto) get_or (D &&otherwise) const
 
template<typename T >
decltype(auto) get_or_create ()
 
template<typename T , typename Otherwise >
decltype(auto) get_or_create (Otherwise &&other)
 
template<typename K >
decltype(auto) operator[] (K &&k) const
 
template<typename... Ret, typename... Args>
decltype(auto) call (Args &&... args)
 
template<typename... Args>
decltype(auto) operator() (Args &&... args)
 
bool valid () const
 
int push () const noexcept
 
int push (lua_State *L) const noexcept
 
type get_type () const
 
lua_State * lua_state () const
 
proxyforce ()
 
- Public Member Functions inherited from sol::proxy_base< proxy< Table, Key > >
 operator std::string () const
 
 operator T () const
 
 operator T& () const
 
lua_State * lua_state () const
 

Public Attributes

Table tbl
 
key_type key
 

Private Types

typedef meta::condition< meta::is_specialization_of< Key, std::tuple >, Key, std::tuple< meta::condition< std::is_array< meta::unqualified_t< Key > >, Key &, meta::unqualified_t< Key > > > > key_type
 

Private Member Functions

template<typename T , std::size_t... I>
decltype(auto) tuple_get (std::index_sequence< I... >) const
 
template<std::size_t... I, typename T >
void tuple_set (std::index_sequence< I... >, T &&value)
 
auto setup_table (std::true_type)
 
bool is_valid (std::false_type)
 

Member Typedef Documentation

§ key_type

template<typename Table, typename Key>
typedef meta::condition<meta::is_specialization_of<Key, std::tuple>, Key, std::tuple<meta::condition<std::is_array<meta::unqualified_t<Key> >, Key&, meta::unqualified_t<Key> > > > sol::proxy< Table, Key >::key_type
private

Constructor & Destructor Documentation

§ proxy()

template<typename Table, typename Key>
template<typename T >
sol::proxy< Table, Key >::proxy ( Table  table,
T &&  k 
)
inline
15534  : tbl(table), key(std::forward<T>(k)) {
15535  }
key_type key
Definition: sol.hpp:15530
Table tbl
Definition: sol.hpp:15529

Member Function Documentation

§ call()

template<typename Table, typename Key>
template<typename... Ret, typename... Args>
decltype(auto) sol::proxy< Table, Key >::call ( Args &&...  args)
inline
15608  {
15609 #if !defined(__clang__) && defined(_MSC_FULL_VER) && _MSC_FULL_VER >= 191200000
15610  // MSVC is ass sometimes
15611  return get<function>().call<Ret...>(std::forward<Args>(args)...);
15612 #else
15613  return get<function>().template call<Ret...>(std::forward<Args>(args)...);
15614 #endif
15615  }

§ force()

template<typename Table, typename Key>
proxy& sol::proxy< Table, Key >::force ( )
inline
15652  {
15653  if (this->valid()) {
15654  this->set(new_table());
15655  }
15656  return *this;
15657  }
bool valid() const
Definition: sol.hpp:15622

§ get()

template<typename Table, typename Key>
template<typename T >
decltype(auto) sol::proxy< Table, Key >::get ( ) const
inline
15565  {
15566  return tuple_get<T>(std::make_index_sequence<std::tuple_size<meta::unqualified_t<key_type>>::value>());
15567  }

§ get_or() [1/2]

template<typename Table, typename Key>
template<typename T >
decltype(auto) sol::proxy< Table, Key >::get_or ( T &&  otherwise) const
inline
15570  {
15571  typedef decltype(get<T>()) U;
15572  optional<U> option = get<optional<U>>();
15573  if (option) {
15574  return static_cast<U>(option.value());
15575  }
15576  return static_cast<U>(std::forward<T>(otherwise));
15577  }
decltype(auto) get() const
Definition: sol.hpp:15565

§ get_or() [2/2]

template<typename Table, typename Key>
template<typename T , typename D >
decltype(auto) sol::proxy< Table, Key >::get_or ( D &&  otherwise) const
inline
15580  {
15581  optional<T> option = get<optional<T>>();
15582  if (option) {
15583  return static_cast<T>(option.value());
15584  }
15585  return static_cast<T>(std::forward<D>(otherwise));
15586  }

§ get_or_create() [1/2]

template<typename Table, typename Key>
template<typename T >
decltype(auto) sol::proxy< Table, Key >::get_or_create ( )
inline
15589  {
15590  return get_or_create<T>(new_table());
15591  }

§ get_or_create() [2/2]

template<typename Table, typename Key>
template<typename T , typename Otherwise >
decltype(auto) sol::proxy< Table, Key >::get_or_create ( Otherwise &&  other)
inline
15594  {
15595  if (!this->valid()) {
15596  this->set(std::forward<Otherwise>(other));
15597  }
15598  return get<T>();
15599  }
bool valid() const
Definition: sol.hpp:15622

§ get_type()

template<typename Table, typename Key>
type sol::proxy< Table, Key >::get_type ( ) const
inline
15637  {
15638  type t = type::none;
15639  auto pp = stack::push_pop(tbl);
15640  auto p = stack::probe_get_field<std::is_same<meta::unqualified_t<Table>, global_table>::value>(lua_state(), key, lua_gettop(lua_state()));
15641  if (p) {
15642  t = type_of(lua_state(), -1);
15643  }
15644  lua_pop(lua_state(), p.levels);
15645  return t;
15646  }
key_type key
Definition: sol.hpp:15530
lua_State * lua_state() const
Definition: sol.hpp:15648
Table tbl
Definition: sol.hpp:15529
type type_of(lua_State *L, int index)
Definition: sol.hpp:5358
table_core< true > global_table
Definition: sol.hpp:292
push_popper< top_level, T > push_pop(T &&x)
Definition: sol.hpp:6661

§ is_valid()

template<typename Table, typename Key>
bool sol::proxy< Table, Key >::is_valid ( std::false_type  )
inlineprivate
15521  {
15522  auto pp = stack::push_pop(tbl);
15523  auto p = stack::probe_get_field<std::is_same<meta::unqualified_t<Table>, global_table>::value>(lua_state(), key, lua_gettop(lua_state()));
15524  lua_pop(lua_state(), p.levels);
15525  return p;
15526  }
key_type key
Definition: sol.hpp:15530
lua_State * lua_state() const
Definition: sol.hpp:15648
Table tbl
Definition: sol.hpp:15529
table_core< true > global_table
Definition: sol.hpp:292
push_popper< top_level, T > push_pop(T &&x)
Definition: sol.hpp:6661

§ lua_state()

template<typename Table, typename Key>
lua_State* sol::proxy< Table, Key >::lua_state ( ) const
inline
15648  {
15649  return tbl.lua_state();
15650  }
Table tbl
Definition: sol.hpp:15529

§ operator()()

template<typename Table, typename Key>
template<typename... Args>
decltype(auto) sol::proxy< Table, Key >::operator() ( Args &&...  args)
inline
15618  {
15619  return call<>(std::forward<Args>(args)...);
15620  }

§ operator=() [1/3]

template<typename Table, typename Key>
template<typename U , meta::enable< meta::neg< is_lua_reference_or_proxy< meta::unwrap_unqualified_t< U >>>, meta::is_callable< meta::unwrap_unqualified_t< U >>> = meta::enabler>
proxy& sol::proxy< Table, Key >::operator= ( U &&  other)
inline
15550  {
15551  return set_function(std::forward<U>(other));
15552  }
proxy & set_function(Args &&... args)
Definition: sol.hpp:15544

§ operator=() [2/3]

template<typename Table, typename Key>
template<typename U , meta::disable< meta::neg< is_lua_reference_or_proxy< meta::unwrap_unqualified_t< U >>>, meta::is_callable< meta::unwrap_unqualified_t< U >>> = meta::enabler>
proxy& sol::proxy< Table, Key >::operator= ( U &&  other)
inline
15555  {
15556  return set(std::forward<U>(other));
15557  }

§ operator=() [3/3]

template<typename Table, typename Key>
template<typename T >
proxy& sol::proxy< Table, Key >::operator= ( std::initializer_list< T other)
inline
15560  {
15561  return set(std::move(other));
15562  }

§ operator[]()

template<typename Table, typename Key>
template<typename K >
decltype(auto) sol::proxy< Table, Key >::operator[] ( K &&  k) const
inline
15602  {
15603  auto keys = meta::tuplefy(key, std::forward<K>(k));
15604  return proxy<Table, decltype(keys)>(tbl, std::move(keys));
15605  }
key_type key
Definition: sol.hpp:15530
decltype(auto) tuplefy(X &&... x)
Definition: sol.hpp:1791
Table tbl
Definition: sol.hpp:15529

§ push() [1/2]

template<typename Table, typename Key>
int sol::proxy< Table, Key >::push ( ) const
inlinenoexcept
15629  {
15630  return push(this->lua_state());
15631  }
lua_State * lua_state() const
Definition: sol.hpp:15648
int push() const noexcept
Definition: sol.hpp:15629

§ push() [2/2]

template<typename Table, typename Key>
int sol::proxy< Table, Key >::push ( lua_State *  L) const
inlinenoexcept
15633  {
15634  return get<reference>().push(L);
15635  }
int push() const noexcept
Definition: sol.hpp:15629

§ set()

template<typename Table, typename Key>
template<typename T >
proxy& sol::proxy< Table, Key >::set ( T &&  item)
inline
15538  {
15539  tuple_set(std::make_index_sequence<std::tuple_size<meta::unqualified_t<key_type>>::value>(), std::forward<T>(item));
15540  return *this;
15541  }
void tuple_set(std::index_sequence< I... >, T &&value)
Definition: sol.hpp:15511

§ set_function()

template<typename Table, typename Key>
template<typename... Args>
proxy& sol::proxy< Table, Key >::set_function ( Args &&...  args)
inline
15544  {
15545  tbl.set_function(key, std::forward<Args>(args)...);
15546  return *this;
15547  }
key_type key
Definition: sol.hpp:15530
Table tbl
Definition: sol.hpp:15529

§ setup_table()

template<typename Table, typename Key>
auto sol::proxy< Table, Key >::setup_table ( std::true_type  )
inlineprivate
15515  {
15516  auto p = stack::probe_get_field<std::is_same<meta::unqualified_t<Table>, global_table>::value>(lua_state(), key, tbl.stack_index());
15517  lua_pop(lua_state(), p.levels);
15518  return p;
15519  }
key_type key
Definition: sol.hpp:15530
lua_State * lua_state() const
Definition: sol.hpp:15648
Table tbl
Definition: sol.hpp:15529
table_core< true > global_table
Definition: sol.hpp:292

§ tuple_get()

template<typename Table, typename Key>
template<typename T , std::size_t... I>
decltype(auto) sol::proxy< Table, Key >::tuple_get ( std::index_sequence< I... >  ) const
inlineprivate
15506  {
15507  return tbl.template traverse_get<T>(std::get<I>(key)...);
15508  }
key_type key
Definition: sol.hpp:15530
Table tbl
Definition: sol.hpp:15529

§ tuple_set()

template<typename Table, typename Key>
template<std::size_t... I, typename T >
void sol::proxy< Table, Key >::tuple_set ( std::index_sequence< I... >  ,
T &&  value 
)
inlineprivate
15511  {
15512  tbl.traverse_set(std::get<I>(key)..., std::forward<T>(value));
15513  }
key_type key
Definition: sol.hpp:15530
Table tbl
Definition: sol.hpp:15529

§ valid()

template<typename Table, typename Key>
bool sol::proxy< Table, Key >::valid ( ) const
inline
15622  {
15623  auto pp = stack::push_pop(tbl);
15624  auto p = stack::probe_get_field<std::is_same<meta::unqualified_t<Table>, global_table>::value>(lua_state(), key, lua_gettop(lua_state()));
15625  lua_pop(lua_state(), p.levels);
15626  return p;
15627  }
key_type key
Definition: sol.hpp:15530
lua_State * lua_state() const
Definition: sol.hpp:15648
Table tbl
Definition: sol.hpp:15529
table_core< true > global_table
Definition: sol.hpp:292
push_popper< top_level, T > push_pop(T &&x)
Definition: sol.hpp:6661

Member Data Documentation

§ key

template<typename Table, typename Key>
key_type sol::proxy< Table, Key >::key

§ tbl

template<typename Table, typename Key>
Table sol::proxy< Table, Key >::tbl

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