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 "optional.hpp"
11#include "static.hpp"
12#include <exception>
13#define __XTD_CORE_INTERNAL__
15#undef __XTD_CORE_INTERNAL__
16
18namespace xtd {
26 public:
28
48 template<class main_function_t>
49 static int safe_run(main_function_t main_function) {
50 return internal_safe_run(main_function, std::nullopt, std::nullopt);
51 }
52
73 template<class main_function_t>
74 static int safe_run(main_function_t main_function, int argc, char* argv[]) {
75 return internal_safe_run(main_function, argc, argv);
76 }
77
78
80 static int safe_run(xtd::delegate<void()> main_function, int argc, char* argv[]);
81 static int safe_run(xtd::delegate<void()> main_function);
82 static int safe_run(xtd::delegate<void(int, char* [])> main_function, int argc, char* argv[]);
83 static int safe_run(xtd::delegate<void(int, char* [])> main_function);
84 static int safe_run(xtd::delegate<void(const xtd::argument_collection&)> main_function, int argc, char* argv[]);
85 static int safe_run(xtd::delegate<void(const xtd::argument_collection&)> main_function);
86 static int safe_run(xtd::delegate<int()> main_function, int argc, char* argv[]);
87 static int safe_run(xtd::delegate<int()> main_function);
88 static int safe_run(xtd::delegate<int(int, char* [])> main_function, int argc, char* argv[]);
89 static int safe_run(xtd::delegate<int(int, char* [])> main_function);
90 static int safe_run(xtd::delegate<int(const xtd::argument_collection&)> main_function, int argc, char* argv[]);
91 static int safe_run(xtd::delegate<int(const xtd::argument_collection&)> main_function);
92
93 static int safe_run(xtd::delegate<xtd::threading::tasks::task<>()> main_function, int argc, char* argv[]);
94 static int safe_run(xtd::delegate<xtd::threading::tasks::task<>()> main_function);
95 static int safe_run(xtd::delegate<xtd::threading::tasks::task<>(int, char* [])> main_function, int argc, char* argv[]);
96 static int safe_run(xtd::delegate<xtd::threading::tasks::task<>(int, char* [])> main_function);
97 static int safe_run(xtd::delegate<xtd::threading::tasks::task<>(const xtd::argument_collection&)> main_function, int argc, char* argv[]);
98 static int safe_run(xtd::delegate<xtd::threading::tasks::task<>(const xtd::argument_collection&)> main_function);
99 static int safe_run(xtd::delegate<xtd::threading::tasks::task<int>()> main_function, int argc, char* argv[]);
100 static int safe_run(xtd::delegate<xtd::threading::tasks::task<int>()> main_function);
101 static int safe_run(xtd::delegate<xtd::threading::tasks::task<int>(int, char* [])> main_function, int argc, char* argv[]);
102 static int safe_run(xtd::delegate<xtd::threading::tasks::task<int>(int, char* [])> main_function);
103 static int safe_run(xtd::delegate<xtd::threading::tasks::task<int>(const xtd::argument_collection&)> main_function, int argc, char* argv[]);
104 static int safe_run(xtd::delegate<xtd::threading::tasks::task<int>(const xtd::argument_collection&)> main_function);
105
106 static int safe_run(xtd::delegate<xtd::threading::tasks::wtask<>()> main_function, int argc, char* argv[]);
107 static int safe_run(xtd::delegate<xtd::threading::tasks::wtask<>()> main_function);
108 static int safe_run(xtd::delegate<xtd::threading::tasks::wtask<>(int, char* [])> main_function, int argc, char* argv[]);
109 static int safe_run(xtd::delegate<xtd::threading::tasks::wtask<>(int, char* [])> main_function);
110 static int safe_run(xtd::delegate<xtd::threading::tasks::wtask<>(const xtd::argument_collection&)> main_function, int argc, char* argv[]);
111 static int safe_run(xtd::delegate<xtd::threading::tasks::wtask<>(const xtd::argument_collection&)> main_function);
112 static int safe_run(xtd::delegate<xtd::threading::tasks::wtask<int>()> main_function, int argc, char* argv[]);
113 static int safe_run(xtd::delegate<xtd::threading::tasks::wtask<int>()> main_function);
114 static int safe_run(xtd::delegate<xtd::threading::tasks::wtask<int>(int, char* [])> main_function, int argc, char* argv[]);
115 static int safe_run(xtd::delegate<xtd::threading::tasks::wtask<int>(int, char* [])> main_function);
116 static int safe_run(xtd::delegate<xtd::threading::tasks::wtask<int>(const xtd::argument_collection&)> main_function, int argc, char* argv[]);
117 static int safe_run(xtd::delegate<xtd::threading::tasks::wtask<int>(const xtd::argument_collection&)> main_function);
118
119 static int safe_run(void (*main_function)(int, char* []), int argc, char* argv[]);
120 static int safe_run(void (*main_function)(int, char* []));
121 static int safe_run(void (*main_function)(const xtd::argument_collection&), int argc, char* argv[]);
122 static int safe_run(void (*main_function)(const xtd::argument_collection&));
123 static int safe_run(int (*main_function)(int, char* []), int argc, char* argv[]);
124 static int safe_run(int (*main_function)(int, char* []));
125 static int safe_run(int (*main_function)(const xtd::argument_collection&), int argc, char* argv[]);
126 static int safe_run(int (*main_function)(const xtd::argument_collection&));
127
128 static int safe_run(xtd::threading::tasks::task<> (*main_function)(), int argc, char* argv[]);
129 static int safe_run(xtd::threading::tasks::task<> (*main_function)());
130 static int safe_run(xtd::threading::tasks::task<> (*main_function)(int, char* []), int argc, char* argv[]);
131 static int safe_run(xtd::threading::tasks::task<> (*main_function)(int, char* []));
132 static int safe_run(xtd::threading::tasks::task<> (*main_function)(const xtd::argument_collection&), int argc, char* argv[]);
133 static int safe_run(xtd::threading::tasks::task<> (*main_function)(const xtd::argument_collection&));
134 static int safe_run(xtd::threading::tasks::task<int> (*main_function)(), int argc, char* argv[]);
135 static int safe_run(xtd::threading::tasks::task<int> (*main_function)());
136 static int safe_run(xtd::threading::tasks::task<int> (*main_function)(int, char* []), int argc, char* argv[]);
137 static int safe_run(xtd::threading::tasks::task<int> (*main_function)(int, char* []));
138 static int safe_run(xtd::threading::tasks::task<int> (*main_function)(const xtd::argument_collection&), int argc, char* argv[]);
139 static int safe_run(xtd::threading::tasks::task<int> (*main_function)(const xtd::argument_collection&));
140
141 static int safe_run(xtd::threading::tasks::wtask<> (*main_function)(), int argc, char* argv[]);
142 static int safe_run(xtd::threading::tasks::wtask<> (*main_function)());
143 static int safe_run(xtd::threading::tasks::wtask<> (*main_function)(int, char* []), int argc, char* argv[]);
144 static int safe_run(xtd::threading::tasks::wtask<> (*main_function)(int, char* []));
145 static int safe_run(xtd::threading::tasks::wtask<> (*main_function)(const xtd::argument_collection&), int argc, char* argv[]);
146 static int safe_run(xtd::threading::tasks::wtask<> (*main_function)(const xtd::argument_collection&));
147 static int safe_run(xtd::threading::tasks::wtask<int> (*main_function)(), int argc, char* argv[]);
148 static int safe_run(xtd::threading::tasks::wtask<int> (*main_function)());
149 static int safe_run(xtd::threading::tasks::wtask<int> (*main_function)(int, char* []), int argc, char* argv[]);
150 static int safe_run(xtd::threading::tasks::wtask<int> (*main_function)(int, char* []));
151 static int safe_run(xtd::threading::tasks::wtask<int> (*main_function)(const xtd::argument_collection&), int argc, char* argv[]);
152 static int safe_run(xtd::threading::tasks::wtask<int> (*main_function)(const xtd::argument_collection&));
154
155 private:
156 template<class main_function_t>
157 static int internal_safe_run(main_function_t main_function, std::optional<int> argc, std::optional<char**> argv) {
158 try {
159 init_safe_run();
160 auto exit_code = argc == std::nullopt && argv == std::nullopt ? run(main_function) : run(main_function, argc.value(), argv.value());
161 end_safe_run();
162 return exit_code;
163 } catch (const std::exception& e) {
164 __show_generic_exception_message__(e);
165 return EXIT_FAILURE;
166 } catch (...) {
167 \
168 __show_generic_exception_message__();
169 return EXIT_FAILURE;
170 }
171 }
172
173 static void init_safe_run();
174
175 static void end_safe_run();
176
177 static int run(xtd::delegate<void()> main_function, int argc, char* argv[]);
178 static int run(xtd::delegate<void()> main_function);
179 static int run(xtd::delegate<void(int, char* [])> main_function, int argc, char* argv[]);
180 static int run(xtd::delegate<void(int, char* [])> main_function);
181 static int run(xtd::delegate<void(const xtd::argument_collection&)> main_function, int argc, char* argv[]);
182 static int run(xtd::delegate<void(const xtd::argument_collection&)> main_function);
183 static int run(xtd::delegate<int()> main_function, int argc, char* argv[]);
184 static int run(xtd::delegate<int()> main_function);
185 static int run(xtd::delegate<int(int, char* [])> main_function, int argc, char* argv[]);
186 static int run(xtd::delegate<int(int, char* [])> main_function);
187 static int run(xtd::delegate<int(const xtd::argument_collection&)> main_function, int argc, char* argv[]);
188 static int run(xtd::delegate<int(const xtd::argument_collection&)> main_function);
189
190 static int run(xtd::delegate<xtd::threading::tasks::task<>()> main_function, int argc, char* argv[]);
191 static int run(xtd::delegate<xtd::threading::tasks::task<>()> main_function);
192 static int run(xtd::delegate<xtd::threading::tasks::task<>(int, char* [])> main_function, int argc, char* argv[]);
193 static int run(xtd::delegate<xtd::threading::tasks::task<>(int, char* [])> main_function);
194 static int run(xtd::delegate<xtd::threading::tasks::task<>(const xtd::argument_collection&)> main_function, int argc, char* argv[]);
195 static int run(xtd::delegate<xtd::threading::tasks::task<>(const xtd::argument_collection&)> main_function);
196 static int run(xtd::delegate<xtd::threading::tasks::task<int>()> main_function, int argc, char* argv[]);
197 static int run(xtd::delegate<xtd::threading::tasks::task<int>()> main_function);
198 static int run(xtd::delegate<xtd::threading::tasks::task<int>(int, char* [])> main_function, int argc, char* argv[]);
199 static int run(xtd::delegate<xtd::threading::tasks::task<int>(int, char* [])> main_function);
200 static int run(xtd::delegate<xtd::threading::tasks::task<int>(const xtd::argument_collection&)> main_function, int argc, char* argv[]);
201 static int run(xtd::delegate<xtd::threading::tasks::task<int>(const xtd::argument_collection&)> main_function);
202
203 static int run(xtd::delegate<xtd::threading::tasks::wtask<>()> main_function, int argc, char* argv[]);
204 static int run(xtd::delegate<xtd::threading::tasks::wtask<>()> main_function);
205 static int run(xtd::delegate<xtd::threading::tasks::wtask<>(int, char* [])> main_function, int argc, char* argv[]);
206 static int run(xtd::delegate<xtd::threading::tasks::wtask<>(int, char* [])> main_function);
207 static int run(xtd::delegate<xtd::threading::tasks::wtask<>(const xtd::argument_collection&)> main_function, int argc, char* argv[]);
208 static int run(xtd::delegate<xtd::threading::tasks::wtask<>(const xtd::argument_collection&)> main_function);
209 static int run(xtd::delegate<xtd::threading::tasks::wtask<int>()> main_function, int argc, char* argv[]);
210 static int run(xtd::delegate<xtd::threading::tasks::wtask<int>()> main_function);
211 static int run(xtd::delegate<xtd::threading::tasks::wtask<int>(int, char* [])> main_function, int argc, char* argv[]);
212 static int run(xtd::delegate<xtd::threading::tasks::wtask<int>(int, char* [])> main_function);
213 static int run(xtd::delegate<xtd::threading::tasks::wtask<int>(const xtd::argument_collection&)> main_function, int argc, char* argv[]);
214 static int run(xtd::delegate<xtd::threading::tasks::wtask<int>(const xtd::argument_collection&)> main_function);
215
216 static int run(void (*main_function)(), int argc, char* argv[]);
217 static int run(void (*main_function)());
218 static int run(void (*main_function)(int, char* []), int argc, char* argv[]);
219 static int run(void (*main_function)(int, char* []));
220 static int run(void (*main_function)(const xtd::argument_collection&), int argc, char* argv[]);
221 static int run(void (*main_function)(const xtd::argument_collection&));
222 static int run(int (*main_function)(), int argc, char* argv[]);
223 static int run(int (*main_function)());
224 static int run(int (*main_function)(int, char* []), int argc, char* argv[]);
225 static int run(int (*main_function)(int, char* []));
226 static int run(int (*main_function)(const xtd::argument_collection&), int argc, char* argv[]);
227 static int run(int (*main_function)(const xtd::argument_collection&));
228
229 static int run(xtd::threading::tasks::task<> (*main_function)(), int argc, char* argv[]);
230 static int run(xtd::threading::tasks::task<> (*main_function)());
231 static int run(xtd::threading::tasks::task<> (*main_function)(int, char* []), int argc, char* argv[]);
232 static int run(xtd::threading::tasks::task<> (*main_function)(int, char* []));
233 static int run(xtd::threading::tasks::task<> (*main_function)(const xtd::argument_collection&), int argc, char* argv[]);
234 static int run(xtd::threading::tasks::task<> (*main_function)(const xtd::argument_collection&));
235 static int run(xtd::threading::tasks::task<int> (*main_function)(), int argc, char* argv[]);
236 static int run(xtd::threading::tasks::task<int> (*main_function)());
237 static int run(xtd::threading::tasks::task<int> (*main_function)(int, char* []), int argc, char* argv[]);
238 static int run(xtd::threading::tasks::task<int> (*main_function)(int, char* []));
239 static int run(xtd::threading::tasks::task<int> (*main_function)(const xtd::argument_collection&), int argc, char* argv[]);
240 static int run(xtd::threading::tasks::task<int> (*main_function)(const xtd::argument_collection&));
241
242 static int run(xtd::threading::tasks::wtask<> (*main_function)(), int argc, char* argv[]);
243 static int run(xtd::threading::tasks::wtask<> (*main_function)());
244 static int run(xtd::threading::tasks::wtask<> (*main_function)(int, char* []), int argc, char* argv[]);
245 static int run(xtd::threading::tasks::wtask<> (*main_function)(int, char* []));
246 static int run(xtd::threading::tasks::wtask<> (*main_function)(const xtd::argument_collection&), int argc, char* argv[]);
247 static int run(xtd::threading::tasks::wtask<> (*main_function)(const xtd::argument_collection&));
248 static int run(xtd::threading::tasks::wtask<int> (*main_function)(), int argc, char* argv[]);
249 static int run(xtd::threading::tasks::wtask<int> (*main_function)());
250 static int run(xtd::threading::tasks::wtask<int> (*main_function)(int, char* []), int argc, char* argv[]);
251 static int run(xtd::threading::tasks::wtask<int> (*main_function)(int, char* []));
252 static int run(xtd::threading::tasks::wtask<int> (*main_function)(const xtd::argument_collection&), int argc, char* argv[]);
253 static int run(xtd::threading::tasks::wtask<int> (*main_function)(const xtd::argument_collection&));
254 };
255}
256
282#define startup_(main_method) \
283 auto main() -> int { \
284 return xtd::startup::safe_run(main_method); \
285 } \
286 auto __opaque_sftews__ = 0 // force to end with semicolon
Contains xtd::argument_collection alias.
Defines the xtd::startup object that can be used in the main method to safely call the application's ...
Definition startup.hpp:25
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:74
static int safe_run(main_function_t main_function)
Safely call the specified application's main entry point.
Definition startup.hpp:49
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.
#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.