14#include "arcane/impl/ArcaneMain.h"
16#include "arcane/utils/Iostream.h"
17#include "arcane/utils/StdHeader.h"
18#include "arcane/utils/List.h"
19#include "arcane/utils/Iterator.h"
20#include "arcane/utils/ScopedPtr.h"
21#include "arcane/utils/PlatformUtils.h"
22#include "arcane/utils/FatalErrorException.h"
23#include "arcane/utils/ParallelFatalErrorException.h"
24#include "arcane/utils/OStringStream.h"
25#include "arcane/utils/ApplicationInfo.h"
26#include "arcane/utils/ValueConvert.h"
27#include "arcane/utils/ITraceMng.h"
28#include "arcane/utils/SignalException.h"
29#include "arcane/utils/TimeoutException.h"
30#include "arcane/utils/NotImplementedException.h"
31#include "arcane/utils/ArithmeticException.h"
32#include "arcane/utils/StringBuilder.h"
33#include "arcane/utils/IDynamicLibraryLoader.h"
34#include "arcane/utils/CheckedConvert.h"
35#include "arcane/utils/CommandLineArguments.h"
36#include "arcane/utils/ApplicationInfo.h"
37#include "arcane/utils/TestLogger.h"
39#include "arcane/core/ArcaneException.h"
40#include "arcane/core/IMainFactory.h"
41#include "arcane/core/IApplication.h"
42#include "arcane/core/IServiceLoader.h"
43#include "arcane/core/IParallelMng.h"
44#include "arcane/core/IParallelSuperMng.h"
45#include "arcane/core/IIOMng.h"
46#include "arcane/core/ISession.h"
47#include "arcane/core/ISubDomain.h"
48#include "arcane/core/IRessourceMng.h"
49#include "arcane/core/IModuleMng.h"
50#include "arcane/core/IModule.h"
51#include "arcane/core/IVariableMng.h"
52#include "arcane/core/VariableRef.h"
53#include "arcane/core/ITimeLoopMng.h"
54#include "arcane/core/ITimeLoop.h"
55#include "arcane/core/Directory.h"
56#include "arcane/core/XmlNodeList.h"
57#include "arcane/core/IXmlDocumentHolder.h"
58#include "arcane/core/ItemTypeMng.h"
59#include "arcane/core/ServiceUtils.h"
60#include "arcane/core/ICodeService.h"
61#include "arcane/core/CaseOptions.h"
62#include "arcane/core/VariableCollection.h"
63#include "arcane/core/ItemGroupImpl.h"
64#include "arcane/core/SubDomainBuildInfo.h"
65#include "arcane/core/ICaseMng.h"
66#include "arcane/core/DotNetRuntimeInitialisationInfo.h"
67#include "arcane/core/AcceleratorRuntimeInitialisationInfo.h"
68#include "arcane/core/ApplicationBuildInfo.h"
70#include "arcane/core/IServiceFactory.h"
71#include "arcane/core/IModuleFactory.h"
73#include "arcane/impl/TimeLoopReader.h"
74#include "arcane/impl/MainFactory.h"
75#include "arcane/impl/InternalInfosDumper.h"
76#include "arcane/impl/internal/ArcaneMainExecInfo.h"
77#include "arcane/impl/internal/ThreadBindingMng.h"
79#include "arcane/accelerator/core/internal/RegisterRuntimeInfo.h"
83#ifndef ARCANE_OS_WIN32
94#include "arcane/impl/FlexLMTools.h"
111 bool m_has_dotnet_wrapper =
false;
130 if (!global_static_info)
132 return global_static_info;
134void _deleteStaticInfo()
136 delete global_static_info;
137 global_static_info =
nullptr;
144extern "C" void arcaneEndProgram()
153typedef void (*fSignalFunc)(int);
154void arcaneSignalHandler(
int);
166extern "C++" ARCANE_UTILS_EXPORT
void
167arcaneRedirectSignals(fSignalFunc sig_func);
169extern "C++" ARCANE_UTILS_EXPORT
void
170arcaneCallDefaultSignal(
int val);
172extern "C++" ARCANE_UTILS_EXPORT
void
173initializeStringConverter();
175extern "C++" ARCANE_IMPL_EXPORT IArcaneMain*
176createArcaneMainBatch(
const ApplicationInfo& exe_info, IMainFactory*);
178extern "C++" ARCANE_IMPL_EXPORT IDynamicLibraryLoader*
179createGlibDynamicLibraryLoader();
181extern "C++" ARCANE_IMPL_EXPORT ICodeService*
182createArcaneCodeService(IApplication* app);
184extern "C++" ARCANE_UTILS_EXPORT
void
185arcanePrintSpecificMemoryStats();
189bool ArcaneMain::m_has_garbage_collector =
false;
190bool ArcaneMain::m_is_master_io =
true;
191bool ArcaneMain::m_is_use_test_logger =
false;
203 return createArcaneMainBatch(
app_info,
this);
248 String rv = platform::getEnvironmentVariable(
"ARCANE_REDIRECT_SIGNALS");
259setUseTestLogger(
bool v)
261 m_is_use_test_logger = v;
270 m_default_main_factory =
mf;
292 m_app_info.
args(args);
318 if (x->m_nb_autodetect > 0)
319 return x->m_autodetect_return_value;
321 ArcaneMain::_setArcaneLibraryPath();
323 std::chrono::high_resolution_clock
clock;
327 ArcaneMain::_checkAutoDetectMPI();
339 ++x->m_nb_autodetect;
341 return x->m_autodetect_return_value;
344 template<
typename TimeType>
348 Real x =
static_cast<Real
>(
duration.count());
371 m_clean_abort =
false;
373 ArcaneMain::redirectSignals();
377 if (m_has_build_info) {
379 m_application_build_info,
387 m_exec_main->
build();
388 ArcaneMain::m_is_master_io = m_exec_main->
application()->parallelSuperMng()->isMasterIO();
393 cerr <<
"** CATCH ARITHMETIC_EXCEPTION\n";
394 return arcanePrintArcaneException(
ex,
nullptr);
397 return arcanePrintArcaneException(
ex,
nullptr);
399 catch (
const std::exception&
ex) {
400 return arcanePrintStdException(
ex,
nullptr);
403 return arcanePrintAnyException(
nullptr);
409 ArcaneMain::redirectSignals();
412 m_clean_abort =
false;
419 trace->
info() <<
"Initializing license manager";
434 m_ret_val = arcanePrintArcaneException(
ex, trace);
435 if (
ex.isCollective()) {
436 m_clean_abort =
true;
446void ArcaneMainExecInfo::
452 if (m_direct_exec_functor)
453 m_exec_main->setDirectExecuteFunctor(m_direct_exec_functor);
456 if (ArcaneMain::m_exec_override_functor) {
459 ArcaneMain::m_exec_override_functor->m_application =
app;
461 trace->
info() <<
"Calling overriding functor";
463 m_exec_main, &m_clean_abort,
true);
472void ArcaneMainExecInfo::
476 platform::enableFloatingException(
false);
480 int exe_error_code = m_exec_main->
errorCode();
481 if (m_ret_val == 0 && exe_error_code != 0) {
482 m_ret_val = exe_error_code;
484 else if (m_ret_val != 0)
489 if (m_ret_val != 0 && !m_clean_abort)
497 m_exec_main =
nullptr;
498#ifndef ARCANE_USE_MPC
540 bool is_parallel =
app->parallelSuperMng()->isParallel();
546 if (
ex.isCollective()) {
551 std::ofstream
ofile(
"fatal");
554 trace->
error() <<
"ParallelFatalErrorException caught in ArcaneMain::callFunctor: " <<
ex <<
'\n';
558 trace->
error() <<
"ParallelFatalErrorException caught in ArcaneMain::callFunctor: " <<
ex <<
'\n';
563 trace->
error() << Trace::Color::red() <<
"FatalErrorException caught in ArcaneMain::callFunctor: " <<
ex <<
'\n';
568 trace->
error() <<
"SignalException caught in ArcaneMain::callFunctor: " <<
ex <<
'\n';
572 trace->
error() <<
"TimeoutException caught in ArcaneMain::callFunctor: " <<
ex <<
'\n';
581 std::ofstream
ofile(
"fatal");
584 trace->
error() <<
"ParallelFatalErrorException caught in ArcaneMain::callFunctor: " <<
ex <<
'\n';
588 trace->
error() <<
"ParallelFatalErrorException caught in ArcaneMain::callFunctor: " <<
ex <<
'\n';
593 cerr <<
"** ARITHMETIC EXCEPTION!\n";
594 ret_val = arcanePrintArcaneException(
ex, trace);
595 if (
ex.isCollective()) {
600 ret_val = arcanePrintArcaneException(
ex, trace);
601 if (
ex.isCollective()) {
605 catch (
const std::exception&
ex) {
606 ret_val = arcanePrintStdException(
ex, trace);
609 ret_val = arcanePrintAnyException(trace);
618_launchMissingInitException()
620 cerr <<
"ArcaneMain: appel ArcaneMain::arcaneInitialize() manquant.\n";
621 throw std::exception();
631 _launchMissingInitException();
637extern "C++" void arcaneInitCheckMemory();
638extern "C++" void arcaneExitCheckMemory();
647 cerr <<
"WARNING: ArcaneMain::setHasGarbageCollector has to be called before arcaneInitialize\n";
650 m_has_garbage_collector =
true;
660 cerr <<
"WARNING: ArcaneMain::setHasDotNETRuntime has to be called before arcaneInitialize\n";
672 m_exec_override_functor = functor;
692_setArcaneLibraryPath()
699 dir_name = platform::getCurrentDirectory();
707_checkCreateDynamicLibraryLoader()
725 Exception::staticInit();
726 dom::DOMImplementation::initialize();
730 initializeStringConverter();
731 arcaneInitCheckMemory();
734 _checkCreateDynamicLibraryLoader();
765 arcanePrintSpecificMemoryStats();
766 arcaneExitCheckMemory();
768 dom::DOMImplementation::terminate();
813 return _staticInfo()->m_app_build_info._internalApplicationInfo();
849 return m_p->m_application_build_info;
856_applicationBuildInfo()
858 return m_p->m_application_build_info;
867 return m_p->m_dotnet_info;
876 return m_p->m_accelerator_info;
898 factory = m_default_main_factory;
912 cerr <<
"* Process return: " <<
ret <<
'\n';
933_checkTestLoggerResult()
935 if (!m_is_use_test_logger)
939 return TestLogger::compare();
948 ArcaneMainAutoDetectRuntimeHelper auto_detect_helper;
949 return auto_detect_helper.check();
958 int r = _initRuntimes();
973 String x = platform::getEnvironmentVariable(
"ARCANE_DOTNET_USE_LEGACY_DESTROY");
988 return _checkTestLoggerResult();
998 si->m_has_dotnet_wrapper =
true;
1015 _checkCreateDynamicLibraryLoader();
1019 ARCANE_FATAL(
"No dynamic library available for running .Net");
1030 dll_name =
"arcane_dotnet_coreclr";
1034 ARCANE_FATAL(
"Unknown '.Net' runtime '{0}'. Valid values are 'mono' or 'coreclr'", runtime_name);
1036 IDynamicLibrary* dl = dll_loader->
open(os_dir, dll_name);
1038 ARCANE_FATAL(
"Can not found dynamic library '{0}' for using .Net", dll_name);
1040 bool is_found =
false;
1041 void* functor_addr = dl->getSymbolAddress(symbol_name, &is_found);
1043 ARCANE_FATAL(
"Can not find symbol '{0}' in library '{1}'", symbol_name, dll_name);
1045 my_functor =
reinterpret_cast<DotNetMainFunctor
>(functor_addr);
1047 catch (
const Exception& ex) {
1048 return arcanePrintArcaneException(ex,
nullptr);
1050 catch (
const std::exception& ex) {
1051 return arcanePrintStdException(ex,
nullptr);
1054 return arcanePrintAnyException(
nullptr);
1058 const CommandLineArguments& cmd_args = app_info.commandLineArguments();
1060 String new_name = os_dir +
"/Arcane.Main.dll";
1061 return (*my_functor)(cmd_args, new_name);
1070_checkAutoDetectMPI()
1073 String mp_service =
defaultApplicationInfo().commandLineArguments().getParameter(
"MessagePassingService");
1074 if (mp_service==
"Sequential")
1077 auto si = _staticInfo();
1082 typedef void (*ArcaneAutoDetectMPIFunctor)();
1084 _checkCreateDynamicLibraryLoader();
1090 String os_dir(si->m_arcane_lib_path);
1091 String dll_name =
"arcane_mpi";
1092 String symbol_name =
"arcaneAutoDetectMessagePassingServiceMPI";
1093 IDynamicLibrary* dl = dll_loader->open(os_dir, dll_name);
1097 bool is_found =
false;
1098 void* functor_addr = dl->getSymbolAddress(symbol_name, &is_found);
1102 auto my_functor =
reinterpret_cast<ArcaneAutoDetectMPIFunctor
>(functor_addr);
1126 if (!
init_info.isUsingAcceleratorRuntime())
1143 _checkCreateDynamicLibraryLoader();
1147 ARCANE_FATAL(
"No dynamic library available for running accelerator runtime");
1164 String verbose_str = Arcane::platform::getEnvironmentVariable(
"ARCANE_DEBUG_ACCELERATOR");
1172 return arcanePrintArcaneException(
ex,
nullptr);
1174 catch (
const std::exception&
ex) {
1175 return arcanePrintStdException(
ex,
nullptr);
1178 return arcanePrintAnyException(
nullptr);
1189IMainFactory* ArcaneMain::m_default_main_factory =
nullptr;
1198, m_main_factory(factory)
1206ArcaneMain(
const ApplicationInfo& app_info, IMainFactory* factory,
1207 const ApplicationBuildInfo& app_build_info,
1208 const DotNetRuntimeInitialisationInfo& dotnet_info,
1209 const AcceleratorRuntimeInitialisationInfo& accelerator_info)
1210: m_p(new Impl(app_info, app_build_info, dotnet_info, accelerator_info))
1211, m_main_factory(factory)
1221 delete m_application;
1234 _parseApplicationBuildInfoArgs();
1236 m_p->m_thread_binding_mng.initialize(m_application->
traceMng(),
1246 return m_p->m_app_info;
1253_parseApplicationBuildInfoArgs()
1259 auto& x =
_staticInfo()->m_application_build_info_visitors;
1265 abi.setDefaultServices();
1326 if (ArcaneMain::m_is_master_io ||
errcode == 4) {
1356 for (Integer i = 0, s = args.
count(); i < s; ++i) {
1357 if (args[i].startsWith(
"-A")) {
1398 dumper.dumpArcaneDatabase();
1403 dumper.dumpInternalInfos();
1408 dumper.dumpInternalAllInfos();
1430 typedef std::multimap<String, IServiceInfo*>
ServiceList;
1438 for (ServiceFactory2Collection::Enumerator
j(
application()->serviceFactories2()); ++
j;) {
1443 done_set.insert(si);
1446 service_list.insert(std::make_pair(name, si));
1450 UniqueArray<String> module_names;
1451 for (EnumeratorT<IModuleFactoryInfo*> e =
application()->moduleFactoryInfos(); ++e;) {
1452 IModuleFactoryInfo* mfi = (*e);
1453 const String& name = mfi->moduleName();
1455 module_names.add(name);
1459 trace->
info() <<
" ";
1460 trace->info() << std::setw(max_name_size) <<
"Module List";
1461 trace->info() << std::setw(max_name_size) <<
"-------------"
1463 for (
int i = 0, n = module_names.size(); i < n; ++i) {
1464 trace->info() << std::setw(max_name_size) << module_names[i];
1467 trace->info() <<
" ";
1468 trace->info() << std::setw(max_name_size) <<
"Service List";
1469 trace->info() << std::setw(max_name_size) <<
"--------------"
1471 for (ServiceList::const_iterator i = service_list.begin(); i != service_list.end(); ++i) {
1472 IServiceInfo* si = i->second;
1474 oss() << std::setw(max_name_size) << i->first;
1476 if (!interfaces.empty())
1477 oss() <<
" Implements : ";
1478 for (EnumeratorT<String> e(interfaces.enumerator()); ++e;) {
1479 oss() << e.current() <<
" ";
1481 trace->info() << oss.str();
1484 const Integer option_size = 20;
1485 trace->info() <<
" ";
1486 trace->info() << std::setw(max_name_size) <<
"Usage";
1487 trace->info() << std::setw(max_name_size) <<
"-------"
1490 trace->
info() <<
"Where OPTION is";
1491 trace->info() << std::setw(option_size) <<
"help"
1492 <<
" : this help page and abort";
1493 trace->info() << std::setw(option_size) <<
"arcane_internal"
1494 <<
" : save into a file internal Arcane informations and abort execution";
1495 trace->info() << std::setw(option_size) <<
"arcane_all_internal"
1496 <<
" : save into a file timeloop informations and abort execution";
1497 trace->info() << std::setw(option_size) <<
"arcane_database"
1498 <<
" : save internal database infos in file 'arcane_database.json'";
1499 trace->info() << std::setw(option_size) <<
"init_only"
1500 <<
" : only run initialization step";
1501 trace->info() << std::setw(option_size) <<
"continue"
1502 <<
" : continue an interrupted run";
1503 trace->info() << std::setw(option_size) <<
"max_iteration"
1504 <<
" : define maximum iteration number";
1505 trace->info() << std::setw(option_size) <<
"casename"
1506 <<
" : define case name";
1560 cerr <<
"Signal Caught !!! number=" <<
val <<
" name=" <<
signal_str <<
".\n";
1565#ifndef ARCANE_OS_WIN32
1587 Arcane::arcaneCallDefaultSignal(
val);
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Informations pour l'initialisation des accélérateurs.
Informations pour initialiser le runtime accélérateur.
Informations pour construire une instance de IApplication.
String threadBindingStrategy() const
Stratégie pour punaiser les threads des tâches.
Informations sur une application.
const CommandLineArguments & commandLineArguments() const
Arguments de la ligne de commande.
void args(StringList &args) const
Remplit args avec les arguments de la ligne de commande.
IArcaneMain * createArcaneMain(const ApplicationInfo &app_info) override
Crée une instance de IArcaneMain.
Classe pour gérer les appels aux mécanismes d'auto-détection des runtimes (MPI,Accélérateurs).
void executeFunctor() override
Exécute la méthode associé
int initialize()
Création de l'instance 'IArcaneMain'.
const ApplicationInfo & m_app_info
ATTENTION: référence.
std::atomic< Int32 > m_nb_autodetect
Nombre de fois qu'on a lancé l'auto-détection pour MPI et les accélérateurs.
Real m_init_time_accelerator
Temps passé (en seconde) dans l'initialisation pour les accélérateurs.
Int32 m_autodetect_return_value
Code retour pour l'auto-détection.
Classe de gestion de l'exécution.
static ApplicationBuildInfo & defaultApplicationBuildInfo()
Informations pour l'initialisation des accélerateurs.
static AcceleratorRuntimeInitialisationInfo & defaultAcceleratorRuntimeInitialisationInfo()
Informations pour l'initialisation des accélerateurs.
static std::atomic< Int32 > m_nb_arcane_init
Nombre de fois que arcaneInitialize() a été appelé
static DotNetRuntimeInitialisationInfo & defaultDotNetRuntimeInitialisationInfo()
Informations pour l'initialisation du runtime '.Net'.
static void arcaneInitialize()
Initialise Arcane.
static void addApplicationBuildInfoVisitor(IApplicationBuildInfoVisitor *visitor)
Ajoute un visiteur pour remplir ApplicationBuildInfo.
const DotNetRuntimeInitialisationInfo & dotnetRuntimeInitialisationInfo() const override
Informations d'initialisation du runtime '.Net'.
static int _checkAutoDetectAccelerator(bool &has_accelerator)
Détecte et charge la gestion du runtime des accélérateurs.
static void arcaneFinalize()
Termine l'utilisation Arcane.
static int _arcaneMain(const ApplicationInfo &, IMainFactory *)
Point d'entrée de l'exécutable.
static Real initializationTimeForAccelerator()
Retourne le temps (en seconde) pour l'initialisation des runtimes accélérateurs pour ce processus.
const ApplicationInfo & applicationInfo() const override
Informations sur l'éxécutable.
ServiceFactoryInfoCollection registeredServiceFactoryInfos() override
Liste des fabriques de service enregistrées.
const AcceleratorRuntimeInitialisationInfo & acceleratorRuntimeInitialisationInfo() const override
Informations d'initialisation du runtime pour les accélérateurs.
static int callFunctorWithCatchedException(IFunctor *functor, IArcaneMain *amain, bool *clean_abort, bool is_print=true)
Appelle le fonctor functor en récupérant les éventuelles exceptions.
ModuleFactoryInfoCollection registeredModuleFactoryInfos() override
Liste des fabriques de module enregistrées.
void setErrorCode(int errcode) override
Positionne le code de retour.
static void setHasDotNETRuntime()
Indique que l'on tourne dans le runtime .NET.
IApplication * application() const override
Application.
static void setHasGarbageCollector()
Indique que certains objets sont gérés par un ramasse-miette.
static std::atomic< Int32 > m_is_init_done
1 si init terminé, 0 sinon
static int run()
Point d'entrée de l'exécutable dans Arcane.
static void addServiceFactoryInfo(IServiceFactoryInfo *factory)
Ajoute une fabrique de service.
void build() override
Construit les membres la classe. L'instance n'est pas utilisable tant que cette méthode n'a pas été a...
static ApplicationInfo & defaultApplicationInfo()
Infos par défaut de l'application.
static void setExecuteOverrideFunctor(ArcaneMainExecutionOverrideFunctor *functor)
static bool hasDotNetWrapper()
Indique si on exécute une assembly '.Net' depuis un main en C++.
const ApplicationBuildInfo & applicationBuildInfo() const override
Informations pour construire l'instance IApplication.
int execute() override
Lance l'exécution. Cette méthode ne retourne que lorsqu'on quitte le programme.
void doAbort() override
Effectue un abort.
static void setDefaultMainFactory(IMainFactory *mf)
Positionne la fabrique par défaut.
void initialize() override
Initialise l'instance. L'instance n'est pas utilisable tant que cette méthode n'a pas été appelée.
bool parseArgs(StringList args) override
Analyse les arguments.
static void addModuleFactoryInfo(IModuleFactoryInfo *factory)
Ajoute une fabrique de module.
Exception lorsqu'une erreur arithmétique survient.
void clear()
Supprime tous les éléments de la collection.
Integer count() const
Nombre d'éléments de la collection.
Arguments de la ligne de commande.
Informations pour l'initialisation du runtime '.Net'.
static FlexLMMng * instance()
Accès au singleton.
Interface de l'application.
virtual String applicationName() const =0
Nom de l'application.
Interface de la classe de gestion du code.
virtual IApplication * application() const =0
Application.
virtual void finalize()=0
Effectue les dernières opérations avant destruction de l'instance.
virtual void initialize()=0
Initialise l'instance. L'instance n'est pas utilisable tant que cette méthode n'a pas été appelée.
virtual int execute()=0
Lance l'exécution. Cette méthode ne retourne que lorsqu'on quitte le programme.
static IArcaneMain * arcaneMain()
virtual void setErrorCode(int errcode)=0
Positionne le code de retour.
static void setArcaneMain(IArcaneMain *arcane_main)
virtual void doAbort()=0
Effectue un abort.
virtual bool parseArgs(StringList args)=0
Analyse les arguments.
virtual int errorCode() const =0
Code d'erreur de l'exécution.
virtual void build()=0
Construit les membres la classe. L'instance n'est pas utilisable tant que cette méthode n'a pas été a...
virtual ITraceMng * traceMng() const =0
Gestionnaire de traces.
virtual void initialize()=0
Initialise l'instance. L'instance n'est pas utilisable tant que cette méthode n'a pas été appelée.
Interface d'un fonctor pour exécuter du code directement après la création d'un sous-domaine sans pas...
Interface d'une chargeur dynamique de bibliothèque.
virtual IDynamicLibrary * open(const String &directory, const String &name)=0
Charge une bibliothèque dynamique.
Interface d'une bibliothèque dynamique.
Manufacture des classes d'Arcane.
virtual IApplication * createApplication(IArcaneMain *)=0
Crée une instance d'un superviseur.
virtual IServiceLoader * createServiceLoader()=0
Crée une instance du chargeur de services.
virtual IArcaneMain * createArcaneMain(const ApplicationInfo &app_info)=0
Crée une instance de IArcaneMain.
Informations sur la fabrique d'un module.
Classe abstraite du superviseur de parallélisme.
Informations sur la fabrique d'un service.
Interface des informations d'un service ou d'un module.
virtual String localName() const =0
Partie locale du nom du service.
Sorties des informations internes de Arcane.
static void _buildSharedNull()
static void _destroySharedNull()
static void _destroySingleton()
Détruit le singleton.
static ItemTypeMng * _singleton()
Instance singleton du type.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Manufacture des classes d'Arcane.
Exception lorsqu'une erreur fatale 'parallèle' est générée.
Exception lorsqu'un signal survient.
Classe de base d'une exception.
Exception lorsqu'une erreur fatale est survenue.
virtual void executeFunctor()=0
Exécute la méthode associé
Interface du gestionnaire de traces.
virtual TraceMessage info()=0
Flot pour un message d'information.
virtual TraceMessage error()=0
Flot pour un message d'erreur.
Chaîne de caractères unicode.
bool null() const
Retourne true si la chaîne est nulle.
Exception lorsqu'un timeout survient.
ITraceMng * traceMng() const
Gestionnaire de trace.
TraceMessage info() const
Flot pour un message d'information.
T max(const T &a, const T &b, const T &c)
Retourne le maximum de trois éléments.
Integer toInteger(Real r)
Converti un Int64 en un Integer.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Collection< String > StringCollection
Collection de chaînes de caractères.
void arcaneSignalHandler(int val)
Fonction appelee lorsque le programme est interrompu par le signal 'val'.
List< IService * > ServiceList
Tableau de services.
Int32 Integer
Type représentant un entier.