Field3D
|
#include <Field3DFile.h>
Classes | |
struct | LayerInfo |
Public Types | |
typedef std::map< std::string, std::string > | GroupMembershipMap |
typedef std::map< std::string, std::string > | GroupMembershipMap |
Public Member Functions | |
void | clear () |
Clear the data structures and close the file. | |
void | clear () |
Clear the data structures and close the file. | |
bool | close () |
Closes the file. No need to call this unless you specifically want to close the file early. It will close once the File object goes out of scope. | |
bool | close () |
Closes the file. No need to call this unless you specifically want to close the file early. It will close once the File object goes out of scope. | |
const FieldMetadata < Field3DFileBase > & | metadata () const |
Read only access to the m_metadata class. | |
FieldMetadata< Field3DFileBase > & | metadata () |
accessor to the m_metadata class | |
const FieldMetadata < Field3DFileBase > & | metadata () const |
Read only access to the m_metadata class. | |
FieldMetadata< Field3DFileBase > & | metadata () |
accessor to the m_metadata class | |
virtual void | metadataHasChanged (const std::string &) |
This function should implemented by concrete classes to get the callback when metadata changes. | |
virtual void | metadataHasChanged (const std::string &) |
This function should implemented by concrete classes to get the callback when metadata changes. | |
Constructors & destructor | |
Field3DFileBase () | |
virtual | ~Field3DFileBase ()=0 |
Pure virtual destructor to ensure we never instantiate this class. | |
Field3DFileBase () | |
virtual | ~Field3DFileBase ()=0 |
Pure virtual destructor to ensure we never instantiate this class. | |
Retreiving partition and layer names | |
void | getPartitionNames (std::vector< std::string > &names) const |
Gets the names of all the partitions in the file. | |
void | getScalarLayerNames (std::vector< std::string > &names, const std::string &partitionName) const |
Gets the names of all the scalar layers in a given partition. | |
void | getVectorLayerNames (std::vector< std::string > &names, const std::string &partitionName) const |
Gets the names of all the vector layers in a given partition. | |
File::Partition::Ptr | getPartition (const std::string &partitionName) const |
Returns a pointer to the given partition. | |
void | getPartitionNames (std::vector< std::string > &names) const |
Gets the names of all the partitions in the file. | |
void | getScalarLayerNames (std::vector< std::string > &names, const std::string &partitionName) const |
Gets the names of all the scalar layers in a given partition. | |
void | getVectorLayerNames (std::vector< std::string > &names, const std::string &partitionName) const |
Gets the names of all the vector layers in a given partition. | |
File::Partition::Ptr | getPartition (const std::string &partitionName) const |
Returns a pointer to the given partition. | |
Convenience methods for partitionName | |
std::string | intPartitionName (const std::string &partitionName, const std::string &layerName, FieldRes::Ptr field) |
Returns a unique partition name given the requested name. This ensures that partitions with matching mappings get the same name but each subsequent differing mapping gets a new, separate name. | |
std::string | removeUniqueId (const std::string &partitionName) const |
Strips any unique identifiers from the partition name and returns the original name. | |
void | addGroupMembership (const GroupMembershipMap &groupMembers) |
Add to the group membership. | |
std::string | intPartitionName (const std::string &partitionName, const std::string &layerName, FieldRes::Ptr field) |
Returns a unique partition name given the requested name. This ensures that partitions with matching mappings get the same name but each subsequent differing mapping gets a new, separate name. | |
std::string | removeUniqueId (const std::string &partitionName) const |
Strips any unique identifiers from the partition name and returns the original name. | |
void | addGroupMembership (const GroupMembershipMap &groupMembers) |
Add to the group membership. | |
Debug | |
void | printHierarchy () const |
void | printHierarchy () const |
Protected Types | |
typedef std::map< std::string, int > | PartitionCountMap |
typedef std::map< std::string, int > | PartitionCountMap |
typedef std::vector < File::Partition::Ptr > | PartitionList |
typedef std::vector < File::Partition::Ptr > | PartitionList |
Protected Member Functions | |
Convenience methods | |
void | closeInternal () |
Closes the file if open. | |
File::Partition::Ptr | partition (const std::string &partitionName) |
Returns a pointer to the given partition. | |
File::Partition::Ptr | partition (const std::string &partitionName) const |
Returns a pointer to the given partition. | |
void | getIntPartitionNames (std::vector< std::string > &names) const |
Gets the names of all the -internal- partitions in the file. | |
void | getIntScalarLayerNames (std::vector< std::string > &names, const std::string &intPartitionName) const |
Gets the names of all the scalar layers in a given partition, but assumes that partition name is the -internal- partition name. | |
void | getIntVectorLayerNames (std::vector< std::string > &names, const std::string &intPartitionName) const |
Gets the names of all the vector layers in a given partition, but assumes that partition name is the -internal- partition name. | |
int | numIntPartitions (const std::string &partitionName) const |
Returns the number of internal partitions for a given partition name. | |
std::string | makeIntPartitionName (const std::string &partitionsName, int i) const |
Makes an internal partition name given the external partition name. Effectively just tacks on .X to the name, where X is the number. | |
void | closeInternal () |
Closes the file if open. | |
File::Partition::Ptr | partition (const std::string &partitionName) |
Returns a pointer to the given partition. | |
File::Partition::Ptr | partition (const std::string &partitionName) const |
Returns a pointer to the given partition. | |
void | getIntPartitionNames (std::vector< std::string > &names) const |
Gets the names of all the -internal- partitions in the file. | |
void | getIntScalarLayerNames (std::vector< std::string > &names, const std::string &intPartitionName) const |
Gets the names of all the scalar layers in a given partition, but assumes that partition name is the -internal- partition name. | |
void | getIntVectorLayerNames (std::vector< std::string > &names, const std::string &intPartitionName) const |
Gets the names of all the vector layers in a given partition, but assumes that partition name is the -internal- partition name. | |
int | numIntPartitions (const std::string &partitionName) const |
Returns the number of internal partitions for a given partition name. | |
std::string | makeIntPartitionName (const std::string &partitionsName, int i) const |
Makes an internal partition name given the external partition name. Effectively just tacks on .X to the name, where X is the number. | |
Protected Attributes | |
hid_t | m_file |
The hdf5 id of the current file. Will be -1 if no file is open. | |
GroupMembershipMap | m_groupMembership |
Keeps track of group membership for each layer of partition name. The key is the "group" and the value is a space separated list of "partitionName.0:Layer1 partitionName.1:Layer0 ...". | |
std::vector< LayerInfo > | m_layerInfo |
This stores layer info. | |
FieldMetadata< Field3DFileBase > | m_metadata |
metadata | |
PartitionCountMap | m_partitionCount |
Contains a counter for each partition name. This is used to keep multiple fields with the same name unique in the file. | |
std::vector< std::string > | m_partitionNames |
This stores partition names. | |
PartitionList | m_partitions |
Vector of partitions. | |
Private Member Functions | |
Field3DFileBase (const Field3DFileBase &) | |
Field3DFileBase (const Field3DFileBase &) | |
void | operator= (const Field3DFileBase &) |
void | operator= (const Field3DFileBase &) |
Provides some common functionality for Field3DInputFile and Field3DOutputFile. It hold the partition->layer data structures, but knows nothing about how to actually get them to/from disk.
Definition at line 208 of file Field3DFile.h.
typedef std::map<std::string, std::string> Field3DFileBase::GroupMembershipMap |
Definition at line 226 of file Field3DFile.h.
typedef std::vector<File::Partition::Ptr> Field3DFileBase::PartitionList [protected] |
Definition at line 315 of file Field3DFile.h.
typedef std::map<std::string, int> Field3DFileBase::PartitionCountMap [protected] |
Definition at line 316 of file Field3DFile.h.
typedef std::map<std::string, std::string> Field3DFileBase::GroupMembershipMap |
Definition at line 226 of file Field3DFile.h.
typedef std::vector<File::Partition::Ptr> Field3DFileBase::PartitionList [protected] |
Definition at line 315 of file Field3DFile.h.
typedef std::map<std::string, int> Field3DFileBase::PartitionCountMap [protected] |
Definition at line 316 of file Field3DFile.h.
Field3DFileBase::Field3DFileBase | ( | ) |
Definition at line 276 of file Field3DFile.cpp.
: m_file(-1), m_metadata(this) { // Suppressing HDF error messages // Explanation about the function for the error stack is here: // http://www.hdfgroup.org/HDF5/doc/RM/RM_H5E.html#Error-SetAuto2 if (getenv("DEBUG_HDF")) { cerr << "Field3DFile -- HDF5 messages are on" << endl; H5Eset_auto(H5E_DEFAULT, localPrintError, NULL); } else { H5Eset_auto(H5E_DEFAULT, NULL, NULL); } }
Field3DFileBase::~Field3DFileBase | ( | ) | [pure virtual] |
Pure virtual destructor to ensure we never instantiate this class.
Definition at line 292 of file Field3DFile.cpp.
References close().
{ close(); }
Field3DFileBase::Field3DFileBase | ( | const Field3DFileBase & | ) | [private] |
Field3DFileBase::Field3DFileBase | ( | ) |
virtual Field3DFileBase::~Field3DFileBase | ( | ) | [pure virtual] |
Pure virtual destructor to ensure we never instantiate this class.
Field3DFileBase::Field3DFileBase | ( | const Field3DFileBase & | ) | [private] |
void Field3DFileBase::clear | ( | ) |
Clear the data structures and close the file.
Definition at line 471 of file Field3DFile.cpp.
References closeInternal(), m_groupMembership, and m_partitions.
Referenced by Field3DInputFile::~Field3DInputFile().
{ closeInternal(); m_partitions.clear(); m_groupMembership.clear(); }
bool Field3DFileBase::close | ( | ) |
Closes the file. No need to call this unless you specifically want to close the file early. It will close once the File object goes out of scope.
Definition at line 480 of file Field3DFile.cpp.
References closeInternal().
Referenced by ~Field3DFileBase().
{ closeInternal(); return true; }
void Field3DFileBase::getPartitionNames | ( | std::vector< std::string > & | names | ) | const |
Gets the names of all the partitions in the file.
Referenced by printFileInfo(), Field3DInputFile::readProxyScalarLayers(), and Field3DInputFile::readProxyVectorLayers().
void Field3DFileBase::getScalarLayerNames | ( | std::vector< std::string > & | names, |
const std::string & | partitionName | ||
) | const |
Gets the names of all the scalar layers in a given partition.
Referenced by printFileInfo(), and Field3DInputFile::readProxyScalarLayers().
void Field3DFileBase::getVectorLayerNames | ( | std::vector< std::string > & | names, |
const std::string & | partitionName | ||
) | const |
Gets the names of all the vector layers in a given partition.
Referenced by printFileInfo(), and Field3DInputFile::readProxyVectorLayers().
File::Partition::Ptr Field3DFileBase::getPartition | ( | const std::string & | partitionName | ) | const [inline] |
Returns a pointer to the given partition.
Definition at line 263 of file Field3DFile.h.
References partition().
{ return partition(partitionName); }
std::string Field3DFileBase::intPartitionName | ( | const std::string & | partitionName, |
const std::string & | layerName, | ||
FieldRes::Ptr | field | ||
) |
Returns a unique partition name given the requested name. This ensures that partitions with matching mappings get the same name but each subsequent differing mapping gets a new, separate name.
Definition at line 300 of file Field3DFile.cpp.
References m_partitionCount, m_partitions, makeIntPartitionName(), and removeUniqueId().
Referenced by Field3DInputFile::readScalarLayer(), Field3DInputFile::readVectorLayer(), and Field3DOutputFile::writeLayer().
{ // Loop over existing partitions and see if there's a matching mapping for (PartitionList::const_iterator i = m_partitions.begin(); i != m_partitions.end(); ++i) { if (removeUniqueId((**i).name) == partitionName) { if ((**i).mapping->isIdentical(field->mapping())) { return (**i).name; } } } // If there was no previously matching name, then make a new one int nextIdx = -1; if (m_partitionCount.find(partitionName) != m_partitionCount.end()) { nextIdx = ++m_partitionCount[partitionName]; } else { nextIdx = 0; m_partitionCount[partitionName] = 0; } return makeIntPartitionName(partitionName, nextIdx); }
std::string Field3DFileBase::removeUniqueId | ( | const std::string & | partitionName | ) | const |
Strips any unique identifiers from the partition name and returns the original name.
Definition at line 357 of file Field3DFile.cpp.
Referenced by intPartitionName(), Field3DInputFile::readGroupMembership(), Field3DInputFile::readLayer(), Field3DInputFile::readProxyLayer(), Field3DInputFile::readScalarLayers(), and Field3DInputFile::readVectorLayers().
{ size_t pos = partitionName.rfind("."); if (pos == partitionName.npos) { return partitionName; } else { return partitionName.substr(0, pos); } }
void Field3DFileBase::addGroupMembership | ( | const GroupMembershipMap & | groupMembers | ) |
Add to the group membership.
Definition at line 533 of file Field3DFile.cpp.
References m_groupMembership.
{ GroupMembershipMap::const_iterator i= groupMembers.begin(); GroupMembershipMap::const_iterator end= groupMembers.end(); for (; i != end; ++i) { GroupMembershipMap::iterator foundGroupIter = m_groupMembership.find(i->first); if (foundGroupIter != m_groupMembership.end()){ std::string value = m_groupMembership[i->first] + i->second; m_groupMembership[i->first] = value; } else { m_groupMembership[i->first] = i->second; } } }
FieldMetadata<Field3DFileBase>& Field3DFileBase::metadata | ( | ) | [inline] |
accessor to the m_metadata class
Definition at line 290 of file Field3DFile.h.
References m_metadata.
Referenced by printFileInfo(), Field3DInputFile::readMetadata(), writeGlobalMetadata(), and Field3DOutputFile::writeMetadata().
{ return m_metadata; }
const FieldMetadata<Field3DFileBase>& Field3DFileBase::metadata | ( | ) | const [inline] |
Read only access to the m_metadata class.
Definition at line 294 of file Field3DFile.h.
References m_metadata.
{ return m_metadata; }
virtual void Field3DFileBase::metadataHasChanged | ( | const std::string & | ) | [inline, virtual] |
This function should implemented by concrete classes to get the callback when metadata changes.
Definition at line 299 of file Field3DFile.h.
{ /* Empty */ }
void Field3DFileBase::printHierarchy | ( | ) | const |
Definition at line 1510 of file Field3DFile.cpp.
References m_partitions.
{ // For each partition for (PartitionList::const_iterator i = m_partitions.begin(); i != m_partitions.end(); ++i) { cout << "Name: " << (**i).name << endl; if ((**i).mapping) cout << " Mapping: " << (**i).mapping->className() << endl; else cout << " Mapping: NULL" << endl; cout << " Scalar layers: " << endl; vector<string> sNames; (**i).getScalarLayerNames(sNames); for_each(sNames.begin(), sNames.end(), print<string>(4)); cout << " Vector layers: " << endl; vector<string> vNames; (**i).getVectorLayerNames(vNames); for_each(vNames.begin(), vNames.end(), print<string>(4)); } }
void Field3DFileBase::closeInternal | ( | ) | [protected] |
Closes the file if open.
Definition at line 489 of file Field3DFile.cpp.
References m_file, Msg::print(), and Msg::SevWarning.
Referenced by clear(), and close().
{ if (m_file != -1) { if (H5Fclose(m_file) < 0) { Msg::print(Msg::SevWarning, "Failed to close hdf5 file handle"); return; } m_file = -1; } }
File::Partition::Ptr Field3DFileBase::partition | ( | const std::string & | partitionName | ) | [protected] |
Returns a pointer to the given partition.
Referenced by getPartition(), Field3DInputFile::readLayer(), Field3DInputFile::readPartitionAndLayerInfo(), Field3DInputFile::readProxyLayer(), and Field3DOutputFile::writeLayer().
File::Partition::Ptr Field3DFileBase::partition | ( | const std::string & | partitionName | ) | const [protected] |
Returns a pointer to the given partition.
void Field3DFileBase::getIntPartitionNames | ( | std::vector< std::string > & | names | ) | const [protected] |
Gets the names of all the -internal- partitions in the file.
Referenced by Field3DInputFile::readProxyLayer(), Field3DInputFile::readScalarLayers(), and Field3DInputFile::readVectorLayers().
void Field3DFileBase::getIntScalarLayerNames | ( | std::vector< std::string > & | names, |
const std::string & | intPartitionName | ||
) | const [protected] |
Gets the names of all the scalar layers in a given partition, but assumes that partition name is the -internal- partition name.
Referenced by Field3DInputFile::readProxyLayer(), and Field3DInputFile::readScalarLayers().
void Field3DFileBase::getIntVectorLayerNames | ( | std::vector< std::string > & | names, |
const std::string & | intPartitionName | ||
) | const [protected] |
Gets the names of all the vector layers in a given partition, but assumes that partition name is the -internal- partition name.
Referenced by Field3DInputFile::readProxyLayer(), and Field3DInputFile::readVectorLayers().
int Field3DFileBase::numIntPartitions | ( | const std::string & | partitionName | ) | const [protected] |
Returns the number of internal partitions for a given partition name.
Definition at line 503 of file Field3DFile.cpp.
References m_partitions.
{ int count = 0; for (PartitionList::const_iterator i = m_partitions.begin(); i != m_partitions.end(); ++i) { string name = (**i).name; size_t pos = name.rfind("."); if (pos != name.npos) { if (name.substr(0, pos) == partitionName) { count++; } } } return count; }
string Field3DFileBase::makeIntPartitionName | ( | const std::string & | partitionsName, |
int | i | ||
) | const [protected] |
Makes an internal partition name given the external partition name. Effectively just tacks on .X to the name, where X is the number.
Definition at line 524 of file Field3DFile.cpp.
Referenced by intPartitionName().
{ return partitionName + "." + boost::lexical_cast<std::string>(i); }
void Field3DFileBase::operator= | ( | const Field3DFileBase & | ) | [private] |
void Field3DFileBase::clear | ( | ) |
Clear the data structures and close the file.
bool Field3DFileBase::close | ( | ) |
Closes the file. No need to call this unless you specifically want to close the file early. It will close once the File object goes out of scope.
void Field3DFileBase::getPartitionNames | ( | std::vector< std::string > & | names | ) | const |
Gets the names of all the partitions in the file.
void Field3DFileBase::getScalarLayerNames | ( | std::vector< std::string > & | names, |
const std::string & | partitionName | ||
) | const |
Gets the names of all the scalar layers in a given partition.
void Field3DFileBase::getVectorLayerNames | ( | std::vector< std::string > & | names, |
const std::string & | partitionName | ||
) | const |
Gets the names of all the vector layers in a given partition.
File::Partition::Ptr Field3DFileBase::getPartition | ( | const std::string & | partitionName | ) | const [inline] |
Returns a pointer to the given partition.
Definition at line 263 of file Field3DFile.h.
References partition().
{ return partition(partitionName); }
std::string Field3DFileBase::intPartitionName | ( | const std::string & | partitionName, |
const std::string & | layerName, | ||
FieldRes::Ptr | field | ||
) |
Returns a unique partition name given the requested name. This ensures that partitions with matching mappings get the same name but each subsequent differing mapping gets a new, separate name.
std::string Field3DFileBase::removeUniqueId | ( | const std::string & | partitionName | ) | const |
Strips any unique identifiers from the partition name and returns the original name.
void Field3DFileBase::addGroupMembership | ( | const GroupMembershipMap & | groupMembers | ) |
Add to the group membership.
FieldMetadata<Field3DFileBase>& Field3DFileBase::metadata | ( | ) | [inline] |
accessor to the m_metadata class
Definition at line 290 of file Field3DFile.h.
References m_metadata.
{ return m_metadata; }
const FieldMetadata<Field3DFileBase>& Field3DFileBase::metadata | ( | ) | const [inline] |
Read only access to the m_metadata class.
Definition at line 294 of file Field3DFile.h.
References m_metadata.
{ return m_metadata; }
virtual void Field3DFileBase::metadataHasChanged | ( | const std::string & | ) | [inline, virtual] |
This function should implemented by concrete classes to get the callback when metadata changes.
Definition at line 299 of file Field3DFile.h.
{ /* Empty */ }
void Field3DFileBase::printHierarchy | ( | ) | const |
void Field3DFileBase::closeInternal | ( | ) | [protected] |
Closes the file if open.
File::Partition::Ptr Field3DFileBase::partition | ( | const std::string & | partitionName | ) | [protected] |
Returns a pointer to the given partition.
File::Partition::Ptr Field3DFileBase::partition | ( | const std::string & | partitionName | ) | const [protected] |
Returns a pointer to the given partition.
void Field3DFileBase::getIntPartitionNames | ( | std::vector< std::string > & | names | ) | const [protected] |
Gets the names of all the -internal- partitions in the file.
void Field3DFileBase::getIntScalarLayerNames | ( | std::vector< std::string > & | names, |
const std::string & | intPartitionName | ||
) | const [protected] |
Gets the names of all the scalar layers in a given partition, but assumes that partition name is the -internal- partition name.
void Field3DFileBase::getIntVectorLayerNames | ( | std::vector< std::string > & | names, |
const std::string & | intPartitionName | ||
) | const [protected] |
Gets the names of all the vector layers in a given partition, but assumes that partition name is the -internal- partition name.
int Field3DFileBase::numIntPartitions | ( | const std::string & | partitionName | ) | const [protected] |
Returns the number of internal partitions for a given partition name.
std::string Field3DFileBase::makeIntPartitionName | ( | const std::string & | partitionsName, |
int | i | ||
) | const [protected] |
Makes an internal partition name given the external partition name. Effectively just tacks on .X to the name, where X is the number.
void Field3DFileBase::operator= | ( | const Field3DFileBase & | ) | [private] |
std::vector< LayerInfo > Field3DFileBase::m_layerInfo [protected] |
This stores layer info.
Definition at line 356 of file Field3DFile.h.
Referenced by Field3DInputFile::parseLayer(), and Field3DInputFile::readPartitionAndLayerInfo().
hid_t Field3DFileBase::m_file [protected] |
The hdf5 id of the current file. Will be -1 if no file is open.
Definition at line 359 of file Field3DFile.h.
Referenced by closeInternal(), Field3DInputFile::readGroupMembership(), Field3DInputFile::readLayer(), Field3DInputFile::readPartitionAndLayerInfo(), Field3DInputFile::readProxyLayer(), Field3DOutputFile::writeGlobalMetadata(), Field3DOutputFile::writeGroupMembership(), and Field3DOutputFile::writeLayer().
PartitionList Field3DFileBase::m_partitions [protected] |
Vector of partitions.
Definition at line 361 of file Field3DFile.h.
Referenced by clear(), intPartitionName(), numIntPartitions(), printHierarchy(), Field3DInputFile::readPartitionAndLayerInfo(), and Field3DOutputFile::writeLayer().
std::vector< std::string > Field3DFileBase::m_partitionNames [protected] |
This stores partition names.
Definition at line 363 of file Field3DFile.h.
Referenced by Field3DInputFile::parsePartition(), and Field3DInputFile::readPartitionAndLayerInfo().
PartitionCountMap Field3DFileBase::m_partitionCount [protected] |
Contains a counter for each partition name. This is used to keep multiple fields with the same name unique in the file.
Definition at line 367 of file Field3DFile.h.
Referenced by intPartitionName().
GroupMembershipMap Field3DFileBase::m_groupMembership [protected] |
Keeps track of group membership for each layer of partition name. The key is the "group" and the value is a space separated list of "partitionName.0:Layer1 partitionName.1:Layer0 ...".
Definition at line 372 of file Field3DFile.h.
Referenced by addGroupMembership(), clear(), Field3DInputFile::readGroupMembership(), and Field3DOutputFile::writeGroupMembership().
FieldMetadata< Field3DFileBase > Field3DFileBase::m_metadata [protected] |