コード例 #1
0
ファイル: LuaTable.cpp プロジェクト: skryabiin/core
		void LuaTable::toLua(LuaState& lua) const {
			lua.createTable(intKeys.size(), stringKeys.size());

			std::for_each(std::begin(intKeys), std::end(intKeys),
				[&](std::pair<const int, unsigned> intKey)->void {

				lua.pushStack(intKey.first);

				pushAnyValue(lua, types[intKey.second], values[intKey.second]);

				lua.setTable();

			});

			std::for_each(std::begin(stringKeys), std::end(stringKeys),
				[&](std::pair<const std::string, unsigned> stringKey)->void {

				lua.pushStack(stringKey.first);

				pushAnyValue(lua, types[stringKey.second], values[stringKey.second]);

				lua.setTable();

			});

		}
コード例 #2
0
ファイル: LuaTable.cpp プロジェクト: skryabiin/core
		void LuaTable::pushAnyValue(LuaState& lua, std::type_index type, void* value) const {

			 if (type == typeid(int)) {
				lua.pushStack(*static_cast<int*>(value));
			}
			else if (type == typeid(std::string)) {
				lua.pushStack(*static_cast<std::string*>(value));
			}
			else if (type == typeid(long)) {
				lua.pushStack(*static_cast<long*>(value));
			}
			else if (type == typeid(bool)) {
				lua.pushStack(*static_cast<bool*>(value));
			}
			else if (type == typeid(float)) {
				lua.pushStack(*static_cast<float*>(value));
			}
			else if (type == typeid(double)) {
				lua.pushStack(*static_cast<double*>(value));
			}
			else if (type == typeid(LuaFunction)) {
				lua.pushStack(*static_cast<LuaFunction*>(value));
			}
			else {
				auto vcast = static_cast<LuaTable*>(value);
				vcast->toLua(lua);
			}

		}