00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011 #ifndef _DATAFILEIF_H_
00012 #define _DATAFILEIF_H_
00013
00014 #include <iostream>
00015 #include <fstream>
00016 using std::istream;
00017 using std::ifstream;
00018
00019 #include "MayDay.H"
00020 #include "RealVect.H"
00021 #include "IntVectSet.H"
00022 #include "FArrayBox.H"
00023 #include "RefCountedPtr.H"
00024
00025 #include "BaseIF.H"
00026
00027 #include "NamespaceHeader.H"
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055 class DataFileIF: public BaseIF
00056 {
00057 public:
00058
00059
00060
00061
00062 enum DataType
00063 {
00064 Invalid = -1,
00065 ASCII = 0,
00066 Binary ,
00067 NUMDATATYPES
00068 };
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078 DataFileIF(const DataFileIF::DataType& a_dataType,
00079 const Real& a_value,
00080 const bool& a_inside);
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090 DataFileIF(const char* const a_filename,
00091 const DataFileIF::DataType& a_dataType,
00092 const Real& a_value,
00093 const bool& a_inside);
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104 DataFileIF(const DataFileIF::DataType& a_dataType,
00105 const RealVect& a_spacing,
00106 const RealVect& a_origin,
00107 const Real& a_value,
00108 const bool& a_inside);
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119 DataFileIF(const char* const a_filename,
00120 const DataFileIF::DataType& a_dataType,
00121 const RealVect& a_spacing,
00122 const RealVect& a_origin,
00123 const Real& a_value,
00124 const bool& a_inside);
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135 DataFileIF(const DataFileIF::DataType& a_dataType,
00136 const IntVect& a_num,
00137 const RealVect& a_spacing,
00138 const RealVect& a_origin,
00139 const Real& a_value,
00140 const bool& a_inside);
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151 DataFileIF(const char* const a_filename,
00152 const DataFileIF::DataType& a_dataType,
00153 const IntVect& a_num,
00154 const RealVect& a_spacing,
00155 const RealVect& a_origin,
00156 const Real& a_value,
00157 const bool& a_inside);
00158
00159
00160 DataFileIF(const DataFileIF& a_inputIF);
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174 DataFileIF(const RefCountedPtr<FArrayBox> a_ascii_data,
00175 const RefCountedPtr<BaseFab<unsigned char> > a_binary_data,
00176 const Real& a_noDataValue,
00177 const IntVect& a_num,
00178 const RealVect& a_spacing,
00179 const RealVect& a_origin,
00180 const Real& a_value,
00181 const bool& a_inside);
00182
00183
00184 virtual ~DataFileIF();
00185
00186
00187
00188
00189
00190 virtual void GetHeader(IntVect& a_num,
00191 RealVect& a_spacing,
00192 RealVect& a_origin) const;
00193
00194
00195
00196
00197
00198 virtual void GetParams(Real& a_value,
00199 bool& a_inside) const;
00200
00201
00202
00203
00204
00205 virtual void SetParams(const Real& a_value,
00206 const bool& a_inside);
00207
00208
00209
00210
00211
00212 virtual void SetNoDataValue(const Real& a_value);
00213
00214
00215
00216
00217
00218
00219
00220 virtual Real value(const RealVect& a_point) const;
00221
00222 virtual BaseIF* newImplicitFunction() const;
00223
00224 void GetFullHeader(IntVect& a_num,
00225 RealVect& a_spacing,
00226 RealVect& a_origin)
00227 {
00228 a_num = m_num;
00229 a_spacing = m_spacing;
00230 a_origin = m_origin;
00231 }
00232
00233 protected:
00234 void OpenFile(ifstream& a_file,
00235 const char* const a_filename);
00236
00237 void CloseFile(ifstream& a_file);
00238
00239 void ReadMinHeader(IntVect& a_num,
00240 istream& a_file);
00241
00242 void ReadFullHeader(IntVect& a_num,
00243 RealVect& a_spacing,
00244 RealVect& a_origin,
00245 istream& a_file);
00246
00247 void ReadData(Real& a_maxValue,
00248 istream& a_file,
00249 const DataFileIF::DataType& a_dataType,
00250 const IntVect& a_num);
00251
00252 void MakeCorners(void);
00253
00254 IntVect m_num;
00255 RealVect m_spacing;
00256 RealVect m_origin;
00257
00258 Real m_value;
00259
00260 bool m_inside;
00261
00262
00263 RefCountedPtr<FArrayBox> m_ascii_data;
00264 RefCountedPtr<BaseFab<unsigned char> > m_binary_data;
00265
00266 Real m_noDataValue;
00267
00268 IntVectSet m_corners;
00269
00270 private:
00271 DataFileIF()
00272 {
00273 MayDay::Abort("DataFileIF uses strong construction");
00274 }
00275
00276 void operator=(const DataFileIF& a_inputIF)
00277 {
00278 MayDay::Abort("DataFileIF doesn't allow assignment");
00279 }
00280 };
00281
00282 #include "NamespaceFooter.H"
00283 #endif