MCPcopy Create free account
hub / github.com/ThePhD/sol2 / table_proxy

Class table_proxy

include/sol/table_proxy.hpp:35–281  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

33
34 template <typename Table, typename Key>
35 struct table_proxy : public proxy_base<table_proxy<Table, Key>> {
36 private:
37 using key_type = detail::proxy_key_t<Key>;
38
39 template <typename T, std::size_t... I>
40 decltype(auto) tuple_get(std::index_sequence<I...>) const& {
41 return tbl.template traverse_get<T>(std::get<I>(key)...);
42 }
43
44 template <typename T, std::size_t... I>
45 decltype(auto) tuple_get(std::index_sequence<I...>) && {
46 return tbl.template traverse_get<T>(std::get<I>(std::move(key))...);
47 }
48
49 template <std::size_t... I, typename T>
50 void tuple_set(std::index_sequence<I...>, T&& value) & {
51 tbl.traverse_set(std::get<I>(key)..., std::forward<T>(value));
52 }
53
54 template <std::size_t... I, typename T>
55 void tuple_set(std::index_sequence<I...>, T&& value) && {
56 tbl.traverse_set(std::get<I>(std::move(key))..., std::forward<T>(value));
57 }
58
59 auto setup_table(std::true_type) {
60 auto p = stack::probe_get_field<std::is_same_v<meta::unqualified_t<Table>, global_table>>(lua_state(), key, tbl.stack_index());
61 lua_pop(lua_state(), p.levels);
62 return p;
63 }
64
65 bool is_valid(std::false_type) {
66 auto pp = stack::push_pop(tbl);
67 auto p = stack::probe_get_field<std::is_same_v<meta::unqualified_t<Table>, global_table>>(lua_state(), key, lua_gettop(lua_state()));
68 lua_pop(lua_state(), p.levels);
69 return p;
70 }
71
72 public:
73 Table tbl;
74 key_type key;
75
76 template <typename T>
77 table_proxy(Table table, T&& k) : tbl(table), key(std::forward<T>(k)) {
78 }
79
80 table_proxy(const table_proxy&) = default;
81 table_proxy(table_proxy&&) = default;
82 table_proxy& operator=(const table_proxy& right) {
83 return set(right);
84 }
85 table_proxy& operator=(table_proxy&& right) {
86 return set(std::move(right));
87 }
88
89 template <typename T>
90 table_proxy& set(T&& item) & {
91 tuple_set(std::make_index_sequence<std::tuple_size_v<meta::unqualified_t<key_type>>>(), std::forward<T>(item));
92 return *this;

Callers

nothing calls this directly

Calls 4

validMethod · 0.95
new_tableClass · 0.85
tuple_setMethod · 0.45
setMethod · 0.45

Tested by

no test coverage detected