Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
ISimpleTableWriterHelper.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/* ISimpleTableWriterHelper.h (C) 2000-2022 */
9/* */
10/* Interface représentant un écrivain simple utilisant un */
11/* ISimpleTableReaderWriter. */
12/*---------------------------------------------------------------------------*/
13/*---------------------------------------------------------------------------*/
14
15#ifndef ARCANE_ISIMPLETABLEWRITERHELPER_H
16#define ARCANE_ISIMPLETABLEWRITERHELPER_H
17
18/*---------------------------------------------------------------------------*/
19/*---------------------------------------------------------------------------*/
20
21#include "arcane/ISimpleTableInternalMng.h"
22#include "arcane/ISimpleTableReaderWriter.h"
23
24#include "arcane/Directory.h"
25#include "arcane/ItemTypes.h"
26
27/*---------------------------------------------------------------------------*/
28/*---------------------------------------------------------------------------*/
29
30namespace Arcane
31{
32
33/*---------------------------------------------------------------------------*/
34/*---------------------------------------------------------------------------*/
35
36/**
37 * @brief Interface de classe permettant d'écrire un fichier
38 * avec ISimpleTableReaderWriter.
39 * Fournit des méthodes permettant de gérer l'écriture en parallèle
40 * et les symboles de noms.
41 *
42 * Cette classe est, en quelque sorte, une surcouche de
43 * ISimpleTableReaderWriter qui est assez basique.
44 * ISimpleTableWriterHelper est là pour simplifier
45 * l'utilisation de ISimpleTableReaderWriter.
46 *
47 * Dans la partie SimpleTable, les symboles de noms sont des
48 * mots-clefs entourés d'arobases et qui seront replacés
49 * par leur signfication lors de l'exécution.
50 * Dans l'implémentation SimpleTableWriterHelper, il y a
51 * actuellement deux symboles de noms pris en charge :
52 * - \@proc_id\@ : Sera remplacé par l'id du processus.
53 * - \@num_procs\@ : Sera remplacé par le nombre de processus.
54 * Et dans SimpleTableWriterHelper, ces symboles ne sont remplacés
55 * que dans le nom du tableau.
56 */
57class ARCANE_CORE_EXPORT ISimpleTableWriterHelper
58{
59 public:
60 virtual ~ISimpleTableWriterHelper() = default;
61
62 public:
63 /**
64 * @brief Méthode permettant d'initialiser l'objet.
65 * Notamment le nom du tableau et le nom du répertoire qui contiendra
66 * les fichiers (le répertoire des tableaux/directory_name).
67 *
68 * @param table_name Le nom du tableau (et du fichier de sortie).
69 * @param directory_name Le nom du dossier dans lequel enregistrer les tableaux.
70 */
71 virtual bool init(const Directory& root_directory, const String& table_name, const String& directory_name) = 0;
72
73 /*---------------------------------------------------------------------------*/
74 /*---------------------------------------------------------------------------*/
75
76 /**
77 * @brief Méthode permettant d'afficher le tableau.
78 *
79 * @param rank L'id du processus devant afficher le tableau (-1 pour
80 * signifier "tous les processus").
81 */
82 virtual void print(Integer rank = 0) = 0;
83
84 /**
85 * @brief Méthode permettant d'écrire le tableau dans un fichier.
86 * Si rank != -1, les processus autres que rank retournent true.
87 *
88 * Par exemple, dans l'implémentation SimpleTableWriterHelper,
89 * le ou les fichiers seront écrits dans le répertoire :
90 * root_directory/[directory_name]/[table_name].[ISimpleTableReaderWriter.fileType()]
91 *
92 * @param root_directory Le répertoire racine où créer le répertoire des tableaux.
93 * @param rank L'id du processus devant écrire dans un fichier
94 * le tableau (-1 pour signifier "tous les processus").
95 * @return true Si le fichier a été correctement écrit.
96 * @return false Si le fichier n'a pas été correctement écrit.
97 */
98 virtual bool writeFile(const Directory& root_directory, Integer rank) = 0;
99
100 /**
101 * @brief Méthode permettant d'écrire le tableau dans un fichier.
102 * Si rank != -1, les processus autres que rank retournent true.
103 *
104 * Par exemple, dans l'implémentation SimpleTableWriterHelper,
105 * le ou les fichiers seront écrits dans le répertoire :
106 * ./[output]/[directory_name]/[table_name].[ISimpleTableReaderWriter.fileType()]
107 *
108 * @param rank L'id du processus devant écrire dans un fichier
109 * le tableau (-1 pour signifier "tous les processus").
110 * @return true Si le fichier a été correctement écrit.
111 * @return false Si le fichier n'a pas été correctement écrit.
112 */
113 virtual bool writeFile(Integer rank = -1) = 0;
114
115 /*---------------------------------------------------------------------------*/
116 /*---------------------------------------------------------------------------*/
117
118 /**
119 * @brief Méthode permettant de récupérer la précision actuellement
120 * utilisée pour l'écriture des valeurs.
121 *
122 * @return Integer La précision.
123 */
124 virtual Integer precision() = 0;
125 /**
126 * @brief Méthode permettant de modifier la précision du print.
127 *
128 * Aussi bien pour la méthode 'print()' que les méthodes 'writeFile()'.
129 *
130 * @warning Le flag "std::fixed" modifie le comportement de "setPrecision()",
131 * si le flag "std::fixed" est désactivé, la précision définira le
132 * nombre de chiffres total (avant et après la virgule) ;
133 * si le flag "std::fixed" est activé, la précision définira le
134 * nombre de chiffres après la virgule. Attention donc lors de
135 * l'utilisation de "std::numeric_limits<Real>::max_digits10"
136 * (pour l'écriture) ou de "std::numeric_limits<Real>::digits10"
137 * (pour la lecture) qui sont à utiliser sans le flag "std::fixed".
138 *
139 * @param precision La nouvelle précision.
140 */
141 virtual void setPrecision(Integer precision) = 0;
142
143 /**
144 * @brief Méthode permettant de savoir si le frag 'std::fixed' est
145 * actif ou non pour l'écriture des valeurs.
146 *
147 * @return true Si oui.
148 * @return false Si non.
149 */
150 virtual bool isFixed() = 0;
151 /**
152 * @brief Méthode permettant de définir le flag 'std::fixed' ou non.
153 *
154 * Aussi bien pour la méthode 'print()' que les méthodes 'writeFile()'.
155 *
156 * Ce flag permet de 'forcer' le nombre de chiffre après la virgule à
157 * la précision voulu. Par exemple, si l'on a appelé 'setPrecision(4)',
158 * et que l'on appelle 'setFixed(true)', le print de '6.1' donnera '6.1000'.
159 *
160 * @warning Le flag "std::fixed" modifie le comportement de "setPrecision()",
161 * si le flag "std::fixed" est désactivé, la précision définira le
162 * nombre de chiffres total (avant et après la virgule) ;
163 * si le flag "std::fixed" est activé, la précision définira le
164 * nombre de chiffres après la virgule. Attention donc lors de
165 * l'utilisation de "std::numeric_limits<Real>::max_digits10"
166 * (pour l'écriture) ou de "std::numeric_limits<Real>::digits10"
167 * (pour la lecture) qui sont à utiliser sans le flag "std::fixed".
168 *
169 * @param fixed Si le flag 'std::fixed' doit être défini ou non.
170 */
171 virtual void setFixed(bool fixed) = 0;
172
173 /**
174 * @brief Méthode permettant de savoir si le frag 'std::scientific' est
175 * actif ou non pour l'écriture des valeurs.
176 *
177 * @return true Si oui.
178 * @return false Si non.
179 */
181 /**
182 * @brief Méthode permettant de définir le flag 'std::scientific' ou non.
183 *
184 * Aussi bien pour la méthode 'print()' que la méthode 'writetable()'.
185 *
186 * Ce flag permet de 'forcer' l'affichage des valeurs en écriture
187 * scientifique.
188 *
189 * @param use_scientific Si le flag 'std::scientific' doit être défini ou non.
190 */
191 virtual void setForcedToUseScientificNotation(bool use_scientific) = 0;
192
193 /**
194 * @brief Méthode permettant de récupérer le nom du répertoire tel qu'il
195 * a été donné précédement.
196 *
197 * Ici, les symboles de noms sont toujours présent.
198 *
199 * @return String Le répertoire.
200 */
202
203 /**
204 * @brief Méthode permettant de récupérer le nom du répertoire où sera
205 * placé les tableaux.
206 *
207 * Peut-être différent pour chaque processus (dépendant de l'implémentation).
208 *
209 * Ici, les symboles de noms ont été résolus.
210 *
211 * @return String Le répertoire.
212 */
213 virtual String outputDirectory() = 0;
214 /**
215 * @brief Méthode permettant de définir le répertoire
216 * dans lequel enregistrer les tableaux.
217 *
218 * Peut-être différent pour chaque processus (dépendant de l'implémentation).
219 *
220 * @param directory Le répertoire.
221 */
222 virtual void setOutputDirectory(const String& directory) = 0;
223
224 /**
225 * @brief Méthode permettant de récupérer le nom du tableau tel qu'il
226 * a été donné précédement.
227 *
228 * Ici, les symboles de noms sont toujours présent.
229 *
230 * @return String Le nom.
231 */
233
234 /**
235 * @brief Méthode permettant de récupérer le nom du tableau.
236 *
237 * Peut-être différent pour chaque processus (dépendant de l'implémentation).
238 *
239 * Ici, les symboles de noms ont été résolus.
240 *
241 * @return String Le nom.
242 */
243 virtual String tableName() = 0;
244 /**
245 * @brief Méthode permettant de définir le nom du tableau.
246 *
247 * @param name Le nom.
248 */
249 virtual void setTableName(const String& name) = 0;
250
251 /**
252 * @brief Méthode permettant de récupérer le nom du fichier.
253 *
254 * Peut-être différent pour chaque processus (dépendant de l'implémentation).
255 *
256 * Ici, les symboles de noms ont été résolus et l'extension est ajoutée.
257 *
258 * @return String Le nom.
259 */
260 virtual String fileName() = 0;
261
262 /**
263 * @brief Méthode permettant de récupérer le chemin où sera
264 * enregistrés les tableaux.
265 *
266 * Exemple (relatif) :
267 * ./output/csv/[directory_name]/
268 *
269 * @return String Le chemin.
270 */
271 virtual Directory outputPath() = 0;
272
273 /**
274 * @brief Méthode permettant de récupérer le chemin où l'implémentation
275 * enregistre ces tableaux.
276 *
277 * Exemple (relatif) :
278 * ./output/csv/
279 *
280 * @return String Le chemin.
281 */
282 virtual Directory rootPath() = 0;
283
284 /**
285 * @brief Méthode permettant de savoir si les paramètres actuellement en possession
286 * de l'implémentation lui permet d'écrire un fichier par processus, notamment
287 * grâce aux symboles de noms.
288 *
289 * @return true Si oui, l'implémentation peut écrire un fichier par processus.
290 * @return false Sinon, il n'y a qu'un seul fichier qui peut être écrit.
291 */
292 virtual bool isOneFileByRanksPermited() = 0;
293
294 /**
295 * @brief Méthode permettant de connaitre le type de fichier qui sera utilisé.
296 *
297 * @return String Le type de fichier de sortie (= l'extension).
298 */
299 virtual String fileType() = 0;
300
301 /**
302 * @brief Méthode permettant de récupérer une référence vers l'objet
303 * SimpleTableInternal utilisé.
304 *
305 * @return Ref<SimpleTableInternal> Une copie de la référence.
306 */
307 virtual Ref<SimpleTableInternal> internal() = 0;
308
309 /**
310 * @brief Méthode permettant de récupérer une référence vers l'objet
311 * ISimpleTableReaderWriter utilisé.
312 *
313 * @return Ref<ISimpleTableReaderWriter> Une copie de la référence.
314 */
315 virtual Ref<ISimpleTableReaderWriter> readerWriter() = 0;
316
317 /**
318 * @brief Méthode permettant de définir une référence vers un
319 * ISimpleTableReaderWriter.
320 *
321 * @param simple_table_reader_writer La référence vers un ISimpleTableReaderWriter.
322 */
323 virtual void setReaderWriter(const Ref<ISimpleTableReaderWriter>& simple_table_reader_writer) = 0;
324};
325
326/*---------------------------------------------------------------------------*/
327/*---------------------------------------------------------------------------*/
328
329} // End namespace Arcane
330
331/*---------------------------------------------------------------------------*/
332/*---------------------------------------------------------------------------*/
333
334#endif
335
336/*---------------------------------------------------------------------------*/
337/*---------------------------------------------------------------------------*/
Classe gérant un répertoire.
Definition Directory.h:33
Interface de classe permettant d'écrire un fichier avec ISimpleTableReaderWriter. Fournit des méthode...
virtual String outputDirectory()=0
Méthode permettant de récupérer le nom du répertoire où sera placé les tableaux.
virtual bool isForcedToUseScientificNotation()=0
Méthode permettant de savoir si le frag 'std::scientific' est actif ou non pour l'écriture des valeur...
virtual Directory rootPath()=0
Méthode permettant de récupérer le chemin où l'implémentation enregistre ces tableaux.
virtual Ref< ISimpleTableReaderWriter > readerWriter()=0
Méthode permettant de récupérer une référence vers l'objet ISimpleTableReaderWriter utilisé.
virtual String fileName()=0
Méthode permettant de récupérer le nom du fichier.
virtual void setForcedToUseScientificNotation(bool use_scientific)=0
Méthode permettant de définir le flag 'std::scientific' ou non.
virtual void setOutputDirectory(const String &directory)=0
Méthode permettant de définir le répertoire dans lequel enregistrer les tableaux.
virtual void print(Integer rank=0)=0
Méthode permettant d'afficher le tableau.
virtual void setPrecision(Integer precision)=0
Méthode permettant de modifier la précision du print.
virtual bool writeFile(Integer rank=-1)=0
Méthode permettant d'écrire le tableau dans un fichier. Si rank != -1, les processus autres que rank ...
virtual String tableNameWithoutComputation()=0
Méthode permettant de récupérer le nom du tableau tel qu'il a été donné précédement.
virtual String tableName()=0
Méthode permettant de récupérer le nom du tableau.
virtual Integer precision()=0
Méthode permettant de récupérer la précision actuellement utilisée pour l'écriture des valeurs.
virtual Ref< SimpleTableInternal > internal()=0
Méthode permettant de récupérer une référence vers l'objet SimpleTableInternal utilisé.
virtual bool init(const Directory &root_directory, const String &table_name, const String &directory_name)=0
Méthode permettant d'initialiser l'objet. Notamment le nom du tableau et le nom du répertoire qui con...
virtual Directory outputPath()=0
Méthode permettant de récupérer le chemin où sera enregistrés les tableaux.
virtual bool writeFile(const Directory &root_directory, Integer rank)=0
Méthode permettant d'écrire le tableau dans un fichier. Si rank != -1, les processus autres que rank ...
virtual String fileType()=0
Méthode permettant de connaitre le type de fichier qui sera utilisé.
virtual void setReaderWriter(const Ref< ISimpleTableReaderWriter > &simple_table_reader_writer)=0
Méthode permettant de définir une référence vers un ISimpleTableReaderWriter.
virtual String outputDirectoryWithoutComputation()=0
Méthode permettant de récupérer le nom du répertoire tel qu'il a été donné précédement.
virtual void setTableName(const String &name)=0
Méthode permettant de définir le nom du tableau.
virtual bool isOneFileByRanksPermited()=0
Méthode permettant de savoir si les paramètres actuellement en possession de l'implémentation lui per...
virtual void setFixed(bool fixed)=0
Méthode permettant de définir le flag 'std::fixed' ou non.
virtual bool isFixed()=0
Méthode permettant de savoir si le frag 'std::fixed' est actif ou non pour l'écriture des valeurs.
Chaîne de caractères unicode.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-