Arcane  4.1.12.0
Developer documentation
Loading...
Searching...
No Matches
BasicReaderWriter.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2026 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/* BasicReaderWriter.h (C) 2000-2024 */
9/* */
10/* Simple Reading/Writing. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_STD_INTERNAL_BASICREADERWRITER_H
13#define ARCANE_STD_INTERNAL_BASICREADERWRITER_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/TraceAccessor.h"
18#include "arcane/utils/String.h"
19#include "arcane/utils/ArrayShape.h"
20#include "arcane/utils/ScopedPtr.h"
21#include "arcane/utils/Array.h"
22
24#include "arcane/core/XmlNode.h"
25#include "arcane/core/VariableMetaData.h"
26
27#include "arcane/core/IDataWriter.h"
28#include "arcane/core/IDataReader.h"
29#include "arcane/core/IDataReader2.h"
30
31#include "arcane/std/internal/BasicReaderWriterDatabase.h"
32#include "arcane/std/internal/VariableDataInfo.h"
33
34#include <map>
35
36/*---------------------------------------------------------------------------*/
37/*---------------------------------------------------------------------------*/
38
39namespace Arcane
40{
41class ISerializedData;
42class IParallelMng;
45} // namespace Arcane
46
47namespace Arcane::impl
48{
49
50/*---------------------------------------------------------------------------*/
51/*---------------------------------------------------------------------------*/
52
53class BasicVariableMetaData
54{
55 public:
56
57 explicit BasicVariableMetaData(VariableMetaData* varmd)
58 : m_full_name(varmd->fullName())
59 , m_item_group_name(varmd->itemGroupName())
60 , m_mesh_name(varmd->meshName())
61 , m_item_family_name(varmd->itemFamilyName())
62 {
63 }
64
65 public:
66
67 const String& fullName() const { return m_full_name; }
68 const String& itemGroupName() const { return m_item_group_name; }
69 const String& meshName() const { return m_mesh_name; }
70 const String& itemFamilyName() const { return m_item_family_name; }
71 bool isItemVariable() const { return !m_item_family_name.null(); }
72
73 private:
74
75 String m_full_name;
76 String m_item_group_name;
77 String m_mesh_name;
78 String m_item_family_name;
79};
80
81/*---------------------------------------------------------------------------*/
82/*---------------------------------------------------------------------------*/
88{
89 public:
90
91 virtual ~IGenericReader() = default;
92
93 public:
94
95 virtual void initialize(const String& path, Int32 rank) = 0;
96 virtual void readData(const String& var_full_name, IData* data) = 0;
97 virtual void readItemGroup(const String& group_name, Int64Array& written_unique_ids,
98 Int64Array& wanted_unique_ids) = 0;
99 virtual String comparisonHashValue(const String& var_full_name) const = 0;
100 virtual const VariableDataInfoMap& variablesDataInfoMap() const = 0;
101};
102
103/*---------------------------------------------------------------------------*/
104/*---------------------------------------------------------------------------*/
108class BasicGenericReader
109: public TraceAccessor
110, public IGenericReader
111{
112 public:
113
114 // If 'version==-1', it will be determined during
115 // initialization.
116 BasicGenericReader(IApplication* app, Int32 version, Ref<KeyValueTextReader> text_reader);
117
118 public:
119
120 void initialize(const String& path, Int32 rank) override;
121 void readData(const String& var_full_name, IData* data) override;
122 void readItemGroup(const String& group_name, Int64Array& written_unique_ids,
123 Int64Array& wanted_unique_ids) override;
124 String comparisonHashValue(const String& var_full_name) const override;
125 const VariableDataInfoMap& variablesDataInfoMap() const override
126 {
127 return m_variables_data_info;
128 }
129
130 private:
131
132 IApplication* m_application = nullptr;
133 Ref<KeyValueTextReader> m_text_reader;
134 String m_path;
135 Int32 m_rank = A_NULL_RANK;
136 Int32 m_version = -1;
137 VariableDataInfoMap m_variables_data_info;
138
139 private:
140
141 Ref<VariableDataInfo> _getVarInfo(const String& full_name);
142};
143
144/*---------------------------------------------------------------------------*/
145/*---------------------------------------------------------------------------*/
151{
152 public:
153
154 virtual ~IGenericWriter() = default;
155
156 public:
157
158 virtual void initialize(const String& path, Int32 rank) = 0;
166 virtual void writeData(const String& var_full_name, const ISerializedData* sdata,
167 const String& comparison_hash,
168 bool is_save_values) = 0;
169 virtual void writeItemGroup(const String& group_full_name,
170 SmallSpan<const Int64> written_unique_ids,
171 SmallSpan<const Int64> wanted_unique_ids) = 0;
172 virtual void endWrite() = 0;
173};
174
175/*---------------------------------------------------------------------------*/
176/*---------------------------------------------------------------------------*/
177
178class BasicGenericWriter
179: public TraceAccessor
180, public IGenericWriter
181{
182 public:
183
184 BasicGenericWriter(IApplication* app, Int32 version,
185 Ref<KeyValueTextWriter> text_writer);
186
187 public:
188
189 void initialize(const String& path, Int32 rank) override;
190 void writeData(const String& var_full_name, const ISerializedData* sdata,
191 const String& compare_hash, bool is_save_values) override;
192 void writeItemGroup(const String& group_full_name, SmallSpan<const Int64> written_unique_ids,
193 SmallSpan<const Int64> wanted_unique_ids) override;
194 void endWrite() override;
195
196 private:
197
198 IApplication* m_application = nullptr;
199 Int32 m_version = -1;
200 String m_path;
201 Int32 m_rank = A_NULL_RANK;
202 Ref<KeyValueTextWriter> m_text_writer;
203 VariableDataInfoMap m_variables_data_info;
204};
205
206/*---------------------------------------------------------------------------*/
207/*---------------------------------------------------------------------------*/
208
209class BasicReaderWriterCommon
210: public TraceAccessor
211{
212 // To access static methods
213 friend class BasicGenericReader;
214 friend class BasicGenericWriter;
215
216 public:
217
218 enum eOpenMode
219 {
220 OpenModeRead,
221 OpenModeTruncate,
222 OpenModeAppend
223 };
224
225 public:
226
227 BasicReaderWriterCommon(IApplication* app, IParallelMng* pm,
228 const String& path, eOpenMode open_mode);
229
230 protected:
231
232 IApplication* m_application = nullptr;
233 IParallelMng* m_parallel_mng = nullptr;
234 eOpenMode m_open_mode = OpenModeRead;
235 String m_path;
236 Integer m_verbose_level = 0;
237
238 protected:
239
240 String _getMetaDataFileName(Int32 rank) const;
241
242 protected:
243
244 static String _getArcaneDBTag();
245 static String _getOwnMetatadaFile(const String& path, Int32 rank);
246 static String _getArcaneDBFile(const String& path, Int32 rank);
247 static String _getBasicVariableFile(Int32 version, const String& path, Int32 rank);
248 static String _getBasicGroupFile(const String& path, const String& name, Int32 rank);
249 static Ref<IDataCompressor> _createDeflater(IApplication* app, const String& name);
250 static Ref<IHashAlgorithm> _createHashAlgorithm(IApplication* app, const String& name);
251 static void _fillUniqueIds(const ItemGroup& group, Array<Int64>& uids);
252};
253
254/*---------------------------------------------------------------------------*/
255/*---------------------------------------------------------------------------*/
256
257} // namespace Arcane::impl
258
259/*---------------------------------------------------------------------------*/
260/*---------------------------------------------------------------------------*/
261
262#endif
Declarations of Arcane's general types.
Base class for 1D data vectors.
Application interface.
Interface of a data item.
Definition IData.h:34
Interface of the parallelism manager for a subdomain.
Interface of a serialized data.
Mesh entity group.
Definition ItemGroup.h:51
Parallel writer for outputting data by increasing uniqueId().
Reference to an instance.
View of an array of elements of type T.
Definition Span.h:805
bool null() const
Returns true if the string is null.
Definition String.cc:306
TraceAccessor(ITraceMng *m)
Constructs an accessor via the trace manager m.
Metadata on a variable.
String fullName() const
Full name of the variable.
void writeData(const String &var_full_name, const ISerializedData *sdata, const String &compare_hash, bool is_save_values) override
Saves a variable.
virtual void writeData(const String &var_full_name, const ISerializedData *sdata, const String &comparison_hash, bool is_save_values)=0
Saves a variable.
Associative map of variable data.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
Array< Int64 > Int64Array
Dynamic one-dimensional array of 64-bit integers.
Definition UtilsTypes.h:125
Int32 Integer
Type representing an integer.
std::int32_t Int32
Signed integer type of 32 bits.