Skip to content

Commit b2c704d

Browse files
[arcane,std] Créé une classe 'VariableDataInfoMap' pour contenir la liste des informations des variables.
1 parent 63d3005 commit b2c704d

File tree

5 files changed

+76
-11
lines changed

5 files changed

+76
-11
lines changed

arcane/src/arcane/std/BasicGenericReader.cc

+3-5
Original file line numberDiff line numberDiff line change
@@ -124,8 +124,7 @@ initialize(const String& path, Int32 rank)
124124
for (Integer i = 0, is = variables_elem.size(); i < is; ++i) {
125125
XmlNode n = variables_elem[i];
126126
String var_full_name = n.attrValue("full-name");
127-
Ref<VariableDataInfo> vdi = makeRef(new VariableDataInfo(var_full_name, n));
128-
m_variables_data_info.insert(std::make_pair(var_full_name, vdi));
127+
m_variables_data_info.add(var_full_name, n);
129128
}
130129

131130
if (!m_text_reader.get()) {
@@ -148,11 +147,10 @@ initialize(const String& path, Int32 rank)
148147
Ref<VariableDataInfo> BasicGenericReader::
149148
_getVarInfo(const String& full_name)
150149
{
151-
VariableDataInfoMap::const_iterator ivar = m_variables_data_info.find(full_name);
152-
if (ivar == m_variables_data_info.end())
150+
Ref<VariableDataInfo> vdi = m_variables_data_info.find(full_name);
151+
if (!vdi.get())
153152
ARCANE_THROW(ReaderWriterException,
154153
"Can not find own metadata infos for data var={0} rank={1}", full_name, m_rank);
155-
Ref<VariableDataInfo> vdi = ivar->second;
156154
return vdi;
157155
}
158156

arcane/src/arcane/std/BasicGenericWriter.cc

+1-2
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,9 @@ void BasicGenericWriter::
6464
writeData(const String& var_full_name, const ISerializedData* sdata)
6565
{
6666
//TODO: Verifier que initialize() a bien été appelé.
67-
auto var_data_info = makeRef(new VariableDataInfo(var_full_name, sdata));
67+
auto var_data_info = m_variables_data_info.add(var_full_name, sdata);
6868
KeyValueTextWriter* writer = m_text_writer.get();
6969
var_data_info->setFileOffset(writer->fileOffset());
70-
m_variables_data_info.insert(std::make_pair(var_full_name, var_data_info));
7170
info(4) << " SDATA name=" << var_full_name << " nb_element=" << sdata->nbElement()
7271
<< " dim=" << sdata->nbDimension() << " datatype=" << sdata->baseDataType()
7372
<< " nb_basic_element=" << sdata->nbBaseElement()

arcane/src/arcane/std/VariableDataInfo.cc

+38
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include "arcane/utils/FatalErrorException.h"
1717
#include "arcane/utils/Array.h"
1818
#include "arcane/utils/ValueConvert.h"
19+
#include "arcane/utils/Ref.h"
1920

2021
#include "arcane/core/ISerializedData.h"
2122

@@ -106,6 +107,43 @@ write(XmlNode element) const
106107
/*---------------------------------------------------------------------------*/
107108
/*---------------------------------------------------------------------------*/
108109

110+
/*---------------------------------------------------------------------------*/
111+
/*---------------------------------------------------------------------------*/
112+
113+
Ref<VariableDataInfo> VariableDataInfoMap::
114+
add(const String& full_name, const ISerializedData* sdata)
115+
{
116+
auto v = makeRef(new VariableDataInfo(full_name, sdata));
117+
m_data_info_map.insert(std::make_pair(full_name, v));
118+
return v;
119+
}
120+
121+
/*---------------------------------------------------------------------------*/
122+
/*---------------------------------------------------------------------------*/
123+
124+
Ref<VariableDataInfo> VariableDataInfoMap::
125+
add(const String& full_name, const XmlNode& node)
126+
{
127+
auto v = makeRef(new VariableDataInfo(full_name, node));
128+
m_data_info_map.insert(std::make_pair(full_name, v));
129+
return v;
130+
}
131+
132+
/*---------------------------------------------------------------------------*/
133+
/*---------------------------------------------------------------------------*/
134+
135+
Ref<VariableDataInfo> VariableDataInfoMap::
136+
find(const String& full_name) const
137+
{
138+
auto ivar = m_data_info_map.find(full_name);
139+
if (ivar != m_data_info_map.end())
140+
return ivar->second;
141+
return {};
142+
}
143+
144+
/*---------------------------------------------------------------------------*/
145+
/*---------------------------------------------------------------------------*/
146+
109147
} // namespace Arcane::impl
110148

111149
/*---------------------------------------------------------------------------*/

arcane/src/arcane/std/internal/BasicReaderWriter.h

-4
Original file line numberDiff line numberDiff line change
@@ -122,8 +122,6 @@ class BasicGenericReader
122122

123123
private:
124124

125-
using VariableDataInfoMap = std::map<String, Ref<VariableDataInfo>>;
126-
127125
IApplication* m_application = nullptr;
128126
Ref<KeyValueTextReader> m_text_reader;
129127
String m_path;
@@ -180,8 +178,6 @@ class BasicGenericWriter
180178

181179
private:
182180

183-
using VariableDataInfoMap = std::map<String, Ref<VariableDataInfo>>;
184-
185181
IApplication* m_application = nullptr;
186182
Int32 m_version = -1;
187183
String m_path;

arcane/src/arcane/std/internal/VariableDataInfo.h

+34
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
#include "arcane/core/ArcaneTypes.h"
2222
#include "arcane/core/XmlNode.h"
2323

24+
#include <map>
25+
2426
/*---------------------------------------------------------------------------*/
2527
/*---------------------------------------------------------------------------*/
2628

@@ -107,6 +109,38 @@ class VariableDataInfo
107109
ArrayShape m_shape;
108110
};
109111

112+
/*---------------------------------------------------------------------------*/
113+
/*---------------------------------------------------------------------------*/
114+
/*!
115+
* \brief Tableau associatif des données des variables.
116+
*/
117+
class VariableDataInfoMap
118+
{
119+
using MapType = std::map<String, Ref<VariableDataInfo>>;
120+
121+
public:
122+
123+
using const_iterator = MapType::const_iterator;
124+
125+
public:
126+
127+
//! Ajoute une variable
128+
Ref<VariableDataInfo> add(const String& full_name, const ISerializedData* sdata);
129+
//! Ajoute une variable
130+
Ref<VariableDataInfo> add(const String& full_name, const XmlNode& node);
131+
132+
//! Retourne la variable de nom \a full_name. Retourne null si non trouvé.
133+
Ref<VariableDataInfo> find(const String& full_name) const;
134+
135+
//@{ //! Itérateurs
136+
const_iterator begin() const { return m_data_info_map.begin(); }
137+
const_iterator end() const { return m_data_info_map.end(); }
138+
//@}
139+
140+
private:
141+
142+
MapType m_data_info_map;
143+
};
110144

111145
/*---------------------------------------------------------------------------*/
112146
/*---------------------------------------------------------------------------*/

0 commit comments

Comments
 (0)