xtd 0.2.0
Loading...
Searching...
No Matches
startup.hpp
Go to the documentation of this file.
1
4#pragma once
8#include "core_export.hpp"
9#include "delegate.hpp"
10#include "environment.hpp"
11#include "optional.hpp"
12#include "static.hpp"
13#include <exception>
14#define __XTD_CORE_INTERNAL__
16#undef __XTD_CORE_INTERNAL__
17
19namespace xtd {
27 public:
29
49 template<class main_function_t>
50 static int safe_run(main_function_t main_function) {
51 return internal_safe_run(main_function, std::nullopt, std::nullopt);
52 }
53
74 template<class main_function_t>
75 static int safe_run(main_function_t main_function, int argc, char* argv[]) {
76 return internal_safe_run(main_function, argc, argv);
77 }
78
79
81 static int safe_run(xtd::delegate<void()> main_function, int argc, char* argv[]);
82 static int safe_run(xtd::delegate<void()> main_function);
83 static int safe_run(xtd::delegate<void(int, char* [])> main_function, int argc, char* argv[]);
84 static int safe_run(xtd::delegate<void(int, char* [])> main_function);
85 static int safe_run(xtd::delegate<void(const xtd::argument_collection&)> main_function, int argc, char* argv[]);
86 static int safe_run(xtd::delegate<void(const xtd::argument_collection&)> main_function);
87 static int safe_run(xtd::delegate<int()> main_function, int argc, char* argv[]);
88 static int safe_run(xtd::delegate<int()> main_function);
89 static int safe_run(xtd::delegate<int(int, char* [])> main_function, int argc, char* argv[]);
90 static int safe_run(xtd::delegate<int(int, char* [])> main_function);
91 static int safe_run(xtd::delegate<int(const xtd::argument_collection&)> main_function, int argc, char* argv[]);
92 static int safe_run(xtd::delegate<int(const xtd::argument_collection&)> main_function);
93
94 static int safe_run(xtd::delegate<xtd::threading::tasks::task<>()> main_function, int argc, char* argv[]);
95 static int safe_run(xtd::delegate<xtd::threading::tasks::task<>()> main_function);
96 static int safe_run(xtd::delegate<xtd::threading::tasks::task<>(int, char* [])> main_function, int argc, char* argv[]);
97 static int safe_run(xtd::delegate<xtd::threading::tasks::task<>(int, char* [])> main_function);
98 static int safe_run(xtd::delegate<xtd::threading::tasks::task<>(const xtd::argument_collection&)> main_function, int argc, char* argv[]);
99 static int safe_run(xtd::delegate<xtd::threading::tasks::task<>(const xtd::argument_collection&)> main_function);
100 static int safe_run(xtd::delegate<xtd::threading::tasks::task<int>()> main_function, int argc, char* argv[]);
101 static int safe_run(xtd::delegate<xtd::threading::tasks::task<int>()> main_function);
102 static int safe_run(xtd::delegate<xtd::threading::tasks::task<int>(int, char* [])> main_function, int argc, char* argv[]);
103 static int safe_run(xtd::delegate<xtd::threading::tasks::task<int>(int, char* [])> main_function);
104 static int safe_run(xtd::delegate<xtd::threading::tasks::task<int>(const xtd::argument_collection&)> main_function, int argc, char* argv[]);
105 static int safe_run(xtd::delegate<xtd::threading::tasks::task<int>(const xtd::argument_collection&)> main_function);
106
107 static int safe_run(xtd::delegate<xtd::threading::tasks::wtask<>()> main_function, int argc, char* argv[]);
108 static int safe_run(xtd::delegate<xtd::threading::tasks::wtask<>()> main_function);
109 static int safe_run(xtd::delegate<xtd::threading::tasks::wtask<>(int, char* [])> main_function, int argc, char* argv[]);
110 static int safe_run(xtd::delegate<xtd::threading::tasks::wtask<>(int, char* [])> main_function);
111 static int safe_run(xtd::delegate<xtd::threading::tasks::wtask<>(const xtd::argument_collection&)> main_function, int argc, char* argv[]);
112 static int safe_run(xtd::delegate<xtd::threading::tasks::wtask<>(const xtd::argument_collection&)> main_function);
113 static int safe_run(xtd::delegate<xtd::threading::tasks::wtask<int>()> main_function, int argc, char* argv[]);
114 static int safe_run(xtd::delegate<xtd::threading::tasks::wtask<int>()> main_function);
115 static int safe_run(xtd::delegate<xtd::threading::tasks::wtask<int>(int, char* [])> main_function, int argc, char* argv[]);
116 static int safe_run(xtd::delegate<xtd::threading::tasks::wtask<int>(int, char* [])> main_function);
117 static int safe_run(xtd::delegate<xtd::threading::tasks::wtask<int>(const xtd::argument_collection&)> main_function, int argc, char* argv[]);
118 static int safe_run(xtd::delegate<xtd::threading::tasks::wtask<int>(const xtd::argument_collection&)> main_function);
119
120 static int safe_run(void (*main_function)(int, char* []), int argc, char* argv[]);
121 static int safe_run(void (*main_function)(int, char* []));
122 static int safe_run(void (*main_function)(const xtd::argument_collection&), int argc, char* argv[]);
123 static int safe_run(void (*main_function)(const xtd::argument_collection&));
124 static int safe_run(int (*main_function)(int, char* []), int argc, char* argv[]);
125 static int safe_run(int (*main_function)(int, char* []));
126 static int safe_run(int (*main_function)(const xtd::argument_collection&), int argc, char* argv[]);
127 static int safe_run(int (*main_function)(const xtd::argument_collection&));
128
129 static int safe_run(xtd::threading::tasks::task<> (*main_function)(), int argc, char* argv[]);
130 static int safe_run(xtd::threading::tasks::task<> (*main_function)());
131 static int safe_run(xtd::threading::tasks::task<> (*main_function)(int, char* []), int argc, char* argv[]);
132 static int safe_run(xtd::threading::tasks::task<> (*main_function)(int, char* []));
133 static int safe_run(xtd::threading::tasks::task<> (*main_function)(const xtd::argument_collection&), int argc, char* argv[]);
134 static int safe_run(xtd::threading::tasks::task<> (*main_function)(const xtd::argument_collection&));
135 static int safe_run(xtd::threading::tasks::task<int> (*main_function)(), int argc, char* argv[]);
136 static int safe_run(xtd::threading::tasks::task<int> (*main_function)());
137 static int safe_run(xtd::threading::tasks::task<int> (*main_function)(int, char* []), int argc, char* argv[]);
138 static int safe_run(xtd::threading::tasks::task<int> (*main_function)(int, char* []));
139 static int safe_run(xtd::threading::tasks::task<int> (*main_function)(const xtd::argument_collection&), int argc, char* argv[]);
140 static int safe_run(xtd::threading::tasks::task<int> (*main_function)(const xtd::argument_collection&));
141
142 static int safe_run(xtd::threading::tasks::wtask<> (*main_function)(), int argc, char* argv[]);
143 static int safe_run(xtd::threading::tasks::wtask<> (*main_function)());
144 static int safe_run(xtd::threading::tasks::wtask<> (*main_function)(int, char* []), int argc, char* argv[]);
145 static int safe_run(xtd::threading::tasks::wtask<> (*main_function)(int, char* []));
146 static int safe_run(xtd::threading::tasks::wtask<> (*main_function)(const xtd::argument_collection&), int argc, char* argv[]);
147 static int safe_run(xtd::threading::tasks::wtask<> (*main_function)(const xtd::argument_collection&));
148 static int safe_run(xtd::threading::tasks::wtask<int> (*main_function)(), int argc, char* argv[]);
149 static int safe_run(xtd::threading::tasks::wtask<int> (*main_function)());
150 static int safe_run(xtd::threading::tasks::wtask<int> (*main_function)(int, char* []), int argc, char* argv[]);
151 static int safe_run(xtd::threading::tasks::wtask<int> (*main_function)(int, char* []));
152 static int safe_run(xtd::threading::tasks::wtask<int> (*main_function)(const xtd::argument_collection&), int argc, char* argv[]);
153 static int safe_run(xtd::threading::tasks::wtask<int> (*main_function)(const xtd::argument_collection&));
155
156 private:
157 template<class main_function_t>
158 static int internal_safe_run(main_function_t main_function, std::optional<int> argc, std::optional<char**> argv) {
159 try {
160 init_safe_run();
161 if (argv.has_value() && argc.has_value()) xtd::environment::set_command_line_args({argv.value(), argv.value() + argc.value()});
162 auto exit_code = argc == std::nullopt && argv == std::nullopt ? run(main_function) : run(main_function, argc.value(), argv.value());
163 end_safe_run();
164 return exit_code;
165 } catch (const std::exception& e) {
166 __show_generic_exception_message__(e);
167 return EXIT_FAILURE;
168 } catch (...) {
169 \
170 __show_generic_exception_message__();
171 return EXIT_FAILURE;
172 }
173 }
174
175 static void init_safe_run();
176
177 static void end_safe_run();
178
179 static int run(xtd::delegate<void()> main_function, int argc, char* argv[]);
180 static int run(xtd::delegate<void()> main_function);
181 static int run(xtd::delegate<void(int, char* [])> main_function, int argc, char* argv[]);
182 static int run(xtd::delegate<void(int, char* [])> main_function);
183 static int run(xtd::delegate<void(const xtd::argument_collection&)> main_function, int argc, char* argv[]);
184 static int run(xtd::delegate<void(const xtd::argument_collection&)> main_function);
185 static int run(xtd::delegate<int()> main_function, int argc, char* argv[]);
186 static int run(xtd::delegate<int()> main_function);
187 static int run(xtd::delegate<int(int, char* [])> main_function, int argc, char* argv[]);
188 static int run(xtd::delegate<int(int, char* [])> main_function);
189 static int run(xtd::delegate<int(const xtd::argument_collection&)> main_function, int argc, char* argv[]);
190 static int run(xtd::delegate<int(const xtd::argument_collection&)> main_function);
191
192 static int run(xtd::delegate<xtd::threading::tasks::task<>()> main_function, int argc, char* argv[]);
193 static int run(xtd::delegate<xtd::threading::tasks::task<>()> main_function);
194 static int run(xtd::delegate<xtd::threading::tasks::task<>(int, char* [])> main_function, int argc, char* argv[]);
195 static int run(xtd::delegate<xtd::threading::tasks::task<>(int, char* [])> main_function);
196 static int run(xtd::delegate<xtd::threading::tasks::task<>(const xtd::argument_collection&)> main_function, int argc, char* argv[]);
197 static int run(xtd::delegate<xtd::threading::tasks::task<>(const xtd::argument_collection&)> main_function);
198 static int run(xtd::delegate<xtd::threading::tasks::task<int>()> main_function, int argc, char* argv[]);
199 static int run(xtd::delegate<xtd::threading::tasks::task<int>()> main_function);
200 static int run(xtd::delegate<xtd::threading::tasks::task<int>(int, char* [])> main_function, int argc, char* argv[]);
201 static int run(xtd::delegate<xtd::threading::tasks::task<int>(int, char* [])> main_function);
202 static int run(xtd::delegate<xtd::threading::tasks::task<int>(const xtd::argument_collection&)> main_function, int argc, char* argv[]);
203 static int run(xtd::delegate<xtd::threading::tasks::task<int>(const xtd::argument_collection&)> main_function);
204
205 static int run(xtd::delegate<xtd::threading::tasks::wtask<>()> main_function, int argc, char* argv[]);
206 static int run(xtd::delegate<xtd::threading::tasks::wtask<>()> main_function);
207 static int run(xtd::delegate<xtd::threading::tasks::wtask<>(int, char* [])> main_function, int argc, char* argv[]);
208 static int run(xtd::delegate<xtd::threading::tasks::wtask<>(int, char* [])> main_function);
209 static int run(xtd::delegate<xtd::threading::tasks::wtask<>(const xtd::argument_collection&)> main_function, int argc, char* argv[]);
210 static int run(xtd::delegate<xtd::threading::tasks::wtask<>(const xtd::argument_collection&)> main_function);
211 static int run(xtd::delegate<xtd::threading::tasks::wtask<int>()> main_function, int argc, char* argv[]);
212 static int run(xtd::delegate<xtd::threading::tasks::wtask<int>()> main_function);
213 static int run(xtd::delegate<xtd::threading::tasks::wtask<int>(int, char* [])> main_function, int argc, char* argv[]);
214 static int run(xtd::delegate<xtd::threading::tasks::wtask<int>(int, char* [])> main_function);
215 static int run(xtd::delegate<xtd::threading::tasks::wtask<int>(const xtd::argument_collection&)> main_function, int argc, char* argv[]);
216 static int run(xtd::delegate<xtd::threading::tasks::wtask<int>(const xtd::argument_collection&)> main_function);
217
218 static int run(void (*main_function)(), int argc, char* argv[]);
219 static int run(void (*main_function)());
220 static int run(void (*main_function)(int, char* []), int argc, char* argv[]);
221 static int run(void (*main_function)(int, char* []));
222 static int run(void (*main_function)(const xtd::argument_collection&), int argc, char* argv[]);
223 static int run(void (*main_function)(const xtd::argument_collection&));
224 static int run(int (*main_function)(), int argc, char* argv[]);
225 static int run(int (*main_function)());
226 static int run(int (*main_function)(int, char* []), int argc, char* argv[]);
227 static int run(int (*main_function)(int, char* []));
228 static int run(int (*main_function)(const xtd::argument_collection&), int argc, char* argv[]);
229 static int run(int (*main_function)(const xtd::argument_collection&));
230
231 static int run(xtd::threading::tasks::task<> (*main_function)(), int argc, char* argv[]);
232 static int run(xtd::threading::tasks::task<> (*main_function)());
233 static int run(xtd::threading::tasks::task<> (*main_function)(int, char* []), int argc, char* argv[]);
234 static int run(xtd::threading::tasks::task<> (*main_function)(int, char* []));
235 static int run(xtd::threading::tasks::task<> (*main_function)(const xtd::argument_collection&), int argc, char* argv[]);
236 static int run(xtd::threading::tasks::task<> (*main_function)(const xtd::argument_collection&));
237 static int run(xtd::threading::tasks::task<int> (*main_function)(), int argc, char* argv[]);
238 static int run(xtd::threading::tasks::task<int> (*main_function)());
239 static int run(xtd::threading::tasks::task<int> (*main_function)(int, char* []), int argc, char* argv[]);
240 static int run(xtd::threading::tasks::task<int> (*main_function)(int, char* []));
241 static int run(xtd::threading::tasks::task<int> (*main_function)(const xtd::argument_collection&), int argc, char* argv[]);
242 static int run(xtd::threading::tasks::task<int> (*main_function)(const xtd::argument_collection&));
243
244 static int run(xtd::threading::tasks::wtask<> (*main_function)(), int argc, char* argv[]);
245 static int run(xtd::threading::tasks::wtask<> (*main_function)());
246 static int run(xtd::threading::tasks::wtask<> (*main_function)(int, char* []), int argc, char* argv[]);
247 static int run(xtd::threading::tasks::wtask<> (*main_function)(int, char* []));
248 static int run(xtd::threading::tasks::wtask<> (*main_function)(const xtd::argument_collection&), int argc, char* argv[]);
249 static int run(xtd::threading::tasks::wtask<> (*main_function)(const xtd::argument_collection&));
250 static int run(xtd::threading::tasks::wtask<int> (*main_function)(), int argc, char* argv[]);
251 static int run(xtd::threading::tasks::wtask<int> (*main_function)());
252 static int run(xtd::threading::tasks::wtask<int> (*main_function)(int, char* []), int argc, char* argv[]);
253 static int run(xtd::threading::tasks::wtask<int> (*main_function)(int, char* []));
254 static int run(xtd::threading::tasks::wtask<int> (*main_function)(const xtd::argument_collection&), int argc, char* argv[]);
255 static int run(xtd::threading::tasks::wtask<int> (*main_function)(const xtd::argument_collection&));
256 };
257}
258
284#define startup_(main_method) \
285 auto main(int argc, char* argv[]) -> int { \
286 return xtd::startup::safe_run(main_method, argc, argv); \
287 } \
288 auto __opaque_sftews__ = 0 // force to end with semicolon
Contains xtd::argument_collection alias.
static void set_command_line_args(const xtd::argument_collection &args)
Sets the command-line arguments for the current process.
Defines the xtd::startup object that can be used in the main method to safely call the application's ...
Definition startup.hpp:26
static int safe_run(main_function_t main_function, int argc, char *argv[])
Safely call the specified application's main entry point, argc and argv.
Definition startup.hpp:75
static int safe_run(main_function_t main_function)
Safely call the specified application's main entry point.
Definition startup.hpp:50
Represents an asynchronous operation.
Definition task_result.hpp:20
Definition wtask.hpp:15
Contains core_export_ keyword.
Contains xtd::delegate <result_t(arguments_t...)> delegate.
Contains xtd::environment class.
#define static_
This keyword is use to represent a static object. A static object can't be instantiated (constructors...
Definition static.hpp:37
#define core_export_
Define shared library export.
Definition core_export.hpp:13
xtd::array< xtd::string > argument_collection
Represents the collection of arguments passed to the main entry point method.
Definition argument_collection.hpp:19
The xtd namespace contains all fundamental classes to access Hardware, Os, System,...
Definition abstract_object.hpp:8
Contains xtd::optional type.
Contains xtd::static_object class.
Contains xtd::threading::tasks::task <> class.
Contains xtd::threading::tasks::task <result_t> class.