3 This file is part of libmspcore
4 Copyright © 2006 Mikko Rasa, Mikkosoft Productions
5 Distributed under the LGPL
7 #ifndef MSP_CORE_APPLICATION_H_
8 #define MSP_CORE_APPLICATION_H_
10 #include "semaphore.h"
15 Base class for applications. Inherit the main class from this and add a static
16 member of type RegApp<MainClass>.
21 virtual ~Application() { }
23 static int run(int, char **, void * =0);
24 static void usage(const char *, const char *, bool);
25 static void *get_data() { return data_; }
29 NONE, /// No main loop - main() will just return
30 SLEEP, /// Only sleep in the main loop - useful for servers
31 TICK_SLEEP, /// Call tick every iteration, with a short sleep in between
32 TICK_YIELD, /// Call tick every iteration, with sched_yield in between
33 TICK_BUSY /// Call tick every iteration
39 virtual Application *create_app(int, char **)=0;
40 virtual void usage(const char *, const char *, bool)=0;
41 virtual ~RegBase() { }
47 class RegApp: public RegBase
50 Application *create_app(int argc, char **argv) { return new T(argc, argv); }
51 void usage(const char *r, const char *a, bool b) { T::usage(r, a, b); }
59 void catch_signal(int);
60 void set_loop_mode(LoopMode);
63 virtual void tick() { }
64 virtual void sighandler(int) { }
69 Application(const Application &);
70 Application &operator=(const Application &);
72 static RegBase *reg_app_;
73 static Application *app_;
76 static void sighandler_(int);
77 static void sigalrm_(int) { }