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
2017-06-23 18:07:24 -04:00
Catch@b1835e1de9 Update catch internally and make sure there's no errors in the tests for unused variables 2017-02-18 05:05:33 -05:00
docs BREAKING CHANGE: std::pair for regular containers that are not marked as as_table_t or as_nested will now behave like regular containers and not force themselves to be key-value pairs. table-style serialization is still unaffected. 2017-06-23 18:07:24 -04:00
examples fix index and newindex semantics on simple_usertypes 2017-05-28 19:14:18 -04:00
single/sol BREAKING CHANGE: std::pair for regular containers that are not marked as as_table_t or as_nested will now behave like regular containers and not force themselves to be key-value pairs. table-style serialization is still unaffected. 2017-06-23 18:07:24 -04:00
sol BREAKING CHANGE: std::pair for regular containers that are not marked as as_table_t or as_nested will now behave like regular containers and not force themselves to be key-value pairs. table-style serialization is still unaffected. 2017-06-23 18:07:24 -04:00
.gitignore add a new example, add a note, adjust for LuaJIT Beta3 and beyond (hopefully it doesn't flip its crap: will have to warn suers....) 2017-05-07 10:16:47 -04:00
.gitmodules Ditch the dependency on the optional submodule, nobody's ever gonna care about it... 2016-11-01 05:31:59 -04:00
.travis.yml tweak travis configuration for clang on osx 2017-04-02 23:37:54 -04:00
bootstrap.py clang and gcc differ in their use of unknown options.... which is always nice, always nice for two compilers to fight with each other 2017-06-07 13:24:53 -04:00
CONTRIBUTING.md Handle qualified name failures of VC++, where using templates do not match the fully qualified names of what they alias to (Thanks, VC++) 2017-05-15 10:41:50 -04:00
install.deps.sh package management is stupid and the people who made it are full of shit 2016-08-22 23:22:17 -04:00
LICENSE.txt Handle qualified name failures of VC++, where using templates do not match the fully qualified names of what they alias to (Thanks, VC++) 2017-05-15 10:41:50 -04:00
ninja_syntax.py Switched over to bootstrap.py script 2014-06-05 18:37:46 -04:00
README.md [ci skip] update readme 2017-06-07 15:27:49 -04:00
single.py Handle qualified name failures of VC++, where using templates do not match the fully qualified names of what they alias to (Thanks, VC++) 2017-05-15 10:41:50 -04:00
sol.hpp boosted pragmas 2017-06-07 12:53:24 -04:00
test_containers.cpp BREAKING CHANGE: std::pair for regular containers that are not marked as as_table_t or as_nested will now behave like regular containers and not force themselves to be key-value pairs. table-style serialization is still unaffected. 2017-06-23 18:07:24 -04:00
test_coroutines.cpp Many of the tests are still busted, but we're getting closer. 2016-06-06 15:46:53 -04:00
test_customizations.cpp V E T T E D 2016-08-23 21:42:27 -04:00
test_environments.cpp Sigh. I hate you, LuaJIT. 2017-05-09 15:16:51 -04:00
test_functions.cpp add noexcept function type barriers and guards 2017-06-16 18:43:40 -04:00
test_inheritance.cpp -Wshadow and -Wconversion are kind've dumb 2016-11-25 20:47:15 -05:00
test_operators.cpp Fix building tests with Catch v1.7.2. 2017-02-17 18:40:51 -08:00
test_overflow.cpp Fix building tests with Catch v1.7.2. 2017-02-17 18:40:51 -08:00
test_simple_usertypes.cpp fix some semantics for container usertypes, their iterators, and how they push their value types (to cope with crappy input iterator "containers") 2017-05-29 10:32:37 -04:00
test_stack_guard.hpp Many of the tests are still busted, but we're getting closer. 2016-06-06 15:46:53 -04:00
test_state.cpp tfw you break everything 'cause you're bad 2017-04-09 13:03:41 -04:00
test_storage.cpp Write the test properly! 2016-12-10 06:15:39 -05:00
test_strings.cpp Replace std::cout with INFO() from catch 2016-08-22 13:36:27 -04:00
test_tables.cpp I can write tests, I promise 2017-06-12 10:49:38 -04:00
test_usertypes.cpp BREAKING CHANGE: std::pair for regular containers that are not marked as as_table_t or as_nested will now behave like regular containers and not force themselves to be key-value pairs. table-style serialization is still unaffected. 2017-06-23 18:07:24 -04:00
tests.cpp New feature: environment plus documentation about the environment table and its usage with scripts. 2017-04-02 16:10:00 -04:00

Sol 2.17

Join the chat at https://gitter.im/chat-sol2/Lobby

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 here! 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.

Presentations

"A Sun For the Moon - A Zero-Overhead Lua Abstraction using C++"
ThePhD
Lua Workshop 2016 - Mashape, San Francisco, CA
Deck

Creating a single header

You can grab a single header out of the library here. For stable version, 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: sol bar in graph).
  • 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.
  • Customization points to allow your C++ objects to be pushed and retrieved from Lua as multiple consecutive objects, or anything else you desire!
  • 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 / begin() and end() iterators.

Supported Compilers

Sol makes use of C++11 and C++14 features. GCC 5.x.x and Clang 3.6.x (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 5.x.x+
  • Clang 3.6.x+
  • Visual Studio 2015 Community (Visual C++ 14.0)+

Please make sure you use the -std=c++1y, -std=c++14, -std=c++1z, -std=c++17 or better standard flags (some of these flags are the defaults in later versions of GCC 6+ and better).

Older compilers (GCC 4.9.x, Clang 3.4.x seem to be the lowest) can work with versions as late as v2.17.5, with the flag -std=c++14 or -std=c++1y.

License

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