// // C++ Interface: %{MODULE} // // Description: // // // Author: %{AUTHOR} <%{EMAIL}>, (C) %{YEAR} // // Copyright: See COPYING file that comes with this distribution // // #ifndef HDF5FILEDATA_H #define HDF5FILEDATA_H #include <string.h> #include <vector> #include <map> #include "filedatareader.h" #include "hdf5.h" using namespace std; /** @author James MANLEY */ class HDF5FileData : public FileDataReader{ public: HDF5FileData(const string &name = string(""), const string &mode = string("r")); virtual ~HDF5FileData(); virtual void* read_data(void* data, const char* sds_name, int * start=NULL, int * stride=NULL, int *edges=NULL, int rank=-1); virtual vector<int> get_dataset_dimension(const string &sds_name); virtual void get_dataset_fill_value(const string &sds_name, void* fill_value); virtual int get_n_dataset(); virtual string get_dataset_name(int i); virtual int get_dataset_data_type(string sds_name); virtual string get_values_attr_dataset(string sds_name,string attr_name); virtual bool has_attr_dataset(string sds_name,string attr_name); virtual string get_values_attr(string attr_name); virtual bool has_attr(string attr_name); /** * @brief closes the file */ virtual void close_data_file(); /** * @brief open the file */ virtual void open_data_file(); void get_fillValue(const string &sds_name, void *fillValue); void get_scaling(const string &sds_name, float64 &scale, float64 &offset); protected: string name; void read_all_dataset(); hid_t file_id; map<string,hid_t> dataset_map; vector<string> dataset_vect; vector<hid_t> attributes; map<string,string> attribute; bool read_dataset_done; void free_read_write_allocations( const bool *are_limits_initialized, int *start, int *stride, int *edges ); const bool check_read_write_limits(const char* sds_name, int *start, int *stride, int *edges, const int rank); void init_read_write_null_input_param(const char* sds_name, int *&start, int *&stride, int *&edges, int &rank, bool * initialized_values); void read_line(string line, string &tag, string &value); void read_metadata(); void trim(string &token); void split(const string& str, vector<string>& tokens, const string& delimiters ); }; #endif