]> git.tdb.fi Git - libs/core.git/blobdiff - source/core/application.cpp
Add move semantics to Variant
[libs/core.git] / source / core / application.cpp
index 290f20b05239702c40746f9048aba993aa877b21..c214a06316598b54ed59403493df366a60ca568f 100644 (file)
@@ -9,33 +9,33 @@
 #include <msp/io/print.h>
 #include <msp/strings/utils.h>
 #include "application.h"
+#include "except.h"
 #include "getopt.h"
 
 using namespace std;
 
 namespace Msp {
 
-Application *Application::app_ = 0;
-Application::Starter *Application::starter_ = 0;
-const char *Application::argv0_ = 0;
-string Application::name_;
-void *Application::data_ = 0;
+Application *Application::_app = nullptr;
+Application::Starter *Application::_starter = nullptr;
+const char *Application::_argv0 = nullptr;
+string Application::_name;
+void *Application::_data = nullptr;
 
-Application::Application(const string &n):
-       exit_code(0)
+Application::Application(const string &n)
 {
-       if(app_)
-               throw logic_error("instance already exists");
+       if(_app)
+               throw already_called("Application::Application");
 
        if(!n.empty())
-               name_ = n;
+               _name = n;
        else
-               name_ = FS::basename(argv0_);
+               _name = FS::basename(_argv0);
 }
 
 int Application::run(int argc, char **argv, void *data, void (*created_callback)(void *))
 {
-       if(!starter_)
+       if(!_starter)
        {
                IO::cerr.write("Application::run called with no RegisteredApplication class!\n");
                return 126;
@@ -47,7 +47,7 @@ int Application::run(int argc, char **argv, void *data, void (*created_callback)
        {
                try
                {
-                       app_ = starter_->create_app(argc, argv);
+                       _app = _starter->create_app(argc, argv);
                }
                catch(const usage_error &e)
                {
@@ -58,9 +58,9 @@ int Application::run(int argc, char **argv, void *data, void (*created_callback)
                if(created_callback)
                        created_callback(data);
 
-               int result = app_->main();
-               Application *a = app_;
-               app_ = 0;
+               int result = _app->main();
+               Application *a = _app;
+               _app = nullptr;
                delete a;
                return result;
        }
@@ -80,13 +80,13 @@ int Application::run(int argc, char **argv, void *data, void (*created_callback)
                        else
                        {
                                IO::print(IO::cerr, "  what(): %s\n", lines.front());
-                               for(vector<string>::const_iterator i=lines.begin(); ++i!=lines.end(); )
+                               for(auto i=lines.begin(); ++i!=lines.end(); )
                                        IO::print(IO::cerr, "          %s\n", *i);
                        }
                }
 
-               delete app_;
-               app_ = 0;
+               delete _app;
+               _app = nullptr;
 
                return 124;
        }
@@ -94,8 +94,8 @@ int Application::run(int argc, char **argv, void *data, void (*created_callback)
 
 void Application::set_startup_info(const char *argv0, void *data)
 {
-       if(argv0_)
-               throw logic_error("startup info already set");
+       if(_argv0)
+               throw already_called("Application::set_startup_info");
 
        static FS::Path exe;
 
@@ -114,8 +114,23 @@ void Application::set_startup_info(const char *argv0, void *data)
        if(exe.empty())
                exe = FS::realpath(argv0);
 
-       argv0_ = exe.c_str();
-       data_ = data;
+       _argv0 = exe.c_str();
+       _data = data;
+}
+
+void *Application::get_data()
+{
+       return _data;
+}
+
+const char *Application::get_argv0()
+{
+       return _argv0;
+}
+
+const std::string &Application::get_name()
+{
+       return _name;
 }
 
 int Application::main()
@@ -129,7 +144,7 @@ int Application::main()
 
 void Application::catch_signal(int s)
 {
-       signal(s, &sighandler_);
+       signal(s, &_sighandler);
 }
 
 void Application::exit(int c)
@@ -138,18 +153,18 @@ void Application::exit(int c)
        exit_code = c;
 }
 
-void Application::sighandler_(int s)
+void Application::_sighandler(int s)
 {
-       app_->sighandler(s);
+       _app->sighandler(s);
 }
 
 
 Application::Starter::Starter()
 {
-       if(starter_)
-               throw logic_error("Can't create more than one Starter instance");
+       if(_starter)
+               throw already_called("Application::Starter::Starter");
 
-       starter_ = this;
+       _starter = this;
 }
 
 } // namespace Msp