summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTobias Markmann <tm@ayena.de>2016-11-23 07:09:39 (GMT)
committerTobias Markmann <tm@ayena.de>2016-11-23 11:30:02 (GMT)
commite405ff3561be3d3c0bd79d7d5173923a8828cf02 (patch)
tree9118ef838ebfaec1df90ec24761944b5d833774c /Sluift/main.cpp
parent8a71b91be885652f37c5aab5e1ecf25af4599fbc (diff)
downloadswift-e405ff3561be3d3c0bd79d7d5173923a8828cf02.zip
swift-e405ff3561be3d3c0bd79d7d5173923a8828cf02.tar.bz2
Migrate remaining Swiften/Base/foreach.h use to range-based for loop
Test-Information: Build on macOS 10.12.1 and all tests pass. Change-Id: Iedaa3fa7e7672c77909fd0568bf30e9393cb87e0
Diffstat (limited to 'Sluift/main.cpp')
-rw-r--r--Sluift/main.cpp21
1 files changed, 12 insertions, 9 deletions
diff --git a/Sluift/main.cpp b/Sluift/main.cpp
index 05c7179..65d6d60 100644
--- a/Sluift/main.cpp
+++ b/Sluift/main.cpp
@@ -1,48 +1,51 @@
/*
* Copyright (c) 2013-2016 Isode Limited.
* All rights reserved.
* See the COPYING file for more information.
*/
+#include <iostream>
#include <string>
#include <vector>
-#include <iostream>
-#include <lua.hpp>
-#include <Swiften/Base/foreach.h>
-#include <Swiften/Base/Platform.h>
+
+#include <boost/assign/list_of.hpp>
+#include <boost/numeric/conversion/cast.hpp>
+#include <boost/program_options.hpp>
#include <boost/program_options/options_description.hpp>
#include <boost/program_options/variables_map.hpp>
-#include <boost/program_options.hpp>
#include <boost/version.hpp>
-#include <boost/numeric/conversion/cast.hpp>
-#include <boost/assign/list_of.hpp>
+
+#include <lua.hpp>
+
+#include <Swiften/Base/Platform.h>
+
#include <Sluift/globals.h>
#include <Sluift/Console.h>
#include <Sluift/StandardTerminal.h>
#include <Sluift/sluift.h>
#include <Sluift/Lua/LuaUtils.h>
#ifdef HAVE_EDITLINE
#include <Sluift/EditlineTerminal.h>
#endif
#include <Sluift/Version.h>
using namespace Swift;
#ifdef SWIFTEN_PLATFORM_WINDOWS
#define EXIT_KEY "Z"
#else
#define EXIT_KEY "D"
#endif
static const std::string SLUIFT_WELCOME_STRING(
"== Sluift XMPP Console (" SLUIFT_VERSION_STRING ")\nPress Ctrl-" EXIT_KEY " to exit. Type help() for help.");
static const luaL_Reg defaultLibraries[] = {
{"", luaopen_base},
{LUA_LOADLIBNAME, luaopen_package},
{LUA_TABLIBNAME, luaopen_table},
{LUA_IOLIBNAME, luaopen_io},
{LUA_OSLIBNAME, luaopen_os},
{LUA_STRLIBNAME, luaopen_string},
{LUA_MATHLIBNAME, luaopen_math},
{LUA_DBLIBNAME, luaopen_debug},
@@ -60,61 +63,61 @@ static void checkResult(lua_State* L, int result) {
throw std::runtime_error(errorMessage ? errorMessage : "Unknown error");
}
}
static void initialize(lua_State* L) {
lua_gc(L, LUA_GCSTOP, 0);
for (const luaL_Reg* lib = defaultLibraries; lib->func; lib++) {
#if LUA_VERSION_NUM >= 502
luaL_requiref(L, lib->name, lib->func, 1);
lua_pop(L, 1);
#else
lua_pushcfunction(L, lib->func);
lua_pushstring(L, lib->name);
lua_call(L, 1, 0);
#endif
}
lua_gc(L, LUA_GCRESTART, 0);
}
static void runScript(lua_State* L, const std::string& script, const std::vector<std::string>& scriptArguments) {
// Create arguments table
lua_createtable(L, boost::numeric_cast<int>(scriptArguments.size()), 0);
for (size_t i = 0; i < scriptArguments.size(); ++i) {
lua_pushstring(L, scriptArguments[i].c_str());
lua_rawseti(L, -2, boost::numeric_cast<int>(i+1));
}
lua_setglobal(L, "arg");
// Load file
checkResult(L, luaL_loadfile(L, script.c_str()));
- foreach (const std::string& scriptArgument, scriptArguments) {
+ for (const auto& scriptArgument : scriptArguments) {
lua_pushstring(L, scriptArgument.c_str());
}
checkResult(L, Console::call(L, boost::numeric_cast<int>(scriptArguments.size()), false));
}
int main(int argc, char* argv[]) {
// Parse program options
boost::program_options::options_description visibleOptions("Options");
visibleOptions.add_options()
("help,h", "Display this help message")
("version,v", "Display version information")
("interactive,i", "Enter interactive mode after executing script")
;
boost::program_options::options_description hiddenOptions("Hidden Options");
hiddenOptions.add_options()
("script", boost::program_options::value< std::string >(), "Script to be executed")
("script-arguments", boost::program_options::value< std::vector<std::string> >(), "Script arguments")
;
boost::program_options::options_description options("All Options");
options.add(visibleOptions).add(hiddenOptions);
boost::program_options::positional_options_description positional_options;
positional_options.add("script", 1).add("script-arguments", -1);
boost::program_options::variables_map arguments;
try {
boost::program_options::store(
boost::program_options::command_line_parser(argc, argv)
.options(options)
.positional(positional_options).run(), arguments);
@@ -136,54 +139,54 @@ int main(int argc, char* argv[]) {
if (arguments.count("help")) {
std::cout << visibleOptions << "\n";
return 0;
}
else if (arguments.count("version")) {
std::cout << SLUIFT_VERSION_STRING;
return 0;
}
lua_State* L = luaL_newstate();
initialize(L);
try {
// Run script
if (arguments.count("script")) {
std::vector<std::string> scriptArguments;
if (arguments.count("script-arguments")) {
scriptArguments = arguments["script-arguments"].as< std::vector<std::string> >();
}
runScript(L, arguments["script"].as<std::string>(), scriptArguments);
}
// Run console
if (arguments.count("interactive") || arguments.count("script") == 0) {
// Set up signal handler
signal(SIGINT, handleInterruptSignal);
// Import some useful functions into the global namespace
lua_getglobal(L, "sluift");
std::vector<std::string> globalImports = boost::assign::list_of
("help")("with");
- foreach (const std::string& globalImport, globalImports) {
+ for (const auto& globalImport : globalImports) {
lua_getfield(L, -1, globalImport.c_str());
lua_setglobal(L, globalImport.c_str());
}
lua_pop(L, 1);
std::cout << SLUIFT_WELCOME_STRING << std::endl;
#ifdef HAVE_EDITLINE
EditlineTerminal& terminal = EditlineTerminal::getInstance();
#else
StandardTerminal terminal;
#endif
Console console(L, &terminal);
console.run();
}
}
catch (const std::exception& e) {
std::cerr << e.what() << std::endl;
lua_close(L);
return -1;
}
lua_close(L);
return 0;
}