From 8057237a7a52a0d9a288a315a5a8fcb222f18bca Mon Sep 17 00:00:00 2001 From: David Mayerich Date: Thu, 10 Mar 2016 16:43:32 -0600 Subject: [PATCH] added an envi::open() function that re-opens a previously opened file with minimal processing --- stim/envi/envi.h | 39 +++++++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/stim/envi/envi.h b/stim/envi/envi.h index b1f6459..1021886 100644 --- a/stim/envi/envi.h +++ b/stim/envi/envi.h @@ -18,6 +18,7 @@ namespace stim{ class envi{ void* file; //void pointer to the relevant file reader (bip, bsq, or bil - with appropriate data type) + std::string fname; //file name used for repeated opening and closing public: @@ -131,22 +132,16 @@ public: } - /// Open an existing ENVI file given the filename and a header structure - - /// @param filename is the name of the ENVI binary file - /// @param header is an ENVI header structure - bool open(std::string filename, stim::envi_header h){ - allocate(); - - header = h; + /// Open a previously opened ENVI file + bool open(){ //load the file if(header.interleave == envi_header::BSQ) { //if the infile is bsq file if(header.data_type == envi_header::float32) { - return ((bsq*)file)->open(filename, header.samples, header.lines, header.bands, header.header_offset, header.wavelength); + return ((bsq*)file)->open(fname, header.samples, header.lines, header.bands, header.header_offset, header.wavelength); } else if(header.data_type == envi_header::float64) { - return ((bsq*)file)->open(filename, header.samples, header.lines, header.bands, header.header_offset, header.wavelength); + return ((bsq*)file)->open(fname, header.samples, header.lines, header.bands, header.header_offset, header.wavelength); } else return false; @@ -154,10 +149,10 @@ public: else if(header.interleave == envi_header::BIL) { //if the infile is bil file if(header.data_type == envi_header::float32) { - return ((bil*)file)->open(filename, header.samples, header.lines, header.bands, header.header_offset, header.wavelength); + return ((bil*)file)->open(fname, header.samples, header.lines, header.bands, header.header_offset, header.wavelength); } else if(header.data_type == envi_header::float64) { - return ((bil*)file)->open(filename, header.samples, header.lines, header.bands, header.header_offset, header.wavelength); + return ((bil*)file)->open(fname, header.samples, header.lines, header.bands, header.header_offset, header.wavelength); } else return false; @@ -165,10 +160,10 @@ public: else if(header.interleave == envi_header::BIP) { //if the infile is bip file if(header.data_type == envi_header::float32) { - return ((bip*)file)->open(filename, header.samples, header.lines, header.bands, header.header_offset, header.wavelength); + return ((bip*)file)->open(fname, header.samples, header.lines, header.bands, header.header_offset, header.wavelength); } else if(header.data_type == envi_header::float64) { - return ((bip*)file)->open(filename, header.samples, header.lines, header.bands, header.header_offset, header.wavelength); + return ((bip*)file)->open(fname, header.samples, header.lines, header.bands, header.header_offset, header.wavelength); } else return false; @@ -176,6 +171,22 @@ public: return true; + + } + + /// Open an existing ENVI file given the filename and a header structure + + /// @param filename is the name of the ENVI binary file + /// @param header is an ENVI header structure + bool open(std::string filename, stim::envi_header h){ + allocate(); + + header = h; //store the header + fname = filename; //save the filename + + return open(); //open the ENVI file; + + } /// Open an existing ENVI file given the file and header names. -- libgit2 0.21.4