00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
#ifndef FILE_SELDONDATA_FORMAT_HXX
00020
00021
#include <stdio.h>
00022
#include <iostream>
00023
using std::cout;
00024
using std::endl;
00025
#include <string>
00026
#include <fstream>
00027
using namespace std;
00028
00029
#ifdef SELDONDATA_WITH_NETCDF
00030
#include "netcdfcpp.h"
00031
#endif
00032
00033
#ifdef SELDONDATA_WITH_GRIB
00034
#include "unpackgrib.c"
00035
#endif
00036
00037
namespace SeldonData
00038 {
00039
00041 class Format
00042 {
00043
00044
protected:
00045
00046
public:
00047
Format()
throw();
00048
~Format()
throw();
00049
00050 };
00051
00052
00054
template<
class T>
00055 class FormatBinary:
public Format
00056 {
00057
00058
protected:
00059
00060
public:
00061
FormatBinary()
throw();
00062
~FormatBinary()
throw();
00063
00064
00065
00066
template<
class TG>
00067
void Read(string FileName,
RegularGrid<TG>& G)
const;
00068
template<
class TG>
00069
void Read(ifstream& FileStream,
RegularGrid<TG>& G)
const;
00070
template<
class TG,
int N>
00071
void Read(string FileName,
GeneralGrid<TG, N>& G)
const;
00072
template<
class TG,
int N>
00073
void Read(ifstream& FileStream,
GeneralGrid<TG, N>& G)
const;
00074
00075
template<
class TG>
00076
void Write(
RegularGrid<TG>& G, string FileName)
const;
00077
template<
class TG>
00078
void Write(
RegularGrid<TG>& G, ofstream& FileStream)
const;
00079
template<
class TG,
int N>
00080
void Write(
GeneralGrid<TG, N>& G, string FileName)
const;
00081
template<
class TG,
int N>
00082
void Write(
GeneralGrid<TG, N>& G, ofstream& FileStream)
const;
00083
00084
template<
class TG>
00085
void Append(
RegularGrid<TG>& G, string FileName)
const;
00086
template<
class TG,
int N>
00087
void Append(
GeneralGrid<TG, N>& G, string FileName)
const;
00088
00089
00090
00091
template<
class TD,
int N,
class TG>
00092
void Read(string FileName,
Data<TD, N, TG>& D)
const;
00093
template<
class TD,
int N,
class TG>
00094
void Read(ifstream& FileStream,
Data<TD, N, TG>& D)
const;
00095
00096
template<
class TD,
int N,
class TG>
00097
void ReadSteps(string FileName,
int steps,
Data<TD, N, TG>& D)
const;
00098
template<
class TD,
int N,
class TG>
00099
void ReadRecord(string FileName,
int steps,
Data<TD, N, TG>& D)
const;
00100
00101
template<
class TD,
int N,
class TG>
00102
void Write(
Data<TD, N, TG>& D, string FileName)
const;
00103
template<
class TD,
int N,
class TG>
00104
void Write(
Data<TD, N, TG>& D, ofstream& FileStream)
const;
00105
00106
template<
class TD,
int N,
class TG>
00107
void Append(
Data<TD, N, TG>& D, string FileName)
const;
00108
00109
00110
00111
template<
class TA,
int N>
00112
void Read(string FileName, Array<TA, N>& A)
const;
00113
template<
int N>
00114
void Read(ifstream& FileStream, Array<T, N>& A)
const;
00115
template<
class TA,
int N>
00116
void Read(ifstream& FileStream, Array<TA, N>& A)
const;
00117
00118
template<
class TA,
int N>
00119
void ReadSteps(string FileName,
int steps, Array<TA, N>& A)
const;
00120
template<
class TA,
int N>
00121
void ReadRecord(string FileName,
int steps, Array<TA, N>& A)
const;
00122
00123
template<
class TA,
int N>
00124
void Write(Array<TA, N>& A, string FileName)
const;
00125
template<
int N>
00126
void Write(Array<T, N>& A, ofstream& FileStream)
const;
00127
template<
class TA,
int N>
00128
void Write(Array<TA, N>& A, ofstream& FileStream)
const;
00129
00130
template<
class TA,
int N>
00131
void Append(Array<TA, N>& A, string FileName)
const;
00132
00133 };
00134
00135
00137 class FormatText:
public Format
00138 {
00139
00140
protected:
00141 string separator_;
00142 fstream::fmtflags flags_;
00143 streamsize precision_;
00144 streamsize width_;
00145
00146
public:
00147
FormatText()
throw();
00148
FormatText(string separator)
throw();
00149
FormatText(fstream::fmtflags flags, string separator =
"\t\t")
throw();
00150
FormatText(fstream::fmtflags flags, streamsize precision,
00151 streamsize width = -1, string separator =
"\t\t")
throw();
00152
~FormatText()
throw();
00153
00154
void SetSeparator(string separator);
00155
void SetFlags(ofstream::fmtflags flags);
00156
void SetPrecision(streamsize precision);
00157
void SetWidth(streamsize width);
00158
00159
00160
00161
template<
class TG>
00162
void Read(string FileName,
RegularGrid<TG>& G)
const;
00163
template<
class TG>
00164
void Read(ifstream& FileStream,
RegularGrid<TG>& G)
const;
00165
template<
class TG,
int N>
00166
void Read(string FileName,
GeneralGrid<TG, N>& G)
const;
00167
template<
class TG,
int N>
00168
void Read(ifstream& FileStream,
GeneralGrid<TG, N>& G)
const;
00169
00170
template<
class TG>
00171
void Write(
RegularGrid<TG>& G, string FileName)
const;
00172
template<
class TG>
00173
void Write(
RegularGrid<TG>& G, ofstream& FileStream)
const;
00174
template<
class TG,
int N>
00175
void Write(
GeneralGrid<TG, N>& G, string FileName)
const;
00176
template<
class TG,
int N>
00177
void Write(
GeneralGrid<TG, N>& G, ofstream& FileStream)
const;
00178
00179
00180
00181
template<
class TD,
int N,
class TG>
00182
void Read(string FileName,
Data<TD, N, TG>& D)
const;
00183
template<
class TD,
int N,
class TG>
00184
void Read(ifstream& FileStream,
Data<TD, N, TG>& D)
const;
00185
00186
template<
class TD,
int N,
class TG>
00187
void Write(
Data<TD, N, TG>& D, string FileName)
const;
00188
template<
class TD,
int N,
class TG>
00189
void Write(
Data<TD, N, TG>& D, ofstream& FileStream)
const;
00190
00191
00192
00193
template<
class TA,
int N>
00194
void Read(string FileName, Array<TA, N>& A)
const;
00195
template<
class TA,
int N>
00196
void Read(ifstream& FileStream, Array<TA, N>& A)
const;
00197
template<
class TA>
00198
void Read(ifstream& FileStream, Array<TA, 1>& A)
const;
00199
00200
template<
class TA,
int N>
00201
void Write(Array<TA, N>& A, string FileName)
const;
00202
template<
class TA,
int N>
00203
void Write(Array<TA, N>& A, ofstream& FileStream)
const;
00204
00205 };
00206
00207
00209 class FormatFormattedText:
public Format
00210 {
00211
00212
protected:
00214 string
format_;
00216 string
comments_;
00218 string
delimiters_;
00220 vector<string>
info_str;
00222 vector<int>
info_nb0;
00224 vector<int>
info_nb1;
00225
00226
private:
00227
void SetVectors();
00228
void SkipMarkup(ExtStream&, streampos pos,
int) const;
00229 template <class T>
00230
int ReadMarkup(ExtStream&, streampos pos,
int, T*,
int) const;
00231
00232 public:
00233
FormatFormattedText(string format,
00234 string comments = "#%",
00235 string delimiters = " \t:;,|\n");
00236 ~
FormatFormattedText();
00237
00238 string GetFormat() const;
00239 string GetDelimiters() const;
00240 string GetComments() const;
00241
00242
void SetFormat(string format);
00243
void SetDelimiters(string delimiters);
00244
void SetComments(string comments);
00245
00246
00247
00248 template<class TG>
00249
void Read(string FileName, string extract,
RegularGrid<TG>& G) const;
00250 template<class TG>
00251
void Read(ExtStream& FileStream, string extract,
RegularGrid<TG>& G) const;
00252 template<class TG,
int N>
00253
void Read(string FileName, string extract,
GeneralGrid<TG, N>& G) const;
00254 template<class TG,
int N>
00255
void Read(ExtStream& FileStream, string extract,
GeneralGrid<TG, N>& G) const;
00256
00257
00258
00259 template<class TD,
int N, class TG>
00260
void Read(string FileName, string extract,
Data<TD, N, TG>& D) const;
00261 template<class TD,
int N, class TG>
00262
void Read(ExtStream& FileStream, string extract,
Data<TD, N, TG>& D) const;
00263
00264
00265
00266 template<class TA,
int N>
00267
void Read(string FileName, string extract, Array<TA, N>& A) const;
00268 template<class TA,
int N>
00269
void Read(ExtStream& FileStream, string extract, Array<TA, N>& A) const;
00270
00271 };
00272
00273
00274 #ifdef SELDONDATA_WITH_NETCDF
00276 template<class T>
00277 class FormatNetCDF: public
Format
00278 {
00279
00280
protected:
00281
00282
public:
00283 FormatNetCDF() throw();
00284 ~FormatNetCDF() throw();
00285
00286
00287
00288 template<class TG>
00289
void Read(string FileName, string variable,
RegularGrid<TG>& G) const;
00290 template<class TG,
int N>
00291
void Read(string FileName, string variable,
GeneralGrid<TG, N>& G) const;
00292
00293
00294
00295 template<class TD,
int N, class TG>
00296
void Read(string FileName, string variable,
Data<TD, N, TG>& D) const;
00297
00298
00299
00300 template<class TA,
int N>
00301
void Read(string FileName, string variable, Array<TA, N>& A) const;
00302
00303 };
00304 #endif
00305
00306
00307 #ifdef SELDONDATA_WITH_GRIB
00309 class FormatGrib: public Format
00310 {
00311
00312
protected:
00313
00314
public:
00315 FormatGrib() throw();
00316 ~FormatGrib() throw();
00317
00318
00319
00320 template<class TG>
00321
void Read(string FileName,
int variable,
RegularGrid<TG>& G) const;
00322 template<class TG,
int N>
00323
void Read(string FileName,
int variable,
GeneralGrid<TG, N>& G) const;
00324
00325
00326
00327 template<class TD,
int N, class TG>
00328
void Read(string FileName,
int variable,
Data<TD, N, TG>& D) const;
00329
00330
00331
00332 template<
int N>
00333
void Read(string FileName,
int variable, Array<
double, N>& A) const;
00334 template<class TA,
int N>
00335
void Read(string FileName,
int variable, Array<TA, N>& A) const;
00336
00337 };
00338 #endif
00339
00340
00342 class
FormatChimere: public Format
00343 {
00344
00345
protected:
00346
int date_;
00347
00348
public:
00349
FormatChimere()
throw();
00350
FormatChimere(
int date)
throw();
00351 ~
FormatChimere()
throw();
00352
00353
void SetDate(
int date);
00354
int GetDate()
const;
00355
00356
00357
00358
template<
class TD,
int N,
class TG>
00359
void Read(string FileName,
Data<TD, N, TG>& D,
00360
int nb_lines = -1)
const;
00361
template<
class TD,
int N,
class TG>
00362
void Read(ifstream& FileStream,
Data<TD, N, TG>& D,
00363
int nb_lines = -1)
const;
00364
00365
00366
00367
template<
class TA,
int N>
00368
void Read(string FileName, Array<TA, N>& A,
00369
int nb_lines = -1)
const;
00370
template<
class TA,
int N>
00371
void Read(ifstream& FileStream, Array<TA, N>& A,
00372
int nb_lines = -1)
const;
00373
00374 };
00375
00376 }
00377
00378
#define FILE_SELDONDATA_FORMAT_HXX
00379
#endif