MCPcopy Create free account
hub / github.com/ObEngine/ObEngine / usertype_proxy

Class usertype_proxy

extlibs/sol3/include/sol/sol.hpp:22088–22239  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

22086namespace sol {
22087 template <typename Table, typename Key>
22088 struct usertype_proxy : public proxy_base<usertype_proxy<Table, Key>> {
22089 private:
22090 using key_type = detail::proxy_key_t<Key>;
22091
22092 template <typename T, std::size_t... I>
22093 decltype(auto) tuple_get(std::index_sequence<I...>) const & {
22094 return tbl.template traverse_get<T>(std::get<I>(key)...);
22095 }
22096
22097 template <typename T, std::size_t... I>
22098 decltype(auto) tuple_get(std::index_sequence<I...>) && {
22099 return tbl.template traverse_get<T>(std::get<I>(std::move(key))...);
22100 }
22101
22102 template <std::size_t... I, typename T>
22103 void tuple_set(std::index_sequence<I...>, T&& value) & {
22104 if constexpr (sizeof...(I) > 1) {
22105 tbl.traverse_set(std::get<I>(key)..., std::forward<T>(value));
22106 }
22107 else {
22108 tbl.set(std::get<I>(key)..., std::forward<T>(value));
22109 }
22110 }
22111
22112 template <std::size_t... I, typename T>
22113 void tuple_set(std::index_sequence<I...>, T&& value) && {
22114 if constexpr (sizeof...(I) > 1) {
22115 tbl.traverse_set(std::get<I>(std::move(key))..., std::forward<T>(value));
22116 }
22117 else {
22118 tbl.set(std::get<I>(std::move(key))..., std::forward<T>(value));
22119 }
22120 }
22121
22122 public:
22123 Table tbl;
22124 key_type key;
22125
22126 template <typename T>
22127 usertype_proxy(Table table, T&& k)
22128 : tbl(table), key(std::forward<T>(k)) {
22129 }
22130
22131 template <typename T>
22132 usertype_proxy& set(T&& item) & {
22133 using idx_seq = std::make_index_sequence<std::tuple_size_v<meta::unqualified_t<key_type>>>;
22134 tuple_set(idx_seq(), std::forward<T>(item));
22135 return *this;
22136 }
22137
22138 template <typename T>
22139 usertype_proxy&& set(T&& item) && {
22140 using idx_seq = std::make_index_sequence<std::tuple_size_v<meta::unqualified_t<key_type>>>;
22141 std::move(*this).tuple_set(idx_seq(), std::forward<T>(item));
22142 return std::move(*this);
22143 }
22144
22145 template <typename T>

Callers

nothing calls this directly

Calls 2

tuple_setMethod · 0.45
setMethod · 0.45

Tested by

no test coverage detected