14#include "arccore/common/CommandLineArguments.h"
16#include "arccore/base/String.h"
17#include "arccore/base/PlatformUtils.h"
19#include "arccore/common/List.h"
20#include "arccore/common/ParameterList.h"
59 Impl(
int* argc,
char*** argv)
64 , m_need_destroy(false)
74 , m_need_destroy(true)
78 m_argc_orig =
new int;
82 m_argv_orig =
new char**;
83 char*** argv = m_argv_orig;
84 *argv =
new char*[nb_arg + 1];
85 m_argv0 = ::strdup(
"arcane");
87 for (
Integer i = 0; i < nb_arg; ++i)
88 (*argv)[i + 1] = (
char*)m_args[i].localstr();
97 , m_need_destroy(true)
100 m_argc_orig =
new int;
104 m_argv_orig =
new char**;
105 char*** argv = m_argv_orig;
106 *argv =
new char*[1];
107 m_argv0 = ::strdup(
"arcane");
108 (*argv)[0] = m_argv0;
113 if (m_need_destroy) {
116 delete[] (*m_argv_orig);
124 void addReference() { ++m_nb_ref; }
125 void removeReference()
130 Int32 v = std::atomic_fetch_add(&m_nb_ref, -1);
139 command_line_args.fillArgs(args);
140 if (args.count() == 1) {
144 for (
Integer i = 0, n = args.count(); i < n; ++i) {
145 String arg = args[i];
146 if (arg.startsWith(
"-h") || arg.startsWith(
"--help")) {
151 if (!arg.startsWith(
"-A,"))
153 String arg_value = arg.substring(3);
154 if (arg_value.null() || arg_value.empty())
156 UniqueArray<String> values;
157 arg_value.split(values,
',');
158 for (
const auto& x : values) {
159 m_parameter_list.addParameterLine(x);
163 String getParameter(
const String& param_name)
165 return m_parameter_list.getParameterOrNull(param_name);
170 m_parameter_list.fillParameters(param_names, values);
180 std::atomic<Int32> m_nb_ref;
184 int* m_argc_orig =
nullptr;
185 char*** m_argv_orig =
nullptr;
186 char* m_argv0 =
nullptr;
197: m_p(new
Impl(argc, argv))
199 m_p->parseParameters(*
this);
209 m_p->parseParameters(*
this);
217: m_p(new Impl(aargs))
219 m_p->parseParameters(*
this);
244CommandLineArguments::
245~CommandLineArguments()
252int* CommandLineArguments::
253commandLineArgc()
const
261char*** CommandLineArguments::
262commandLineArgv()
const
273 int nargc = *m_p->m_argc;
274 char** nargv = *m_p->m_argv;
276 for (
int i = 0; i < nargc; ++i)
286 return m_p->getParameter(param_name);
295 m_p->m_parameter_list.addParameterLine(line);
304 m_p->fillParameters(param_names, values);
313 return m_p->m_parameter_list;
322 return m_p->needHelp();
Integer count() const
Number of elements in the collection.
int * m_argc
Number of command line arguments.
char *** m_argv
Array of command line arguments.
const ParameterList & parameters() const
List of parameters.
void addParameterLine(const String &line)
Adds a parameter.
CommandLineArguments(int *argc, char ***argv)
Create an instance from the arguments (argc,argv).
bool needHelp() const
Method to determine if the user requested help on the command line.
void fillArgs(StringList &args) const
Fills args with command line arguments.
String getParameter(const String ¶m_name) const
Retrieves the parameter with name param_name.
void fillParameters(StringList ¶m_names, StringList &values) const
Retrieves the list of parameters and their values.
Unicode character string.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
Int32 Integer
Type representing an integer.
List< String > StringList
Unicode string list.
std::int32_t Int32
Signed integer type of 32 bits.