14#include "arcane/utils/CommandLineArguments.h"
15#include "arcane/utils/String.h"
16#include "arcane/utils/PlatformUtils.h"
17#include "arcane/utils/List.h"
18#include "arcane/utils/ParameterList.h"
44 NameValuePair(
const String& n,
const String& v) : name(n), value(v){}
49 Impl(
int* argc,
char*** argv)
54 , m_need_destroy(false)
64 , m_need_destroy(true)
68 m_argc_orig =
new int;
72 m_argv_orig =
new char**;
73 char*** argv = m_argv_orig;
74 *argv =
new char*[nb_arg+1];
75 m_argv0 = ::strdup(
"arcane");
77 for(
Integer i=0; i<nb_arg; ++i )
78 (*argv)[i+1] = (
char*)m_args[i].localstr();
87 , m_need_destroy(true)
90 m_argc_orig =
new int;
94 m_argv_orig =
new char**;
95 char*** argv = m_argv_orig;
97 m_argv0 = ::strdup(
"arcane");
106 delete[] (*m_argv_orig);
112 void addReference() { ++m_nb_ref; }
113 void removeReference()
118 Int32 v = std::atomic_fetch_add(&m_nb_ref,-1);
122 void parseParameters(
const CommandLineArguments& command_line_args)
127 command_line_args.fillArgs(args);
128 if (args.count() == 1) {
132 for (
Integer i = 0, n = args.count(); i < n; ++i) {
133 String arg = args[i];
134 if (arg.startsWith(
"-h") || arg.startsWith(
"--help")) {
139 if (!arg.startsWith(
"-A,"))
141 String arg_value = arg.substring(3);
142 if (arg_value.null() || arg_value.empty())
144 UniqueArray<String> values;
145 arg_value.split(values,
',');
146 for(
const auto& x : values ){
147 m_parameter_list.addParameterLine(x);
151 String getParameter(
const String& param_name)
153 return m_parameter_list.getParameterOrNull(param_name);
158 m_parameter_list.fillParameters(param_names,values);
161 bool needHelp()
const
167 std::atomic<Int32> m_nb_ref;
171 int* m_argc_orig =
nullptr;
172 char*** m_argv_orig =
nullptr;
173 char* m_argv0 =
nullptr;
182CommandLineArguments::
183CommandLineArguments(
int* argc,
char*** argv)
184: m_p(new
Impl(argc,argv))
186 m_p->parseParameters(*
this);
192CommandLineArguments::
193CommandLineArguments()
196 m_p->parseParameters(*
this);
202CommandLineArguments::
204: m_p(new Impl(aargs))
206 m_p->parseParameters(*
this);
212CommandLineArguments::
231CommandLineArguments::
232~CommandLineArguments()
239int* CommandLineArguments::
240commandLineArgc()
const
248char*** CommandLineArguments::
249commandLineArgv()
const
260 int nargc = *m_p->m_argc;
261 char** nargv = *m_p->m_argv;
263 for(
int i=0; i<nargc; ++i )
273 return m_p->getParameter(param_name);
282 m_p->m_parameter_list.addParameterLine(line);
291 m_p->fillParameters(param_names,values);
300 return m_p->m_parameter_list;
309 return m_p->needHelp();
Integer count() const
Nombre d'éléments de la collection.
int * m_argc
Nombre d'arguments de la ligne de commande.
char *** m_argv
Tableau des arguments de la ligne de commande.
Arguments de la ligne de commande.
const ParameterList & parameters() const
Liste des paramètres.
void addParameterLine(const String &line)
Ajoute un paramètre.
bool needHelp() const
Méthode permettant de savoir si l'utilisateur a demandé de l'aide dans la ligne de commande.
void fillArgs(StringList &args) const
Remplit args avec arguments de la ligne de commande.
String getParameter(const String ¶m_name) const
Récupère le paramètre de nom param_name.
void fillParameters(StringList ¶m_names, StringList &values) const
Récupère la liste des paramètres et leur valeur.
Chaîne de caractères unicode.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.
List< String > StringList
Tableau de chaînes de caractères unicode.
std::int32_t Int32
Type entier signé sur 32 bits.