Sol3 (sol2 v3.0) - a C++ <-> Lua API wrapper with advanced features and top notch performance - is here, and it's great! Documentation:
Go to file
2016-03-30 03:25:22 -04:00
Catch@3b4edd7a48 Bad #pragma's with Catch shattered my build. =/ 2016-02-29 22:40:20 -05:00
docs full-on optional support. so much support it's coming through my eyeballs. Goodness. 2016-03-30 00:31:18 -04:00
examples Fuck you, clang: http://stackoverflow.com/a/8629943/5280922 2016-03-30 03:08:53 -04:00
Optional@9dd28f70f0 full-on optional support. so much support it's coming through my eyeballs. Goodness. 2016-03-30 00:31:18 -04:00
sol Enumeraatiions... 2016-03-30 03:25:22 -04:00
.gitignore Primetime 2016-03-13 10:03:05 -04:00
.gitmodules Documentation updates and new stack::check_get API. 2016-03-24 15:45:44 -04:00
.travis.yml ability for functions that throw not bound by sol to catch and return lua errors that can be used by a handler function (for protected function). 2016-03-02 20:45:52 -05:00
bootstrap.py Fuck you, clang: http://stackoverflow.com/a/8629943/5280922 2016-03-30 03:08:53 -04:00
CONTRIBUTING.md Add contributing guidelines 2013-12-14 05:26:43 -05:00
install.deps.sh Add usage of LUA_VERSION variable when using --ci 2016-02-25 13:31:00 -05:00
LICENSE.txt Update copyright year. 2015-07-21 19:51:17 -04:00
ninja_syntax.py Switched over to bootstrap.py script 2014-06-05 18:37:46 -04:00
README.md Update README.md 2016-03-21 12:39:47 -04:00
single.py Alright, NOW everything's kosher. Bwuh, byte order marks... 2016-03-14 09:53:24 -04:00
sol.hpp Primetime 2016-03-13 10:03:05 -04:00
test_coroutines.cpp Mooooar tests. And better support for proxy and tuples. 2016-03-15 06:36:25 -04:00
test_functions.cpp full-on optional support. so much support it's coming through my eyeballs. Goodness. 2016-03-30 00:31:18 -04:00
test_overflow.cpp Mooooar tests. And better support for proxy and tuples. 2016-03-15 06:36:25 -04:00
tests.cpp And nooow we're set for optional. Totally. With the get_or implementation as well. Hopefully this will be all we need. 2016-03-30 01:40:40 -04:00

Sol 2.0

Build Status Documentation Status

Sol is a C++ library binding to Lua. It currently supports all Lua versions 5.1+ (LuaJIT 2.x included). Sol aims to be easy to use and easy to add to a project. The library is header-only for easy integration with projects.

Documentation

Find it here. A run-through kind of tutorial is in the works: check back soon! The API documentation goes over most cases (particularly, the "api/usertype" and "api/proxy" and "api/function" sections) that should still get you off your feet and going, and there's an examples directory here as well.

Sneak Peek

#include <sol.hpp>
#include <cassert>

int main() {
    sol::state lua;
    int x = 0;
    lua.set_function("beep", [&x]{ ++x; });
    lua.script("beep()");
    assert(x == 1);
}
#include <sol.hpp>
#include <cassert>

struct vars {
    int boop = 0;
};

int main() {
    sol::state lua;
    lua.new_usertype<vars>("vars", "boop", &vars::boop);
    lua.script("beep = vars.new()\n"
               "beep.boop = 1");
    assert(lua.get<vars>("beep").boop == 1);
}

More examples are given in the examples directory.

Creating a single header

Check the releases tab on github for a provided single header file for maximum ease of use. A script called single.py is provided in the repository if there's some bleeding edge change that hasn't been published on the releases page. You can run this script to create a single file version of the library so you can only include that part of it. Check single.py --help for more info.

Features

  • Fastest in the land (see: sol2 graph and table entries).
  • Supports retrieval and setting of multiple types including std::string and std::map/unordered_map.
  • Lambda, function, and member function bindings are supported.
  • Intermediate type for checking if a variable exists.
  • Simple API that completely abstracts away the C stack API, including protected_function with the ability to use an error-handling function.
  • operator[]-style manipulation of tables
  • C++ type representations in lua userdata as usertypes with guaranteed cleanup
  • Overloaded function calls: my_function(1); my_function("Hello") in the same lua script route to different function calls based on parameters
  • Support for tables, nested tables, table iteration with table.for_each.

Supported Compilers

Sol makes use of C++11/14 features. GCC 4.9 and Clang 3.4 (with std=c++1z and appropriate standard library) or higher should be able to compile without problems. However, the officially supported and CI-tested compilers are:

  • GCC 4.9.0+
  • Clang 3.5+
  • Visual Studio 2015 Community (Visual C++ 14.0)+

Caveats

Due to how this library is used compared to the C API, the Lua Stack is completely abstracted away. Not only that, but all Lua errors are thrown as exceptions instead: if you don't want to deal with errors thrown by at_panic, you can set your own panic function or use the protected_function API. This allows you to handle the errors gracefully without being forced to exit. If you don't want to deal with exceptions, then define SOL_NO_EXCEPTIONS. If you also don't like RTTI, you can also define SOL_NO_RTTI as well. These macros are automatically defined if the code detects certain compiler-specific macros being turned on or off based on flags like -fno-rtti and -fno-exceptions

It should be noted that the library itself depends on lua.hpp to be found by your compiler. It uses angle brackets, e.g. #include <lua.hpp>.

License

Sol is distributed with an MIT License. You can see LICENSE.txt for more info.