xtd 1.0.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<typename main_function_t>
50 static auto run(main_function_t main_function) -> xtd::int32 {
51 return internal_run(main_function, std::nullopt, std::nullopt);
52 }
53
74 template<typename main_function_t>
75 static auto run(main_function_t main_function, int argc, char* argv[]) -> xtd::int32 {
76 return internal_run(main_function, argc, argv);
77 }
78
79
81 static auto run(xtd::delegate<void()> main_function, int argc, char* argv[]) -> xtd::int32;
82 static auto run(xtd::delegate<void()> main_function) -> xtd::int32;
83 static auto run(xtd::delegate<void(int, char* [])> main_function, int argc, char* argv[]) -> xtd::int32;
84 static auto run(xtd::delegate<void(int, char* [])> main_function) -> xtd::int32;
85 static auto run(xtd::delegate<void(const xtd::argument_collection&)> main_function, int argc, char* argv[]) -> xtd::int32;
86 static auto run(xtd::delegate<void(const xtd::argument_collection&)> main_function) -> xtd::int32;
87 static auto run(xtd::delegate<int()> main_function, int argc, char* argv[]) -> xtd::int32;
88 static auto run(xtd::delegate<int()> main_function) -> xtd::int32;
89 static auto run(xtd::delegate<int(int, char* [])> main_function, int argc, char* argv[]) -> xtd::int32;
90 static auto run(xtd::delegate<int(int, char* [])> main_function) -> xtd::int32;
91 static auto run(xtd::delegate<int(const xtd::argument_collection&)> main_function, int argc, char* argv[]) -> xtd::int32;
92 static auto run(xtd::delegate<int(const xtd::argument_collection&)> main_function) -> xtd::int32;
93
94 static auto run(xtd::delegate<xtd::threading::tasks::task<>()> main_function, int argc, char* argv[]) -> xtd::int32;
95 static auto run(xtd::delegate<xtd::threading::tasks::task<>()> main_function) -> xtd::int32;
96 static auto run(xtd::delegate<xtd::threading::tasks::task<>(int, char* [])> main_function, int argc, char* argv[]) -> xtd::int32;
97 static auto run(xtd::delegate<xtd::threading::tasks::task<>(int, char* [])> main_function) -> xtd::int32;
98 static auto run(xtd::delegate<xtd::threading::tasks::task<>(const xtd::argument_collection&)> main_function, int argc, char* argv[]) -> xtd::int32;
99 static auto run(xtd::delegate<xtd::threading::tasks::task<>(const xtd::argument_collection&)> main_function) -> xtd::int32;
100 static auto run(xtd::delegate<xtd::threading::tasks::task<int>()> main_function, int argc, char* argv[]) -> xtd::int32;
101 static auto run(xtd::delegate<xtd::threading::tasks::task<int>()> main_function) -> xtd::int32;
102 static auto run(xtd::delegate<xtd::threading::tasks::task<int>(int, char* [])> main_function, int argc, char* argv[]) -> xtd::int32;
103 static auto run(xtd::delegate<xtd::threading::tasks::task<int>(int, char* [])> main_function) -> xtd::int32;
104 static auto run(xtd::delegate<xtd::threading::tasks::task<int>(const xtd::argument_collection&)> main_function, int argc, char* argv[]) -> xtd::int32;
105 static auto run(xtd::delegate<xtd::threading::tasks::task<int>(const xtd::argument_collection&)> main_function) -> xtd::int32;
106
107 static auto run(xtd::delegate<xtd::threading::tasks::wtask<>()> main_function, int argc, char* argv[]) -> xtd::int32;
108 static auto run(xtd::delegate<xtd::threading::tasks::wtask<>()> main_function) -> xtd::int32;
109 static auto run(xtd::delegate<xtd::threading::tasks::wtask<>(int, char* [])> main_function, int argc, char* argv[]) -> xtd::int32;
110 static auto run(xtd::delegate<xtd::threading::tasks::wtask<>(int, char* [])> main_function) -> xtd::int32;
111 static auto run(xtd::delegate<xtd::threading::tasks::wtask<>(const xtd::argument_collection&)> main_function, int argc, char* argv[]) -> xtd::int32;
112 static auto run(xtd::delegate<xtd::threading::tasks::wtask<>(const xtd::argument_collection&)> main_function) -> xtd::int32;
113 static auto run(xtd::delegate<xtd::threading::tasks::wtask<int>()> main_function, int argc, char* argv[]) -> xtd::int32;
114 static auto run(xtd::delegate<xtd::threading::tasks::wtask<int>()> main_function) -> xtd::int32;
115 static auto run(xtd::delegate<xtd::threading::tasks::wtask<int>(int, char* [])> main_function, int argc, char* argv[]) -> xtd::int32;
116 static auto run(xtd::delegate<xtd::threading::tasks::wtask<int>(int, char* [])> main_function) -> xtd::int32;
117 static auto run(xtd::delegate<xtd::threading::tasks::wtask<int>(const xtd::argument_collection&)> main_function, int argc, char* argv[]) -> xtd::int32;
118 static auto run(xtd::delegate<xtd::threading::tasks::wtask<int>(const xtd::argument_collection&)> main_function) -> xtd::int32;
119
120 static auto run(void (*main_function)(int, char* []), int argc, char* argv[]) -> xtd::int32;
121 static auto run(void (*main_function)(int, char* [])) -> xtd::int32;
122 static auto run(void (*main_function)(const xtd::argument_collection&), int argc, char* argv[]) -> xtd::int32;
123 static auto run(void (*main_function)(const xtd::argument_collection&)) -> xtd::int32;
124 static auto run(int (*main_function)(int, char* []), int argc, char* argv[]) -> xtd::int32;
125 static auto run(int (*main_function)(int, char* [])) -> xtd::int32;
126 static auto run(int (*main_function)(const xtd::argument_collection&), int argc, char* argv[]) -> xtd::int32;
127 static auto run(int (*main_function)(const xtd::argument_collection&)) -> xtd::int32;
128
129 static auto run(xtd::threading::tasks::task<> (*main_function)(), int argc, char* argv[]) -> xtd::int32;
130 static auto run(xtd::threading::tasks::task<> (*main_function)()) -> xtd::int32;
131 static auto run(xtd::threading::tasks::task<> (*main_function)(int, char* []), int argc, char* argv[]) -> xtd::int32;
132 static auto run(xtd::threading::tasks::task<> (*main_function)(int, char* [])) -> xtd::int32;
133 static auto run(xtd::threading::tasks::task<> (*main_function)(const xtd::argument_collection&), int argc, char* argv[]) -> xtd::int32;
134 static auto run(xtd::threading::tasks::task<> (*main_function)(const xtd::argument_collection&)) -> xtd::int32;
135 static auto run(xtd::threading::tasks::task<int> (*main_function)(), int argc, char* argv[]) -> xtd::int32;
136 static auto run(xtd::threading::tasks::task<int> (*main_function)()) -> xtd::int32;
137 static auto run(xtd::threading::tasks::task<int> (*main_function)(int, char* []), int argc, char* argv[]) -> xtd::int32;
138 static auto run(xtd::threading::tasks::task<int> (*main_function)(int, char* [])) -> xtd::int32;
139 static auto run(xtd::threading::tasks::task<int> (*main_function)(const xtd::argument_collection&), int argc, char* argv[]) -> xtd::int32;
140 static auto run(xtd::threading::tasks::task<int> (*main_function)(const xtd::argument_collection&)) -> xtd::int32;
141
142 static auto run(xtd::threading::tasks::wtask<> (*main_function)(), int argc, char* argv[]) -> xtd::int32;
143 static auto run(xtd::threading::tasks::wtask<> (*main_function)()) -> xtd::int32;
144 static auto run(xtd::threading::tasks::wtask<> (*main_function)(int, char* []), int argc, char* argv[]) -> xtd::int32;
145 static auto run(xtd::threading::tasks::wtask<> (*main_function)(int, char* [])) -> xtd::int32;
146 static auto run(xtd::threading::tasks::wtask<> (*main_function)(const xtd::argument_collection&), int argc, char* argv[]) -> xtd::int32;
147 static auto run(xtd::threading::tasks::wtask<> (*main_function)(const xtd::argument_collection&)) -> xtd::int32;
148 static auto run(xtd::threading::tasks::wtask<int> (*main_function)(), int argc, char* argv[]) -> xtd::int32;
149 static auto run(xtd::threading::tasks::wtask<int> (*main_function)()) -> xtd::int32;
150 static auto run(xtd::threading::tasks::wtask<int> (*main_function)(int, char* []), int argc, char* argv[]) -> xtd::int32;
151 static auto run(xtd::threading::tasks::wtask<int> (*main_function)(int, char* [])) -> xtd::int32;
152 static auto run(xtd::threading::tasks::wtask<int> (*main_function)(const xtd::argument_collection&), int argc, char* argv[]) -> xtd::int32;
153 static auto run(xtd::threading::tasks::wtask<int> (*main_function)(const xtd::argument_collection&)) -> xtd::int32;
155
156 private:
157 template<typename main_function_t>
158 static auto internal_run(main_function_t main_function, std::optional<int> argc, std::optional<char**> argv) -> xtd::int32 {
159 try {
160 init_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_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 auto init_run() -> void;
176
177 static auto end_run() -> void;
178
179 static auto run_(xtd::delegate<void()> main_function, int argc, char* argv[]) -> xtd::int32;
180 static auto run_(xtd::delegate<void()> main_function) -> xtd::int32;
181 static auto run_(xtd::delegate<void(int, char* [])> main_function, int argc, char* argv[]) -> xtd::int32;
182 static auto run_(xtd::delegate<void(int, char* [])> main_function) -> xtd::int32;
183 static auto run_(xtd::delegate<void(const xtd::argument_collection&)> main_function, int argc, char* argv[]) -> xtd::int32;
184 static auto run_(xtd::delegate<void(const xtd::argument_collection&)> main_function) -> xtd::int32;
185 static auto run_(xtd::delegate<int()> main_function, int argc, char* argv[]) -> xtd::int32;
186 static auto run_(xtd::delegate<int()> main_function) -> xtd::int32;
187 static auto run_(xtd::delegate<int(int, char* [])> main_function, int argc, char* argv[]) -> xtd::int32;
188 static auto run_(xtd::delegate<int(int, char* [])> main_function) -> xtd::int32;
189 static auto run_(xtd::delegate<int(const xtd::argument_collection&)> main_function, int argc, char* argv[]) -> xtd::int32;
190 static auto run_(xtd::delegate<int(const xtd::argument_collection&)> main_function) -> xtd::int32;
191
192 static auto run_(xtd::delegate<xtd::threading::tasks::task<>()> main_function, int argc, char* argv[]) -> xtd::int32;
193 static auto run_(xtd::delegate<xtd::threading::tasks::task<>()> main_function) -> xtd::int32;
194 static auto run_(xtd::delegate<xtd::threading::tasks::task<>(int, char* [])> main_function, int argc, char* argv[]) -> xtd::int32;
195 static auto run_(xtd::delegate<xtd::threading::tasks::task<>(int, char* [])> main_function) -> xtd::int32;
196 static auto run_(xtd::delegate<xtd::threading::tasks::task<>(const xtd::argument_collection&)> main_function, int argc, char* argv[]) -> xtd::int32;
197 static auto run_(xtd::delegate<xtd::threading::tasks::task<>(const xtd::argument_collection&)> main_function) -> xtd::int32;
198 static auto run_(xtd::delegate<xtd::threading::tasks::task<int>()> main_function, int argc, char* argv[]) -> xtd::int32;
199 static auto run_(xtd::delegate<xtd::threading::tasks::task<int>()> main_function) -> xtd::int32;
200 static auto run_(xtd::delegate<xtd::threading::tasks::task<int>(int, char* [])> main_function, int argc, char* argv[]) -> xtd::int32;
201 static auto run_(xtd::delegate<xtd::threading::tasks::task<int>(int, char* [])> main_function) -> xtd::int32;
202 static auto run_(xtd::delegate<xtd::threading::tasks::task<int>(const xtd::argument_collection&)> main_function, int argc, char* argv[]) -> xtd::int32;
203 static auto run_(xtd::delegate<xtd::threading::tasks::task<int>(const xtd::argument_collection&)> main_function) -> xtd::int32;
204
205 static auto run_(xtd::delegate<xtd::threading::tasks::wtask<>()> main_function, int argc, char* argv[]) -> xtd::int32;
206 static auto run_(xtd::delegate<xtd::threading::tasks::wtask<>()> main_function) -> xtd::int32;
207 static auto run_(xtd::delegate<xtd::threading::tasks::wtask<>(int, char* [])> main_function, int argc, char* argv[]) -> xtd::int32;
208 static auto run_(xtd::delegate<xtd::threading::tasks::wtask<>(int, char* [])> main_function) -> xtd::int32;
209 static auto run_(xtd::delegate<xtd::threading::tasks::wtask<>(const xtd::argument_collection&)> main_function, int argc, char* argv[]) -> xtd::int32;
210 static auto run_(xtd::delegate<xtd::threading::tasks::wtask<>(const xtd::argument_collection&)> main_function) -> xtd::int32;
211 static auto run_(xtd::delegate<xtd::threading::tasks::wtask<int>()> main_function, int argc, char* argv[]) -> xtd::int32;
212 static auto run_(xtd::delegate<xtd::threading::tasks::wtask<int>()> main_function) -> xtd::int32;
213 static auto run_(xtd::delegate<xtd::threading::tasks::wtask<int>(int, char* [])> main_function, int argc, char* argv[]) -> xtd::int32;
214 static auto run_(xtd::delegate<xtd::threading::tasks::wtask<int>(int, char* [])> main_function) -> xtd::int32;
215 static auto run_(xtd::delegate<xtd::threading::tasks::wtask<int>(const xtd::argument_collection&)> main_function, int argc, char* argv[]) -> xtd::int32;
216 static auto run_(xtd::delegate<xtd::threading::tasks::wtask<int>(const xtd::argument_collection&)> main_function) -> xtd::int32;
217
218 static auto run_(void (*main_function)(), int argc, char* argv[]) -> xtd::int32;
219 static auto run_(void (*main_function)()) -> xtd::int32;
220 static auto run_(void (*main_function)(int, char* []), int argc, char* argv[]) -> xtd::int32;
221 static auto run_(void (*main_function)(int, char* [])) -> xtd::int32;
222 static auto run_(void (*main_function)(const xtd::argument_collection&), int argc, char* argv[]) -> xtd::int32;
223 static auto run_(void (*main_function)(const xtd::argument_collection&)) -> xtd::int32;
224 static auto run_(int (*main_function)(), int argc, char* argv[]) -> xtd::int32;
225 static auto run_(int (*main_function)()) -> xtd::int32;
226 static auto run_(int (*main_function)(int, char* []), int argc, char* argv[]) -> xtd::int32;
227 static auto run_(int (*main_function)(int, char* [])) -> xtd::int32;
228 static auto run_(int (*main_function)(const xtd::argument_collection&), int argc, char* argv[]) -> xtd::int32;
229 static auto run_(int (*main_function)(const xtd::argument_collection&)) -> xtd::int32;
230
231 static auto run_(xtd::threading::tasks::task<> (*main_function)(), int argc, char* argv[]) -> xtd::int32;
232 static auto run_(xtd::threading::tasks::task<> (*main_function)()) -> xtd::int32;
233 static auto run_(xtd::threading::tasks::task<> (*main_function)(int, char* []), int argc, char* argv[]) -> xtd::int32;
234 static auto run_(xtd::threading::tasks::task<> (*main_function)(int, char* [])) -> xtd::int32;
235 static auto run_(xtd::threading::tasks::task<> (*main_function)(const xtd::argument_collection&), int argc, char* argv[]) -> xtd::int32;
236 static auto run_(xtd::threading::tasks::task<> (*main_function)(const xtd::argument_collection&)) -> xtd::int32;
237 static auto run_(xtd::threading::tasks::task<int> (*main_function)(), int argc, char* argv[]) -> xtd::int32;
238 static auto run_(xtd::threading::tasks::task<int> (*main_function)()) -> xtd::int32;
239 static auto run_(xtd::threading::tasks::task<int> (*main_function)(int, char* []), int argc, char* argv[]) -> xtd::int32;
240 static auto run_(xtd::threading::tasks::task<int> (*main_function)(int, char* [])) -> xtd::int32;
241 static auto run_(xtd::threading::tasks::task<int> (*main_function)(const xtd::argument_collection&), int argc, char* argv[]) -> xtd::int32;
242 static auto run_(xtd::threading::tasks::task<int> (*main_function)(const xtd::argument_collection&)) -> xtd::int32;
243
244 static auto run_(xtd::threading::tasks::wtask<> (*main_function)(), int argc, char* argv[]) -> xtd::int32;
245 static auto run_(xtd::threading::tasks::wtask<> (*main_function)()) -> xtd::int32;
246 static auto run_(xtd::threading::tasks::wtask<> (*main_function)(int, char* []), int argc, char* argv[]) -> xtd::int32;
247 static auto run_(xtd::threading::tasks::wtask<> (*main_function)(int, char* [])) -> xtd::int32;
248 static auto run_(xtd::threading::tasks::wtask<> (*main_function)(const xtd::argument_collection&), int argc, char* argv[]) -> xtd::int32;
249 static auto run_(xtd::threading::tasks::wtask<> (*main_function)(const xtd::argument_collection&)) -> xtd::int32;
250 static auto run_(xtd::threading::tasks::wtask<int> (*main_function)(), int argc, char* argv[]) -> xtd::int32;
251 static auto run_(xtd::threading::tasks::wtask<int> (*main_function)()) -> xtd::int32;
252 static auto run_(xtd::threading::tasks::wtask<int> (*main_function)(int, char* []), int argc, char* argv[]) -> xtd::int32;
253 static auto run_(xtd::threading::tasks::wtask<int> (*main_function)(int, char* [])) -> xtd::int32;
254 static auto run_(xtd::threading::tasks::wtask<int> (*main_function)(const xtd::argument_collection&), int argc, char* argv[]) -> xtd::int32;
255 static auto run_(xtd::threading::tasks::wtask<int> (*main_function)(const xtd::argument_collection&)) -> xtd::int32;
256 };
257}
258
284#define startup_(...) \
285 auto main() -> int { \
286 return xtd::startup::run(__VA_ARGS__); \
287 } \
288 auto __opaque_sftews__ = 0 // force to end with semicolon
Contains xtd::argument_collection alias.
static auto set_command_line_args(const xtd::argument_collection &args) -> void
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 auto run(main_function_t main_function) -> xtd::int32
Safely call the specified application's main entry point.
Definition startup.hpp:50
static auto run(main_function_t main_function, int argc, char *argv[]) -> xtd::int32
Safely call the specified application's main entry point, argc and argv.
Definition startup.hpp:75
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:38
#define core_export_
Define shared library export.
Definition core_export.hpp:13
std::int32_t int32
Represents a 32-bit signed integer.
Definition int32.hpp:25
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.