//make sure that this header file is only loaded once #ifndef RTS_BINARY_H #define RTS_BINARY_H #include "../envi/envi.h" #include "../math/vector.h" #include #include namespace rts{ //This class contains a bunch of functions useful for multidimensional binary file access template< typename T, unsigned int D = 3 > class binary{ protected: std::fstream file; //file stream used for reading and writing std::string name; //file name unsigned int R[D]; //resolution unsigned int header; //header size (in bytes) //basic initialization void init(){ memset(R, 0, sizeof(unsigned int) * D); //initialize the resolution to zero header = 0; //initialize the header size to zero } //returns the file size // reads the file size from disk and returns it (in bytes) unsigned int get_file_size(){ struct stat results; if(stat(name.c_str(), &results) == 0) return results.st_size; else return 0; } //make sure that the specified file size matches the file size on disk // returns true/false bool test_file_size(){ unsigned int npts = 1; //initialize the number of data points to 1 for(unsigned int i = 0; i r, unsigned int h = 0){ for(unsigned int i = 0; i < D; i++) //set the dimensions of the binary file object R[i] = r[i]; header = h; //save the header size if(!open_file(filename)) return false; //open the binary file return test_file_size(); } //save one band of the file into the memory, and return the pointer bool saveZ( T * p, unsigned int page){ if (page >= R[2]){ //make sure the bank number is right std::cout<<"ERROR: page out of range"<= R[0] || y >= R[1]){ //make sure the sample and line number is right std::cout<<"ERROR: sample or line out of range"<(X), h); } bool open(std::string filename, unsigned int X, unsigned int Y, unsigned int h = 0){ return open(filename, vec(X, Y), h); } bool open(std::string filename, unsigned int X, unsigned int Y, unsigned int Z, unsigned int h = 0){ return open(filename, vec(X, Y, Z), h); }*/ }; } #endif