From dc2493e7525bb7633f697ef10f72b72b46222249 Mon Sep 17 00:00:00 2001 From: Andy Belle-Isle Date: Fri, 30 Aug 2019 00:45:36 -0400 Subject: Forget what I said, I just need to change git attributes to mark for vendor --- lib/sol2/examples/source/containers.cpp | 64 +++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 lib/sol2/examples/source/containers.cpp (limited to 'lib/sol2/examples/source/containers.cpp') diff --git a/lib/sol2/examples/source/containers.cpp b/lib/sol2/examples/source/containers.cpp new file mode 100644 index 0000000..01bf420 --- /dev/null +++ b/lib/sol2/examples/source/containers.cpp @@ -0,0 +1,64 @@ +#define SOL_ALL_SAFETIES_ON 1 +#include + +#include +#include + +int main(int, char**) { + std::cout << "=== containers ===" << std::endl; + + sol::state lua; + lua.open_libraries(); + + lua.script(R"( +function f (x) + print("container has:") + for k=1,#x do + v = x[k] + print("\t", k, v) + end + print() +end + )"); + + // Have the function we + // just defined in Lua + sol::function f = lua["f"]; + + // Set a global variable called + // "arr" to be a vector of 5 lements + lua["arr"] = std::vector{ 2, 4, 6, 8, 10 }; + + // Call it, see 5 elements + // printed out + f(lua["arr"]); + + // Mess with it in C++ + // Containers are stored as userdata, unless you + // use `sol::as_table()` and `sol::as_table_t`. + std::vector& reference_to_arr = lua["arr"]; + reference_to_arr.push_back(12); + + // Call it, see *6* elements + // printed out + f(lua["arr"]); + + lua.script(R"( +arr:add(28) + )"); + + // Call it, see *7* elements + // printed out + f(lua["arr"]); + + lua.script(R"( +arr:clear() + )"); + + // Now it's empty + f(lua["arr"]); + + std::cout << std::endl; + + return 0; +} \ No newline at end of file -- cgit v1.2.3