1 #ifndef DataRequirements_h 2 #define DataRequirements_h 4 #include "senseiConfig.h" 10 #include <pugixml.hpp> 16 class MeshRequirementsIterator;
17 class ArrayRequirementsIterator;
32 bool Empty()
const {
return this->MeshArrayMap.empty(); }
75 int AddRequirement(
const std::string &meshName,
bool structureOnly);
85 int AddRequirement(
const std::string &meshName,
int association,
86 const std::vector<std::string> &arrays);
96 int AddRequirement(
const std::string &meshName,
int association,
97 const std::string &array);
104 int GetRequiredMeshes(std::vector<std::string> &meshes)
const;
107 unsigned int GetNumberOfRequiredMeshes()
const;
110 int GetRequiredMesh(
unsigned int id, std::string &mesh)
const;
119 int GetRequiredArrays(
const std::string &meshName,
int association,
120 std::vector<std::string> &arrays)
const;
129 int GetNumberOfRequiredArrays(
const std::string &meshName,
130 int association,
unsigned int &nArrays)
const;
140 const std::string &meshName)
const;
143 using AssocArrayMapType = std::map<int, std::vector<std::string>>;
144 using MeshArrayMapType = std::map<std::string, AssocArrayMapType>;
145 using MeshNamesType = std::map<std::string, bool>;
151 MeshNamesType MeshNames;
152 MeshArrayMapType MeshArrayMap;
162 : Valid(
true), It(meshNames.cbegin()), End(meshNames.cend()) {}
168 operator bool()
const {
return Valid && (this->It != this->End); }
171 const std::string &
MeshName(){
return this->It->first; }
173 bool StructureOnly(){
return this->It->second; }
177 DataRequirements::MeshNamesType::const_iterator It;
178 DataRequirements::MeshNamesType::const_iterator End;
188 enum {MODE_ARRAY, MODE_ASSOCIATION};
193 : Valid(
true), Mode(MODE_ARRAY), It(aa.cbegin()), End(aa.cend())
194 { this->UpdateArrayIterator(); }
200 operator bool()
const 204 if (this->Mode == MODE_ASSOCIATION)
206 if (this->It == this->End)
211 else if (this->Mode == MODE_ARRAY)
213 if ((this->It == this->End) && (this->AIt == this->AEnd))
226 const std::vector<std::string> &
Arrays(){
return this->It->second; }
229 const std::string &
Array(){
return *this->AIt; }
234 if (this->Mode == MODE_ARRAY)
235 return this->NextArray();
236 return this->NextAssociation();
242 if (this->It != this->End)
245 this->UpdateArrayIterator();
247 if (this->AIt == this->AEnd)
248 return this->NextAssociation();
258 if (this->AIt == this->AEnd)
259 this->NextAssociation();
266 void UpdateArrayIterator()
268 if (this->It != this->End)
270 this->AIt = this->It->second.cbegin();
271 this->AEnd = this->It->second.cend();
273 if (this->AIt == this->AEnd)
274 this->NextAssociation();
280 DataRequirements::AssocArrayMapType::const_iterator It;
281 DataRequirements::AssocArrayMapType::const_iterator End;
282 std::vector<std::string>::const_iterator AIt;
283 std::vector<std::string>::const_iterator AEnd;
MeshRequirementsIterator & operator++()
advance to the next requirement
Definition: DataRequirements.h:165
Iterate over the mesh's arrays.
Definition: DataRequirements.h:185
int Initialize(MPI_Comm comm, const std::string &fileName, InTransitDataAdaptor *&dataAdaptor)
Creates a sensei::ConfigurableAnalysis adaptor and sensei::InTransitDataAdaptor based on a SENSEI XML...
int Association()
returns the type of requirement (point,cell, etc)
Definition: DataRequirements.h:223
ArrayRequirementsIterator & operator++()
Advance the iterator.
Definition: DataRequirements.h:232
const std::string & Array()
Get the next requied array.
Definition: DataRequirements.h:229
ArrayRequirementsIterator & NextAssociation()
move to the next group od arrays
Definition: DataRequirements.h:240
bool Empty() const
Returns true if the object is empty.
Definition: DataRequirements.h:32
void SetMode(int mode)
Set the mode of operator++.
Definition: DataRequirements.h:197
iterate over the meshes
Definition: DataRequirements.h:156
This is a helper class that handles the common task of specifying the set of meshes and arrays rqeuir...
Definition: DataRequirements.h:25
const std::vector< std::string > & Arrays()
Get the next group of requied arrays.
Definition: DataRequirements.h:226
SENSEI.
Definition: ADIOS2AnalysisAdaptor.h:27
Base class that defines the interface for fetching data from a simulation.
Definition: DataAdaptor.h:25
ArrayRequirementsIterator & NextArray()
advance to the next array
Definition: DataRequirements.h:254
const std::string & MeshName()
returns the mesh name
Definition: DataRequirements.h:171