Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
EntryPoint.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2022 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* EntryPoint.h (C) 2000-2022 */
9/* */
10/* Point d'entrée d'un module. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_ENTRYPOINT_H
13#define ARCANE_ENTRYPOINT_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/String.h"
18#include "arcane/utils/FunctorWithAddress.h"
19#include "arcane/IEntryPoint.h"
20
21/*---------------------------------------------------------------------------*/
22/*---------------------------------------------------------------------------*/
23
24namespace Arcane
25{
26class Timer;
27
28/*---------------------------------------------------------------------------*/
29/*---------------------------------------------------------------------------*/
36class ARCANE_CORE_EXPORT EntryPointBuildInfo
37{
38 public:
55 EntryPointBuildInfo(IModule* module,const String& name,
56 IFunctor* caller,const String& where,int property,
58 : m_module(module), m_name(name), m_caller(caller), m_where(where),
59 m_property(property), m_is_destroy_caller(is_destroy_caller)
60 {
61 }
62
63 public:
64
65 IModule* module() const { return m_module; }
66 const String& name() const { return m_name; }
67 IFunctor* caller() const { return m_caller; }
68 const String& where () const { return m_where; }
69 int property() const { return m_property; }
70 bool isDestroyCaller() const { return m_is_destroy_caller; }
71
72 private:
73
74 IModule* m_module;
75 String m_name;
76 IFunctor* m_caller;
77 String m_where;
78 int m_property;
79 bool m_is_destroy_caller;
80};
81
82/*---------------------------------------------------------------------------*/
83/*---------------------------------------------------------------------------*/
88class ARCANE_CORE_EXPORT EntryPoint
89: public IEntryPoint
90{
91 public:
92
94 ~EntryPoint() override;
95
96 public:
97
105 static EntryPoint* create(const EntryPointBuildInfo& bi);
106
107 public:
108
109 String name() const override { return m_name; }
110 String fullName() const override { return m_full_name; }
111 ISubDomain* subDomain() const override { return m_sub_domain; }
112 IModule* module() const override { return m_module; }
113 void executeEntryPoint() override;
114 Real totalCPUTime() const override;
115 Real lastCPUTime() const override;
116 Real totalElapsedTime() const override;
117 Real lastElapsedTime() const override;
118 Real totalTime(Timer::eTimerType type) const override;
119 Real lastTime(Timer::eTimerType type) const override;
120 Integer nbCall() const override { return m_nb_call; }
121 String where() const override { return m_where; }
122 int property() const override { return m_property; }
123
124 private:
125
126 ISubDomain* m_sub_domain = nullptr;
127 IFunctor* m_caller = nullptr;
128 Timer* m_elapsed_timer = nullptr;
131 IModule* m_module = nullptr;
133 int m_property = 0;
134 Integer m_nb_call = 0;
135 bool m_is_destroy_caller = false;
136
137 private:
138
140
141 public:
142
143 EntryPoint(const EntryPoint&) =delete;
144 void operator=(const EntryPoint&) =delete;
145
146 private:
147
148 void _getAddressForHyoda(void* =nullptr);
149};
150
151/*---------------------------------------------------------------------------*/
152/*---------------------------------------------------------------------------*/
165template<typename ModuleType> inline void
166addEntryPoint(ModuleType* module,const char* name,void (ModuleType::*func)(),
167 const String& where = IEntryPoint::WComputeLoop,
168 int property = IEntryPoint::PNone)
169{
171 EntryPoint::create(EntryPointBuildInfo(module,name,caller,where,property,true));
172}
173
174/*---------------------------------------------------------------------------*/
175/*---------------------------------------------------------------------------*/
188template<typename ModuleType> inline void
189addEntryPoint(ModuleType* module,const String& name,void (ModuleType::*func)(),
190 const String& where = IEntryPoint::WComputeLoop,
191 int property = IEntryPoint::PNone)
192{
194 EntryPoint::create(EntryPointBuildInfo(module,name,caller,where,property,true));
195}
196
197/*---------------------------------------------------------------------------*/
198/*---------------------------------------------------------------------------*/
199
200} // End namespace Arcane
201
202/*---------------------------------------------------------------------------*/
203/*---------------------------------------------------------------------------*/
204
205#endif
206
Informations pour construire un point d'entrée.
Definition EntryPoint.h:37
EntryPointBuildInfo(IModule *module, const String &name, IFunctor *caller, const String &where, int property, bool is_destroy_caller)
Informations de construction d'un point d'entrée.
Definition EntryPoint.h:55
Point d'entrée d'un module.
Definition EntryPoint.h:90
String where() const override
Retourne l'endroit ou est appelé le point d'entrée.
Definition EntryPoint.h:121
IModule * module() const override
Retourne le module associé au point d'entrée.
Definition EntryPoint.h:112
static EntryPoint * create(const EntryPointBuildInfo &bi)
Construit et retourne un point d'entrée.
Definition EntryPoint.cc:78
String name() const override
Retourne le nom du point d'entrée.
Definition EntryPoint.h:109
String fullName() const override
Nom complet (avec le module) du point d'entrée. Ce nom est unique.
Definition EntryPoint.h:110
Integer nbCall() const override
Retourne le nombre de fois que le point d'entrée a été exécuté
Definition EntryPoint.h:120
String m_where
Endroit de l'appel.
Definition EntryPoint.h:132
int property() const override
Retourne les propriétés du point d'entrée.
Definition EntryPoint.h:122
String m_full_name
Nom du point d'entrée.
Definition EntryPoint.h:130
ISubDomain * subDomain() const override
Retourne le gestionnaire principal.
Definition EntryPoint.h:111
String m_name
Nom du point d'entrée.
Definition EntryPoint.h:129
Interface d'un point d'entrée d'un module.
Definition IEntryPoint.h:34
Interface d'un fonctor.
Interface d'un module.
Definition IModule.h:39
Interface du gestionnaire d'un sous-domaine.
Definition ISubDomain.h:74
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Gestion d'un timer.
Definition Timer.h:62
eTimerType
Type du timer.
Definition Timer.h:67
Chaîne de caractères unicode.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
void addEntryPoint(ModuleType *module, const char *name, void(ModuleType::*func)(), const String &where=IEntryPoint::WComputeLoop, int property=IEntryPoint::PNone)
Routine template permettant de référencer un point d'entrée dans un module.
Definition EntryPoint.h:166