5#ifndef NNGN_LUA_VALUE_H
6#define NNGN_LUA_VALUE_H
10#include "utils/utils.h"
37 template<
typename T>
requires(detail::can_get<T>)
T get(
void)
const;
39 template<
typename R = value_view> R
push(
void)
const;
41 explicit operator T(
void)
const {
return this->get<T>(); }
48struct value : value_view {
58 template<
typename R = value>
59 R
push(
void)
const {
return value_view::push<R>(); }
77requires(detail::can_get<T>)
79 return this->
state().get<
T>(this->index());
85 return {this->
state(), lua_gettop(this->
state())};
90 static_cast<value_view&
>(*this) = rhs.release();
96 const char *
s = luaL_tolstring(*
this,
i, &
n);
98 value{*
this, lua_gettop(*
this)},
99 std::string_view{
s,
n},
105 return FWD(lhs) == rhs.state().get<std::decay_t<T>>(rhs.index());
110 return lhs.state().get<std::decay_t<T>>(lhs.index()) ==
FWD(rhs);
113template<std::derived_from<value> T>
116static_assert(detail::stack_type<value_view>);
117static_assert(detail::stack_type<value>);
state_view release(void)
Definition: state.h:105
std::pair< value, std::string_view > to_string(int i) const
Pushes a string representation of a value onto the stack.
Definition: value.h:94
void remove(int i) const
Definition: state.h:152
Base, non-owning generic stack value reference.
Definition: value.h:18
type get_type(void) const
Type of value at index i.
void get(lua_State *L, int i)
Definition: value.h:36
state_view m_state
Definition: value.h:43
value_view(lua_State *L, int i)
Definition: value.h:21
state_view release(void)
Definition: value.h:26
~value_view(void)=default
int index(void) const
Lua stack index.
Definition: value.h:28
value_view(state_view l, int i)
Definition: value.h:22
bool is_nil(void) const
Definition: value.h:32
int m_index
Definition: value.h:44
auto to_string(void) const
state_view state(void) const
Definition: value.h:24
for i
Definition: font.lua:5
state
Definition: cathedral.lua:13
l
Definition: light.lua:23
n
Definition: dump_lights.lua:5
v[1]
Definition: math.lua:19
std::chrono::seconds s
Definition: timing.cpp:6
#define NNGN_DEFAULT_CONSTRUCT(x)
Definition: utils.h:20
#define NNGN_NO_COPY(x)
Definition: utils.h:35
#define FWD(...)
Definition: utils.h:18
Definition: lua_audio.cpp:19
constexpr bool is_stack_ref< T >
Definition: table.h:452
type
LUA_T* constants as a scoped enumeration.
Definition: lua.h:77
operator==(T &&lhs, const table_proxy< PT, Ks... > &rhs)
Definition: table.h:346
Owning stack value reference.
Definition: value.h:48
value remove(void)
Definition: value.h:60
R push(void) const
Definition: value.h:59
~value(void)
Definition: value.h:54
value_view release(void)
Definition: value.h:56
value(value &&rhs) noexcept
Definition: value.h:52
value(value_view v)
Definition: value.h:51
value & operator=(value &&rhs) noexcept