00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #if !defined(GBIN_WRITER_HPP)
00012 #define GBIN_WRITER_HPP
00013 #include "gtypes.h"
00014 #include "gdd_file.h"
00015 #include "gbin_stream.hpp"
00016 #include "point.hpp"
00017 #include "gtbuffer.hpp"
00018 #include <iostream.h>
00019 #include <fstream.h>
00020
00021
00022
00023 class GBinWriter: public GBinStream
00024 {
00025 public:
00026 GBinWriter(GBOOL isCollective=FALSE, GBOOL isIndependent=TRUE, GSHORT ioTaskID=0);
00027
00028 ~GBinWriter();
00029 GBOOL Open(const char *);
00030 GBOOL Open(const char *, GIOS_MODE iomode, GBOOL bDelete=FALSE);
00031 void Close();
00032 GBOOL SetMeta(GINT nmeta, GDOUBLE *meta_data, const char *descriptor);
00033 GBOOL SetDims(GINT rank, GINT *dims);
00034 GBOOL SetVertices(const GINT num, Point *vertices, ELEMTYPE etype);
00035 GBOOL SetCoord(GINT idir, GINT dim, GDOUBLE *coord, const char *descriptor);
00036 GBOOL WriteData(GINT rank, GINT *dims, GDOUBLE *data , GINT ntags, GDOUBLE *ftags,
00037 const char *descriptor, GFPOS *datablk);
00038 GFPOS InitData(GINT rank, GINT *dims, GDOUBLE c, GINT ntags, GDOUBLE *ftags, const char *descriptor);
00039 GBOOL RewriteData(GFPOS data_start, GINT n, GINT *inewdata, GDOUBLE *newdata);
00040 GBOOL UpdateMeta(GINT nds, GINT ids, GFPOS newoffset);
00041 GBOOL UpdateMeta();
00042 GINT GetTotalWritten();
00043 void EndLoop(GINT);
00044 #if defined(DO_GBIN_TIMING)
00045 void ResetTime();
00046 GDOUBLE GetTime();
00047 private:
00048 GDOUBLE time_result_;
00049 #endif
00050 private:
00051
00052 void DeleteDynamic();
00053 GFPOS WriteMeta();
00054 GFPOS WriteCoordBlock();
00055 GFPOS PutData(GDOUBLE *data, GINT ntags, GDOUBLE *ftags, const char *descriptor,
00056 GFPOS coord_offset, GFPOS &datablk_off);
00057 GFPOS MetaLen();
00058 GFPOS CoordLen();
00059 GFPOS DataLen();
00060
00061
00062
00063 GINT rank_;
00064 GINT *idims_;
00065 GINT nVert_;
00066 GINT nVertMax_;
00067 GINT nTags_;
00068 GINT NN;
00069 GINT nTotalWritten_;
00070 GINT ndsdelta_;
00071 GINT gnds_;
00072 GINT4BYTE nMeta_;
00073 GBOOL bRankSet_;
00074 GBOOL bIsNew_;
00075 GBOOL bNewCoord_;
00076 ELEMTYPE etype_;
00077 GFPOS coordOffset_;
00078 GFPOS datasegOffset_;
00079 GDOUBLE *fMeta_;
00080 GDOUBLE *Vert_;
00081 GDOUBLE **xCoord_;
00082 GINT *nCoord_;
00083 char *sMeta_;
00084 char **sCoord_;
00085 char *sData_;
00086 GUCharBuffer dput_;
00087 GUCharBuffer hMeta_;
00088
00089 };
00090
00091 #endif