Files
argument-parser/src/source/parser/platform_parsers/macos_parser.cpp
2026-05-13 13:05:51 +04:00

44 lines
2.2 KiB
C++

#ifdef __APPLE__
#include "macos_parser.hpp"
#include <crt_externs.h>
#define MACOS_GETARGS_LOOP(argc_name, argv_name, before_for, for_body) \
do { \
const int(argc_name) = *_NSGetArgc(); \
if (char **(argv_name) = *_NSGetArgv(); \
(argc_name) > 0 && (argv_name) != nullptr && (argv_name)[0] != nullptr) { \
do { \
(before_for); \
} while (false); \
for (int i = 1; i < (argc_name); ++i) { \
{ \
for_body \
} \
} \
} \
} while (false)
namespace argument_parser {
macos_parser::macos_parser() {
MACOS_GETARGS_LOOP(argc, argv, program_name = argv[0], {
if (argv[i] != nullptr)
parsed_arguments.emplace_back(argv[i]);
});
}
namespace v2 {
macos_parser::macos_parser(parser_settings const &settings) {
MACOS_GETARGS_LOOP(argc, argv, set_program_name(argv[0]), {
if (argv[i] != nullptr)
ref_parsed_args().emplace_back(argv[i]);
});
prepare_help_flag(settings.should_exit_on_help);
set_settings(settings);
}
} // namespace v2
} // namespace argument_parser
#endif