00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #if !defined(GASPARFILE_HPP)
00013 #define GASPARFILE_HPP
00014
00015 #include "mpi.h"
00016 #include "gtypes.h"
00017 #include "hdf5.h"
00018 #include <iostream.h>
00019
00020 class GasparFile{
00021
00022 public:
00023
00024
00025 virtual ~GasparFile(){}
00026 virtual GBOOL close() = 0;
00027 virtual GBOOL open(FILE_ACCESS accessIn, ISUB fileNestDepth = FILE_DEPTH_DEFAULT) = 0;
00028 virtual GBOOL openCreate(GBOOL overWriteIn, ISUB fileNestDepth = FILE_DEPTH_DEFAULT) = 0;
00029 virtual GBOOL openGroup(const char* groupName) = 0;
00030 virtual GBOOL createGroup(const char* groupName, GUSHORT hint = GROUP_HINT) = 0;
00031 virtual GBOOL closeGroup() = 0;
00032 virtual GBOOL up() = 0;
00033 virtual GBOOL top() = 0;
00034 virtual GBOOL writeMeta(const char* metaName, HDFID location, GDOUBLE meta) = 0;
00035 virtual GBOOL writeMeta(const char* metaName, HDFID location, GDOUBLE *meta, GSHORT len) = 0;
00036 virtual GBOOL writeMeta(const char* metaName, HDFID location, ISUB meta) = 0;
00037 virtual GBOOL readMeta(const char* metaName, HDFID location, GDOUBLE& meta) = 0;
00038 virtual GBOOL readMeta(const char* metaName, HDFID location, ISUB& meta) = 0;
00039 virtual GBOOL writeVector(const char* dataName, const GDOUBLE* data, ISUB dataSize) = 0;
00040 virtual GBOOL writeVector(const char* dataName, const ISUB* data, ISUB dataSize) = 0;
00041 virtual GBOOL readVector(const char* dataName, GDOUBLE*& data, ISUB& dataSize) = 0;
00042 virtual GBOOL readVector(const char* dataName, ISUB*& data, ISUB& dataSize) = 0;
00043 virtual GBOOL writeMatrix(const char* dataName, GDOUBLE* data, ISUB n1, ISUB n2) = 0;
00044 virtual GBOOL readMatrix(const char* dataName, GDOUBLE*& data, ISUB& n1, ISUB& n2) = 0;
00045 GBOOL isOpen() const { return openStatus; }
00046 const char* getFileName() const { return fileName; }
00047 MPI_Comm getHDFComm() const { return hdfComm; }
00048 MPI_Comm getMPIComm() const { return mpiComm; }
00049 FILE_ACCESS getFileAccess(){ return fileAccess; }
00050
00051
00052 protected:
00053
00054
00055 GBOOL setFileName(const char* fileNameIn);
00056 void setOpenStatus(GBOOL openStatusIn){ openStatus = openStatusIn; }
00057 void setFileAccess(const FILE_ACCESS accessIn){ fileAccess = accessIn; }
00058 GBOOL setComms(MPI_Comm parentComm, ISUB** procLists, ISUB nLists, ISUB* listSizes);
00059 GBOOL setComms(MPI_Comm commIn);
00060
00061
00062 static const ISUB FILE_DEPTH_DEFAULT;
00063 static const char* VSIZE_META_NAME;
00064 static const char* MDIM_1_NAME;
00065 static const char* MDIM_2_NAME;
00066 enum DATA_OPERATION { CREATE, XFER };
00067 static const GUSHORT GROUP_HINT;
00068
00069
00070 private:
00071
00072
00073 const char* fileName;
00074 GBOOL openStatus;
00075 FILE_ACCESS fileAccess;
00076 MPI_Comm mpiComm, hdfComm;
00077 static const char* THIS;
00078
00079 };
00080
00081 #endif