diff options
author | Andy Belle-Isle <drumsetmonkey@gmail.com> | 2019-08-30 00:45:36 -0400 |
---|---|---|
committer | Andy Belle-Isle <drumsetmonkey@gmail.com> | 2019-08-30 00:45:36 -0400 |
commit | dc2493e7525bb7633f697ef10f72b72b46222249 (patch) | |
tree | 9816755219e65d3f47fdce81c78f3736a7ddb8ab /deps/sol2/examples/source/multi_results.cpp | |
parent | 9d2b31797d0cfd130802b69261df2cd402e39b49 (diff) |
Forget what I said, I just need to change git attributes to mark for vendor
Diffstat (limited to 'deps/sol2/examples/source/multi_results.cpp')
-rw-r--r-- | deps/sol2/examples/source/multi_results.cpp | 81 |
1 files changed, 0 insertions, 81 deletions
diff --git a/deps/sol2/examples/source/multi_results.cpp b/deps/sol2/examples/source/multi_results.cpp deleted file mode 100644 index 6487f72..0000000 --- a/deps/sol2/examples/source/multi_results.cpp +++ /dev/null @@ -1,81 +0,0 @@ -#define SOL_ALL_SAFETIES_ON 1 -#include <sol/sol.hpp> - -#include <tuple> -#include "assert.hpp" -#include <iostream> - -int main() { - std::cout << "=== multi results ===" << std::endl; - - sol::state lua; - lua.open_libraries(sol::lib::base); - - // multi-return functions are supported using - // std::tuple as the transfer type, - // sol::as_returns for containers, - // and sol::variadic_results for more special things - lua.set_function("multi_tuple", [] { - return std::make_tuple(10, "goodbye"); - }); - lua.script("print('calling multi_tuple')"); - lua.script("print(multi_tuple())"); - lua.script("x, y = multi_tuple()"); - lua.script("assert(x == 10 and y == 'goodbye')"); - - auto multi = lua.get<sol::function>("multi_tuple"); - int first; - std::string second; - // tie the values - sol::tie(first, second) = multi(); - - // use the values - c_assert(first == 10); - c_assert(second == "goodbye"); - - // sol::as_returns - // works with any iterable, - // but we show off std::vector here - lua.set_function("multi_containers", [] (bool add_extra) { - std::vector<int> values{55, 66}; - if (add_extra) { - values.push_back(77); - } - return sol::as_returns(std::move(values)); - }); - lua.script("print('calling multi_containers')"); - lua.script("print(multi_containers(false))"); - lua.script("a, b, c = multi_containers(true)"); - int a = lua["a"]; - int b = lua["b"]; - int c = lua["c"]; - - c_assert(a == 55); - c_assert(b == 66); - c_assert(c == 77); - - // sol::variadic_results - // you can push objects of different types - // note that sol::this_state is a transparent - // argument: you don't need to pass - // that state through Lua - lua.set_function("multi_vars", [](int a, bool b, sol::this_state L) { - sol::variadic_results values; - values.push_back({ L, sol::in_place_type<int>, a }); - values.push_back({ L, sol::in_place_type<bool>, b }); - values.push_back({ L, sol::in_place, "awoo" }); - return values; - }); - lua.script("print('calling multi_vars')"); - lua.script("print(multi_vars(2, false))"); - lua.script("t, u, v = multi_vars(42, true)"); - int t = lua["t"]; - bool u = lua["u"]; - std::string v = lua["v"]; - - c_assert(t == 42); - c_assert(u); - c_assert(v == "awoo"); - - return 0; -}
\ No newline at end of file |