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 "exception.hpp"
12#include "optional.hpp"
13#include "static.hpp"
14
16namespace xtd {
24 public:
26
46 template<typename main_function_t>
47 static auto run(main_function_t main_function) -> xtd::int32 {
48 return internal_run(main_function, std::nullopt, std::nullopt);
49 }
50
71 template<typename main_function_t>
72 static auto run(main_function_t main_function, int argc, char* argv[]) -> xtd::int32 {
73 return internal_run(main_function, argc, argv);
74 }
75
76
78 static auto run(xtd::delegate<void()> main_function, int argc, char* argv[]) -> xtd::int32;
79 static auto run(xtd::delegate<void()> main_function) -> xtd::int32;
80 static auto run(xtd::delegate<void(int, char* [])> main_function, int argc, char* argv[]) -> xtd::int32;
81 static auto run(xtd::delegate<void(int, char* [])> main_function) -> xtd::int32;
82 static auto run(xtd::delegate<void(const xtd::argument_collection&)> main_function, int argc, char* argv[]) -> xtd::int32;
83 static auto run(xtd::delegate<void(const xtd::argument_collection&)> main_function) -> xtd::int32;
84 static auto run(xtd::delegate<int()> main_function, int argc, char* argv[]) -> xtd::int32;
85 static auto run(xtd::delegate<int()> main_function) -> xtd::int32;
86 static auto run(xtd::delegate<int(int, char* [])> main_function, int argc, char* argv[]) -> xtd::int32;
87 static auto run(xtd::delegate<int(int, char* [])> main_function) -> xtd::int32;
88 static auto run(xtd::delegate<int(const xtd::argument_collection&)> main_function, int argc, char* argv[]) -> xtd::int32;
89 static auto run(xtd::delegate<int(const xtd::argument_collection&)> main_function) -> xtd::int32;
90
91 static auto run(xtd::delegate<xtd::threading::tasks::task<>()> main_function, int argc, char* argv[]) -> xtd::int32;
92 static auto run(xtd::delegate<xtd::threading::tasks::task<>()> main_function) -> xtd::int32;
93 static auto run(xtd::delegate<xtd::threading::tasks::task<>(int, char* [])> main_function, int argc, char* argv[]) -> xtd::int32;
94 static auto run(xtd::delegate<xtd::threading::tasks::task<>(int, char* [])> main_function) -> xtd::int32;
95 static auto run(xtd::delegate<xtd::threading::tasks::task<>(const xtd::argument_collection&)> main_function, int argc, char* argv[]) -> xtd::int32;
96 static auto run(xtd::delegate<xtd::threading::tasks::task<>(const xtd::argument_collection&)> main_function) -> xtd::int32;
97 static auto run(xtd::delegate<xtd::threading::tasks::task<int>()> main_function, int argc, char* argv[]) -> xtd::int32;
98 static auto run(xtd::delegate<xtd::threading::tasks::task<int>()> main_function) -> xtd::int32;
99 static auto run(xtd::delegate<xtd::threading::tasks::task<int>(int, char* [])> main_function, int argc, char* argv[]) -> xtd::int32;
100 static auto run(xtd::delegate<xtd::threading::tasks::task<int>(int, char* [])> main_function) -> xtd::int32;
101 static auto run(xtd::delegate<xtd::threading::tasks::task<int>(const xtd::argument_collection&)> main_function, int argc, char* argv[]) -> xtd::int32;
102 static auto run(xtd::delegate<xtd::threading::tasks::task<int>(const xtd::argument_collection&)> main_function) -> xtd::int32;
103
104 static auto run(xtd::delegate<xtd::threading::tasks::wtask<>()> main_function, int argc, char* argv[]) -> xtd::int32;
105 static auto run(xtd::delegate<xtd::threading::tasks::wtask<>()> main_function) -> xtd::int32;
106 static auto run(xtd::delegate<xtd::threading::tasks::wtask<>(int, char* [])> main_function, int argc, char* argv[]) -> xtd::int32;
107 static auto run(xtd::delegate<xtd::threading::tasks::wtask<>(int, char* [])> main_function) -> xtd::int32;
108 static auto run(xtd::delegate<xtd::threading::tasks::wtask<>(const xtd::argument_collection&)> main_function, int argc, char* argv[]) -> xtd::int32;
109 static auto run(xtd::delegate<xtd::threading::tasks::wtask<>(const xtd::argument_collection&)> main_function) -> xtd::int32;
110 static auto run(xtd::delegate<xtd::threading::tasks::wtask<int>()> main_function, int argc, char* argv[]) -> xtd::int32;
111 static auto run(xtd::delegate<xtd::threading::tasks::wtask<int>()> main_function) -> xtd::int32;
112 static auto run(xtd::delegate<xtd::threading::tasks::wtask<int>(int, char* [])> main_function, int argc, char* argv[]) -> xtd::int32;
113 static auto run(xtd::delegate<xtd::threading::tasks::wtask<int>(int, char* [])> main_function) -> xtd::int32;
114 static auto run(xtd::delegate<xtd::threading::tasks::wtask<int>(const xtd::argument_collection&)> main_function, int argc, char* argv[]) -> xtd::int32;
115 static auto run(xtd::delegate<xtd::threading::tasks::wtask<int>(const xtd::argument_collection&)> main_function) -> xtd::int32;
116
117 static auto run(void (*main_function)(int, char* []), int argc, char* argv[]) -> xtd::int32;
118 static auto run(void (*main_function)(int, char* [])) -> xtd::int32;
119 static auto run(void (*main_function)(const xtd::argument_collection&), int argc, char* argv[]) -> xtd::int32;
120 static auto run(void (*main_function)(const xtd::argument_collection&)) -> xtd::int32;
121 static auto run(int (*main_function)(int, char* []), int argc, char* argv[]) -> xtd::int32;
122 static auto run(int (*main_function)(int, char* [])) -> xtd::int32;
123 static auto run(int (*main_function)(const xtd::argument_collection&), int argc, char* argv[]) -> xtd::int32;
124 static auto run(int (*main_function)(const xtd::argument_collection&)) -> xtd::int32;
125
126 static auto run(xtd::threading::tasks::task<> (*main_function)(), int argc, char* argv[]) -> xtd::int32;
127 static auto run(xtd::threading::tasks::task<> (*main_function)()) -> xtd::int32;
128 static auto run(xtd::threading::tasks::task<> (*main_function)(int, char* []), int argc, char* argv[]) -> xtd::int32;
129 static auto run(xtd::threading::tasks::task<> (*main_function)(int, char* [])) -> xtd::int32;
130 static auto run(xtd::threading::tasks::task<> (*main_function)(const xtd::argument_collection&), int argc, char* argv[]) -> xtd::int32;
131 static auto run(xtd::threading::tasks::task<> (*main_function)(const xtd::argument_collection&)) -> xtd::int32;
132 static auto run(xtd::threading::tasks::task<int> (*main_function)(), int argc, char* argv[]) -> xtd::int32;
133 static auto run(xtd::threading::tasks::task<int> (*main_function)()) -> xtd::int32;
134 static auto run(xtd::threading::tasks::task<int> (*main_function)(int, char* []), int argc, char* argv[]) -> xtd::int32;
135 static auto run(xtd::threading::tasks::task<int> (*main_function)(int, char* [])) -> xtd::int32;
136 static auto run(xtd::threading::tasks::task<int> (*main_function)(const xtd::argument_collection&), int argc, char* argv[]) -> xtd::int32;
137 static auto run(xtd::threading::tasks::task<int> (*main_function)(const xtd::argument_collection&)) -> xtd::int32;
138
139 static auto run(xtd::threading::tasks::wtask<> (*main_function)(), int argc, char* argv[]) -> xtd::int32;
140 static auto run(xtd::threading::tasks::wtask<> (*main_function)()) -> xtd::int32;
141 static auto run(xtd::threading::tasks::wtask<> (*main_function)(int, char* []), int argc, char* argv[]) -> xtd::int32;
142 static auto run(xtd::threading::tasks::wtask<> (*main_function)(int, char* [])) -> xtd::int32;
143 static auto run(xtd::threading::tasks::wtask<> (*main_function)(const xtd::argument_collection&), int argc, char* argv[]) -> xtd::int32;
144 static auto run(xtd::threading::tasks::wtask<> (*main_function)(const xtd::argument_collection&)) -> xtd::int32;
145 static auto run(xtd::threading::tasks::wtask<int> (*main_function)(), int argc, char* argv[]) -> xtd::int32;
146 static auto run(xtd::threading::tasks::wtask<int> (*main_function)()) -> xtd::int32;
147 static auto run(xtd::threading::tasks::wtask<int> (*main_function)(int, char* []), int argc, char* argv[]) -> xtd::int32;
148 static auto run(xtd::threading::tasks::wtask<int> (*main_function)(int, char* [])) -> xtd::int32;
149 static auto run(xtd::threading::tasks::wtask<int> (*main_function)(const xtd::argument_collection&), int argc, char* argv[]) -> xtd::int32;
150 static auto run(xtd::threading::tasks::wtask<int> (*main_function)(const xtd::argument_collection&)) -> xtd::int32;
152
153 private:
154 template<typename main_function_t>
155 static auto internal_run(main_function_t main_function, std::optional<int> argc, std::optional<char**> argv) -> xtd::int32 {
156 try {
157 init_run();
158 if (argv.has_value() && argc.has_value()) xtd::environment::set_command_line_args({argv.value(), argv.value() + argc.value()});
159 auto exit_code = argc == std::nullopt && argv == std::nullopt ? run_(main_function) : run_(main_function, argc.value(), argv.value());
160 end_run();
161 return exit_code;
162 } catch (const std::exception& e) {
164 } catch (...) {
166 }
167 }
168
169 static auto init_run() -> void;
170
171 static auto end_run() -> void;
172
173 static auto run_(xtd::delegate<void()> main_function, int argc, char* argv[]) -> xtd::int32;
174 static auto run_(xtd::delegate<void()> main_function) -> xtd::int32;
175 static auto run_(xtd::delegate<void(int, char* [])> main_function, int argc, char* argv[]) -> xtd::int32;
176 static auto run_(xtd::delegate<void(int, char* [])> main_function) -> xtd::int32;
177 static auto run_(xtd::delegate<void(const xtd::argument_collection&)> main_function, int argc, char* argv[]) -> xtd::int32;
178 static auto run_(xtd::delegate<void(const xtd::argument_collection&)> main_function) -> xtd::int32;
179 static auto run_(xtd::delegate<int()> main_function, int argc, char* argv[]) -> xtd::int32;
180 static auto run_(xtd::delegate<int()> main_function) -> xtd::int32;
181 static auto run_(xtd::delegate<int(int, char* [])> main_function, int argc, char* argv[]) -> xtd::int32;
182 static auto run_(xtd::delegate<int(int, char* [])> main_function) -> xtd::int32;
183 static auto run_(xtd::delegate<int(const xtd::argument_collection&)> main_function, int argc, char* argv[]) -> xtd::int32;
184 static auto run_(xtd::delegate<int(const xtd::argument_collection&)> main_function) -> xtd::int32;
185
186 static auto run_(xtd::delegate<xtd::threading::tasks::task<>()> main_function, int argc, char* argv[]) -> xtd::int32;
187 static auto run_(xtd::delegate<xtd::threading::tasks::task<>()> main_function) -> xtd::int32;
188 static auto run_(xtd::delegate<xtd::threading::tasks::task<>(int, char* [])> main_function, int argc, char* argv[]) -> xtd::int32;
189 static auto run_(xtd::delegate<xtd::threading::tasks::task<>(int, char* [])> main_function) -> xtd::int32;
190 static auto run_(xtd::delegate<xtd::threading::tasks::task<>(const xtd::argument_collection&)> main_function, int argc, char* argv[]) -> xtd::int32;
191 static auto run_(xtd::delegate<xtd::threading::tasks::task<>(const xtd::argument_collection&)> main_function) -> xtd::int32;
192 static auto run_(xtd::delegate<xtd::threading::tasks::task<int>()> main_function, int argc, char* argv[]) -> xtd::int32;
193 static auto run_(xtd::delegate<xtd::threading::tasks::task<int>()> main_function) -> xtd::int32;
194 static auto run_(xtd::delegate<xtd::threading::tasks::task<int>(int, char* [])> main_function, int argc, char* argv[]) -> xtd::int32;
195 static auto run_(xtd::delegate<xtd::threading::tasks::task<int>(int, char* [])> main_function) -> xtd::int32;
196 static auto run_(xtd::delegate<xtd::threading::tasks::task<int>(const xtd::argument_collection&)> main_function, int argc, char* argv[]) -> xtd::int32;
197 static auto run_(xtd::delegate<xtd::threading::tasks::task<int>(const xtd::argument_collection&)> main_function) -> xtd::int32;
198
199 static auto run_(xtd::delegate<xtd::threading::tasks::wtask<>()> main_function, int argc, char* argv[]) -> xtd::int32;
200 static auto run_(xtd::delegate<xtd::threading::tasks::wtask<>()> main_function) -> xtd::int32;
201 static auto run_(xtd::delegate<xtd::threading::tasks::wtask<>(int, char* [])> main_function, int argc, char* argv[]) -> xtd::int32;
202 static auto run_(xtd::delegate<xtd::threading::tasks::wtask<>(int, char* [])> main_function) -> xtd::int32;
203 static auto run_(xtd::delegate<xtd::threading::tasks::wtask<>(const xtd::argument_collection&)> main_function, int argc, char* argv[]) -> xtd::int32;
204 static auto run_(xtd::delegate<xtd::threading::tasks::wtask<>(const xtd::argument_collection&)> main_function) -> xtd::int32;
205 static auto run_(xtd::delegate<xtd::threading::tasks::wtask<int>()> main_function, int argc, char* argv[]) -> xtd::int32;
206 static auto run_(xtd::delegate<xtd::threading::tasks::wtask<int>()> main_function) -> xtd::int32;
207 static auto run_(xtd::delegate<xtd::threading::tasks::wtask<int>(int, char* [])> main_function, int argc, char* argv[]) -> xtd::int32;
208 static auto run_(xtd::delegate<xtd::threading::tasks::wtask<int>(int, char* [])> main_function) -> xtd::int32;
209 static auto run_(xtd::delegate<xtd::threading::tasks::wtask<int>(const xtd::argument_collection&)> main_function, int argc, char* argv[]) -> xtd::int32;
210 static auto run_(xtd::delegate<xtd::threading::tasks::wtask<int>(const xtd::argument_collection&)> main_function) -> xtd::int32;
211
212 static auto run_(void (*main_function)(), int argc, char* argv[]) -> xtd::int32;
213 static auto run_(void (*main_function)()) -> xtd::int32;
214 static auto run_(void (*main_function)(int, char* []), int argc, char* argv[]) -> xtd::int32;
215 static auto run_(void (*main_function)(int, char* [])) -> xtd::int32;
216 static auto run_(void (*main_function)(const xtd::argument_collection&), int argc, char* argv[]) -> xtd::int32;
217 static auto run_(void (*main_function)(const xtd::argument_collection&)) -> xtd::int32;
218 static auto run_(int (*main_function)(), int argc, char* argv[]) -> xtd::int32;
219 static auto run_(int (*main_function)()) -> xtd::int32;
220 static auto run_(int (*main_function)(int, char* []), int argc, char* argv[]) -> xtd::int32;
221 static auto run_(int (*main_function)(int, char* [])) -> xtd::int32;
222 static auto run_(int (*main_function)(const xtd::argument_collection&), int argc, char* argv[]) -> xtd::int32;
223 static auto run_(int (*main_function)(const xtd::argument_collection&)) -> xtd::int32;
224
225 static auto run_(xtd::threading::tasks::task<> (*main_function)(), int argc, char* argv[]) -> xtd::int32;
226 static auto run_(xtd::threading::tasks::task<> (*main_function)()) -> xtd::int32;
227 static auto run_(xtd::threading::tasks::task<> (*main_function)(int, char* []), int argc, char* argv[]) -> xtd::int32;
228 static auto run_(xtd::threading::tasks::task<> (*main_function)(int, char* [])) -> xtd::int32;
229 static auto run_(xtd::threading::tasks::task<> (*main_function)(const xtd::argument_collection&), int argc, char* argv[]) -> xtd::int32;
230 static auto run_(xtd::threading::tasks::task<> (*main_function)(const xtd::argument_collection&)) -> xtd::int32;
231 static auto run_(xtd::threading::tasks::task<int> (*main_function)(), int argc, char* argv[]) -> xtd::int32;
232 static auto run_(xtd::threading::tasks::task<int> (*main_function)()) -> xtd::int32;
233 static auto run_(xtd::threading::tasks::task<int> (*main_function)(int, char* []), int argc, char* argv[]) -> xtd::int32;
234 static auto run_(xtd::threading::tasks::task<int> (*main_function)(int, char* [])) -> xtd::int32;
235 static auto run_(xtd::threading::tasks::task<int> (*main_function)(const xtd::argument_collection&), int argc, char* argv[]) -> xtd::int32;
236 static auto run_(xtd::threading::tasks::task<int> (*main_function)(const xtd::argument_collection&)) -> xtd::int32;
237
238 static auto run_(xtd::threading::tasks::wtask<> (*main_function)(), int argc, char* argv[]) -> xtd::int32;
239 static auto run_(xtd::threading::tasks::wtask<> (*main_function)()) -> xtd::int32;
240 static auto run_(xtd::threading::tasks::wtask<> (*main_function)(int, char* []), int argc, char* argv[]) -> xtd::int32;
241 static auto run_(xtd::threading::tasks::wtask<> (*main_function)(int, char* [])) -> xtd::int32;
242 static auto run_(xtd::threading::tasks::wtask<> (*main_function)(const xtd::argument_collection&), int argc, char* argv[]) -> xtd::int32;
243 static auto run_(xtd::threading::tasks::wtask<> (*main_function)(const xtd::argument_collection&)) -> xtd::int32;
244 static auto run_(xtd::threading::tasks::wtask<int> (*main_function)(), int argc, char* argv[]) -> xtd::int32;
245 static auto run_(xtd::threading::tasks::wtask<int> (*main_function)()) -> xtd::int32;
246 static auto run_(xtd::threading::tasks::wtask<int> (*main_function)(int, char* []), int argc, char* argv[]) -> xtd::int32;
247 static auto run_(xtd::threading::tasks::wtask<int> (*main_function)(int, char* [])) -> xtd::int32;
248 static auto run_(xtd::threading::tasks::wtask<int> (*main_function)(const xtd::argument_collection&), int argc, char* argv[]) -> xtd::int32;
249 static auto run_(xtd::threading::tasks::wtask<int> (*main_function)(const xtd::argument_collection&)) -> xtd::int32;
250 };
251}
252
278#define startup_(...) \
279 auto main() -> int { \
280 return xtd::startup::run(__VA_ARGS__); \
281 } \
282 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.
static auto show_exception() -> xtd::int32
Shows unspecified exception with xtd::forms::exception_dialog or xtd::console.
Definition exception.hpp:149
Defines the xtd::startup object that can be used in the main method to safely call the application's ...
Definition startup.hpp:23
static auto run(main_function_t main_function) -> xtd::int32
Safely call the specified application's main entry point.
Definition startup.hpp:47
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:72
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.
Contains xtd::exception exception.
#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.