Ver código fonte

Add 'register_global' convenience function

Ole 10 anos atrás
pai
commit
7a861eb4d3
4 arquivos alterados com 17 adições e 16 exclusões
  1. 3 6
      examples/functions.cpp
  2. 1 2
      examples/usertypes.cpp
  3. 9 0
      lib/luwra/stack.hpp
  4. 4 8
      tests/functions.cpp

+ 3 - 6
examples/functions.cpp

@@ -24,18 +24,15 @@ int main() {
 
 	// Register 'my_function_1'
 	auto wrapped_1 = luwra::wrap_function<void(float, const char*), my_function_1>;
-	luwra::push(state, wrapped_1);
-	lua_setglobal(state, "my_function_1");
+	luwra::register_global(state, "my_function_1", wrapped_1);
 
 	// Register 'my_function_2'
 	auto wrapped_2 = luwra::wrap_function<std::string(), my_function_2>;
-	luwra::push(state, wrapped_2);
-	lua_setglobal(state, "my_function_2");
+	luwra::register_global(state, "my_function_2", wrapped_2);
 
 	// Register 'my_function_3'
 	auto wrapped_3 = luwra::wrap_function<int(int, int), my_function_3>;
-	luwra::push(state, wrapped_3);
-	lua_setglobal(state, "my_function_3");
+	luwra::register_global(state, "my_function_3", wrapped_3);
 
 	// Load Lua code
 	luaL_loadstring(

+ 1 - 2
examples/usertypes.cpp

@@ -50,8 +50,7 @@ int main() {
 	// What's left, is registering a constructor for our type.
 	// We have to specify which parameters our constructor takes, because there might be more than
 	// one constructor to deal with.
-	luwra::push(state, luwra::wrap_constructor<Point, double, double>);
-	lua_setglobal(state, "Point");
+	luwra::register_global(state, "Point", luwra::wrap_constructor<Point, double, double>);
 
 	// Load Lua code
 	luaL_loadstring(

+ 9 - 0
lib/luwra/stack.hpp

@@ -108,6 +108,15 @@ bool equal(State* state, int index1, int index2) {
 #endif
 }
 
+/**
+ * Register a value as a global.
+ */
+template <typename T> static inline
+void register_global(State* state, const char* name, T value) {
+	Value<T>::push(state, value);
+	lua_setglobal(state, name);
+}
+
 LUWRA_NS_END
 
 #endif

+ 4 - 8
tests/functions.cpp

@@ -22,8 +22,7 @@ TEST_CASE("wrap_function_noret_noparams") {
 	REQUIRE(cfun != nullptr);
 
 	// Register function
-	luwra::push(state, cfun);
-	lua_setglobal(state, "test_function_noret_noparams");
+	luwra::register_global(state, "test_function_noret_noparams", cfun);
 
 	// Invoke function
 	REQUIRE(luaL_dostring(state, "test_function_noret_noparams()") == 0);
@@ -50,8 +49,7 @@ TEST_CASE("wrap_function_noret") {
 	REQUIRE(cfun != nullptr);
 
 	// Register function
-	luwra::push(state, cfun);
-	lua_setglobal(state, "test_function_noret");
+	luwra::register_global(state, "test_function_noret", cfun);
 
 	// Invoke function
 	REQUIRE(luaL_dostring(state, "test_function_noret(13, 37)") == 0);
@@ -74,8 +72,7 @@ TEST_CASE("wrap_function_noparams") {
 	REQUIRE(cfun != nullptr);
 
 	// Register function
-	luwra::push(state, cfun);
-	lua_setglobal(state, "test_function_noparams");
+	luwra::register_global(state, "test_function_noparams", cfun);
 
 	// Invoke function
 	REQUIRE(luaL_dostring(state, "return test_function_noparams()") == 0);
@@ -98,8 +95,7 @@ TEST_CASE("wrap_function") {
 	REQUIRE(cfun != nullptr);
 
 	// Register function
-	luwra::push(state, cfun);
-	lua_setglobal(state, "test_function");
+	luwra::register_global(state, "test_function", cfun);
 
 	// Invoke function
 	REQUIRE(luaL_dostring(state, "return test_function(37, 13)") == 0);