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"
47 NameValuePair(
const String& n,
const String& v) : name(n), value(v){}
52 Impl(
int* argc,
char*** argv)
57 , m_need_destroy(false)
67 , m_need_destroy(true)
71 m_argc_orig =
new int;
75 m_argv_orig =
new char**;
76 char*** argv = m_argv_orig;
77 *argv =
new char*[nb_arg+1];
78 m_argv0 = ::strdup(
"arcane");
80 for(
Integer i=0; i<nb_arg; ++i )
81 (*argv)[i+1] = (
char*)m_args[i].localstr();
90 , m_need_destroy(true)
93 m_argc_orig =
new int;
97 m_argv_orig =
new char**;
98 char*** argv = m_argv_orig;
100 m_argv0 = ::strdup(
"arcane");
101 (*argv)[0] = m_argv0;
109 delete[] (*m_argv_orig);
115 void addReference() { ++m_nb_ref; }
116 void removeReference()
121 Int32 v = std::atomic_fetch_add(&m_nb_ref,-1);
125 void parseParameters(
const CommandLineArguments& command_line_args)
130 command_line_args.fillArgs(args);
131 if (args.count() == 1) {
135 for (
Integer i = 0, n = args.count(); i < n; ++i) {
136 String arg = args[i];
137 if (arg.startsWith(
"-h") || arg.startsWith(
"--help")) {
142 if (!arg.startsWith(
"-A,"))
144 String arg_value = arg.substring(3);
145 if (arg_value.null() || arg_value.empty())
147 UniqueArray<String> values;
148 arg_value.split(values,
',');
149 for(
const auto& x : values ){
150 m_parameter_list.addParameterLine(x);
154 String getParameter(
const String& param_name)
156 return m_parameter_list.getParameterOrNull(param_name);
161 m_parameter_list.fillParameters(param_names,values);
164 bool needHelp()
const
170 std::atomic<Int32> m_nb_ref;
174 int* m_argc_orig =
nullptr;
175 char*** m_argv_orig =
nullptr;
176 char* m_argv0 =
nullptr;
185CommandLineArguments::
186CommandLineArguments(
int* argc,
char*** argv)
187: m_p(new
Impl(argc,argv))
189 m_p->parseParameters(*
this);
195CommandLineArguments::
196CommandLineArguments()
199 m_p->parseParameters(*
this);
205CommandLineArguments::
207: m_p(new Impl(aargs))
209 m_p->parseParameters(*
this);
215CommandLineArguments::
234CommandLineArguments::
235~CommandLineArguments()
242int* CommandLineArguments::
243commandLineArgc()
const
251char*** CommandLineArguments::
252commandLineArgv()
const
263 int nargc = *m_p->m_argc;
264 char** nargv = *m_p->m_argv;
266 for(
int i=0; i<nargc; ++i )
276 return m_p->getParameter(param_name);
285 m_p->m_parameter_list.addParameterLine(line);
294 m_p->fillParameters(param_names,values);
303 return m_p->m_parameter_list;
312 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.