00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef HDF5FILEDATA_H
00013 #define HDF5FILEDATA_H
00014
00015 #include <string.h>
00016 #include <vector>
00017 #include <map>
00018 #include "filedatareader.h"
00019 #include "hdf5.h"
00020
00021 using namespace std;
00022
00026 class HDF5FileData : public FileDataReader{
00027 public:
00028 HDF5FileData(const string &name = string(""), const string &mode = string("r"));
00029
00030 virtual ~HDF5FileData();
00031
00032 virtual void* read_data(void* data,
00033 const char* sds_name,
00034 int * start=NULL,
00035 int * stride=NULL,
00036 int *edges=NULL,
00037 int rank=-1);
00038
00039 virtual vector<int> get_dataset_dimension(const string &sds_name);
00040
00041 virtual void get_dataset_fill_value(const string &sds_name, void* fill_value);
00042
00043 virtual int get_n_dataset();
00044
00045 virtual string get_dataset_name(int i);
00046
00047 virtual int get_dataset_data_type(string sds_name);
00048
00049 virtual string get_values_attr_dataset(string sds_name,string attr_name);
00050
00051 virtual bool has_attr_dataset(string sds_name,string attr_name);
00052
00053 virtual string get_values_attr(string attr_name);
00054
00055 virtual bool has_attr(string attr_name);
00056
00060 virtual void close_data_file();
00061
00065 virtual void open_data_file();
00066
00067 void get_fillValue(const string &sds_name, void *fillValue);
00068
00069 void get_scaling(const string &sds_name, float64 &scale, float64 &offset);
00070
00071 protected:
00072 string name;
00073
00074 void read_all_dataset();
00075
00076 hid_t file_id;
00077
00078 map<string,hid_t> dataset_map;
00079 vector<string> dataset_vect;
00080 vector<hid_t> attributes;
00081 map<string,string> attribute;
00082 bool read_dataset_done;
00083
00084 void free_read_write_allocations( const bool *are_limits_initialized, int *start, int *stride, int *edges );
00085 const bool check_read_write_limits(const char* sds_name, int *start, int *stride, int *edges, const int rank);
00086 void init_read_write_null_input_param(const char* sds_name, int *&start, int *&stride, int *&edges, int &rank, bool * initialized_values);
00087 void read_line(string line, string &tag, string &value);
00088 void read_metadata();
00089
00090 void trim(string &token);
00091 void split(const string& str, vector<string>& tokens, const string& delimiters );
00092 };
00093 #endif