#ifndef RTS_BINARY_H #define RTS_BINARY_H #include "../envi/envi.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 sum = header; //initialize the sum (in bytes) to the header size for(unsigned int i = 0; i r, unsigned int h = 0){ if(!open_file(filename)) return false; for(unsigned int i = 0; i < D; i++) R[i] = r[i]; header = h; return test_file_size(); } /*bool open(std::string filename, unsigned int X, unsigned int h = 0){ return open(filename, vec(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