Commit 460cd77dff1ba21727c92e2ff547a3f896ba4429
1 parent
bedebe80
Add some operators to the GFilename class.
Showing
4 changed files
with
95 additions
and
37 deletions
include/GFilename.hpp
| @@ -61,6 +61,12 @@ | @@ -61,6 +61,12 @@ | ||
| 61 | ***************************************************************************/ | 61 | ***************************************************************************/ |
| 62 | class GFilename : public GBase { | 62 | class GFilename : public GBase { |
| 63 | 63 | ||
| 64 | + // Friend functions | ||
| 65 | + friend std::string operator+(const GFilename& filename, const std::string& string); | ||
| 66 | + friend std::string operator+(const std::string& string, const GFilename& filename); | ||
| 67 | + friend bool operator==(const GFilename &a, const GFilename &b); | ||
| 68 | + friend bool operator!=(const GFilename &a, const GFilename &b); | ||
| 69 | + | ||
| 64 | public: | 70 | public: |
| 65 | // Constructors and destructors | 71 | // Constructors and destructors |
| 66 | GFilename(void); | 72 | GFilename(void); |
| @@ -71,7 +77,7 @@ public: | @@ -71,7 +77,7 @@ public: | ||
| 71 | 77 | ||
| 72 | // Operators | 78 | // Operators |
| 73 | GFilename& operator=(const GFilename& filename); | 79 | GFilename& operator=(const GFilename& filename); |
| 74 | - const std::string& operator()(void) const; | 80 | + operator std::string(void) const; |
| 75 | 81 | ||
| 76 | // Methods | 82 | // Methods |
| 77 | void clear(void); | 83 | void clear(void); |
| @@ -83,6 +89,9 @@ public: | @@ -83,6 +89,9 @@ public: | ||
| 83 | //std::string protocol(void) const; | 89 | //std::string protocol(void) const; |
| 84 | //std::string& path(void) const; | 90 | //std::string& path(void) const; |
| 85 | //std::string& file(void) const; | 91 | //std::string& file(void) const; |
| 92 | + //bool exists(void) const; | ||
| 93 | + //bool is_fits(void) const; | ||
| 94 | + //void remove(void) const; | ||
| 86 | std::string extname(const std::string& defaultname = "") const; | 95 | std::string extname(const std::string& defaultname = "") const; |
| 87 | const std::string& expression(void) const; | 96 | const std::string& expression(void) const; |
| 88 | int extno(const int& defaultno = -1) const; | 97 | int extno(const int& defaultno = -1) const; |
| @@ -114,16 +123,16 @@ protected: | @@ -114,16 +123,16 @@ protected: | ||
| 114 | 123 | ||
| 115 | 124 | ||
| 116 | /***********************************************************************//** | 125 | /***********************************************************************//** |
| 117 | - * @brief Filename operator | 126 | + * @brief Implicit filename std::string convertor |
| 118 | * | 127 | * |
| 119 | - * @return Full filename. | 128 | + * @return Full filename as std::string. |
| 120 | * | 129 | * |
| 121 | - * Returns the full filename including any FITS extension. | 130 | + * Returns the full filename including any FITS extension as std::string. |
| 122 | ***************************************************************************/ | 131 | ***************************************************************************/ |
| 123 | inline | 132 | inline |
| 124 | -const std::string& GFilename::operator()(void) const | 133 | +GFilename::operator std::string(void) const |
| 125 | { | 134 | { |
| 126 | - return (m_fullname); | 135 | + return (gammalib::expand_env(m_fullname)); |
| 127 | } | 136 | } |
| 128 | 137 | ||
| 129 | 138 | ||
| @@ -237,4 +246,60 @@ bool GFilename::has_expression(void) const | @@ -237,4 +246,60 @@ bool GFilename::has_expression(void) const | ||
| 237 | return (!m_expression.empty()); | 246 | return (!m_expression.empty()); |
| 238 | } | 247 | } |
| 239 | 248 | ||
| 249 | + | ||
| 250 | +/***********************************************************************//** | ||
| 251 | + * @brief String addition operator | ||
| 252 | + * | ||
| 253 | + * @param[in] filename Filename. | ||
| 254 | + * @param[in] string String. | ||
| 255 | + * @return String with filename + string. | ||
| 256 | + ***************************************************************************/ | ||
| 257 | +inline | ||
| 258 | +std::string operator+(const GFilename& filename, const std::string& string) | ||
| 259 | +{ | ||
| 260 | + return (std::string(filename)+string); | ||
| 261 | +} | ||
| 262 | + | ||
| 263 | + | ||
| 264 | +/***********************************************************************//** | ||
| 265 | + * @brief String addition operator | ||
| 266 | + * | ||
| 267 | + * @param[in] string String. | ||
| 268 | + * @param[in] filename Filename. | ||
| 269 | + * @return String with string + filename. | ||
| 270 | + ***************************************************************************/ | ||
| 271 | +inline | ||
| 272 | +std::string operator+(const std::string& string, const GFilename& filename) | ||
| 273 | +{ | ||
| 274 | + return (string+std::string(filename)); | ||
| 275 | +} | ||
| 276 | + | ||
| 277 | + | ||
| 278 | +/***********************************************************************//** | ||
| 279 | + * @brief Filename equality operator | ||
| 280 | + * | ||
| 281 | + * @param[in] a First filename. | ||
| 282 | + * @param[in] b Second filename. | ||
| 283 | + * @return True if filenames are equal. | ||
| 284 | + ***************************************************************************/ | ||
| 285 | +inline | ||
| 286 | +bool operator==(const GFilename &a, const GFilename &b) | ||
| 287 | +{ | ||
| 288 | + return (std::string(a) == std::string(b)); | ||
| 289 | +} | ||
| 290 | + | ||
| 291 | + | ||
| 292 | +/***********************************************************************//** | ||
| 293 | + * @brief Filename inequality operator | ||
| 294 | + * | ||
| 295 | + * @param[in] a First filename. | ||
| 296 | + * @param[in] b Second filename. | ||
| 297 | + * @return True if filenames are not equal. | ||
| 298 | + ***************************************************************************/ | ||
| 299 | +inline | ||
| 300 | +bool operator!=(const GFilename &a, const GFilename &b) | ||
| 301 | +{ | ||
| 302 | + return (std::string(a) != std::string(b)); | ||
| 303 | +} | ||
| 304 | + | ||
| 240 | #endif /* GFILENAME_HPP */ | 305 | #endif /* GFILENAME_HPP */ |
pyext/GFilename.i
| @@ -44,9 +44,6 @@ public: | @@ -44,9 +44,6 @@ public: | ||
| 44 | GFilename(const char* filename); | 44 | GFilename(const char* filename); |
| 45 | virtual ~GFilename(void); | 45 | virtual ~GFilename(void); |
| 46 | 46 | ||
| 47 | - // Operators | ||
| 48 | - const std::string& operator()(void) const; | ||
| 49 | - | ||
| 50 | // Methods | 47 | // Methods |
| 51 | void clear(void); | 48 | void clear(void); |
| 52 | GFilename* clone(void) const; | 49 | GFilename* clone(void) const; |
src/fits/GFits.cpp
| @@ -1017,19 +1017,19 @@ void GFits::open(const GFilename& filename, const bool& create) | @@ -1017,19 +1017,19 @@ void GFits::open(const GFilename& filename, const bool& create) | ||
| 1017 | m_hdu.clear(); | 1017 | m_hdu.clear(); |
| 1018 | 1018 | ||
| 1019 | // Expand environment variables | 1019 | // Expand environment variables |
| 1020 | - std::string fname(gammalib::expand_env(filename())); | 1020 | + //std::string fname(gammalib::expand_env(filename())); |
| 1021 | 1021 | ||
| 1022 | // Don't allow opening if a file is already open | 1022 | // Don't allow opening if a file is already open |
| 1023 | if (m_fitsfile != NULL) { | 1023 | if (m_fitsfile != NULL) { |
| 1024 | std::string msg; | 1024 | std::string msg; |
| 1025 | - if (m_filename.url() == GFilename(fname).url()) { | ||
| 1026 | - msg = "FITS file \""+m_filename.url()+"\" has already been " | 1025 | + if (m_filename == filename) { |
| 1026 | + msg = "FITS file \""+m_filename+"\" has already been " | ||
| 1027 | "opened, cannot open it again."; | 1027 | "opened, cannot open it again."; |
| 1028 | } | 1028 | } |
| 1029 | else { | 1029 | else { |
| 1030 | - msg = "A FITS file \""+m_filename.url()+"\" has already " | 1030 | + msg = "A FITS file \""+m_filename+"\" has already " |
| 1031 | "been opened, cannot open another FITS file \""+ | 1031 | "been opened, cannot open another FITS file \""+ |
| 1032 | - fname+"\" before closing the existing one."; | 1032 | + filename+"\" before closing the existing one."; |
| 1033 | } | 1033 | } |
| 1034 | throw GException::invalid_argument(G_OPEN, msg); | 1034 | throw GException::invalid_argument(G_OPEN, msg); |
| 1035 | } | 1035 | } |
| @@ -1040,12 +1040,12 @@ void GFits::open(const GFilename& filename, const bool& create) | @@ -1040,12 +1040,12 @@ void GFits::open(const GFilename& filename, const bool& create) | ||
| 1040 | 1040 | ||
| 1041 | // Try opening FITS file with readwrite access | 1041 | // Try opening FITS file with readwrite access |
| 1042 | int status = 0; | 1042 | int status = 0; |
| 1043 | - status = __ffopen(FHANDLE(m_fitsfile), fname.c_str(), 1, &status); | 1043 | + status = __ffopen(FHANDLE(m_fitsfile), filename.c_str(), 1, &status); |
| 1044 | 1044 | ||
| 1045 | // If failed then try opening as readonly | 1045 | // If failed then try opening as readonly |
| 1046 | if (status == 104 || status == 112) { | 1046 | if (status == 104 || status == 112) { |
| 1047 | status = 0; | 1047 | status = 0; |
| 1048 | - status = __ffopen(FHANDLE(m_fitsfile), fname.c_str(), 0, &status); | 1048 | + status = __ffopen(FHANDLE(m_fitsfile), filename.c_str(), 0, &status); |
| 1049 | m_readwrite = false; | 1049 | m_readwrite = false; |
| 1050 | } | 1050 | } |
| 1051 | 1051 | ||
| @@ -1053,7 +1053,7 @@ void GFits::open(const GFilename& filename, const bool& create) | @@ -1053,7 +1053,7 @@ void GFits::open(const GFilename& filename, const bool& create) | ||
| 1053 | // FITS file now | 1053 | // FITS file now |
| 1054 | if (create && status == 104) { | 1054 | if (create && status == 104) { |
| 1055 | status = 0; | 1055 | status = 0; |
| 1056 | - status = __ffinit(FHANDLE(m_fitsfile), fname.c_str(), &status); | 1056 | + status = __ffinit(FHANDLE(m_fitsfile), filename.c_str(), &status); |
| 1057 | m_readwrite = true; | 1057 | m_readwrite = true; |
| 1058 | m_created = true; | 1058 | m_created = true; |
| 1059 | } | 1059 | } |
| @@ -1061,17 +1061,17 @@ void GFits::open(const GFilename& filename, const bool& create) | @@ -1061,17 +1061,17 @@ void GFits::open(const GFilename& filename, const bool& create) | ||
| 1061 | // Throw special exception if status=202 (keyword not found). This error | 1061 | // Throw special exception if status=202 (keyword not found). This error |
| 1062 | // may occur if the file is opened with an expression | 1062 | // may occur if the file is opened with an expression |
| 1063 | if (status == 202) { | 1063 | if (status == 202) { |
| 1064 | - throw GException::fits_open_error(G_OPEN, fname, status, | 1064 | + throw GException::fits_open_error(G_OPEN, filename, status, |
| 1065 | "Keyword not found when opening file."); | 1065 | "Keyword not found when opening file."); |
| 1066 | } | 1066 | } |
| 1067 | 1067 | ||
| 1068 | // Throw any other error | 1068 | // Throw any other error |
| 1069 | else if (status != 0) { | 1069 | else if (status != 0) { |
| 1070 | - throw GException::fits_open_error(G_OPEN, fname, status); | 1070 | + throw GException::fits_open_error(G_OPEN, filename, status); |
| 1071 | } | 1071 | } |
| 1072 | 1072 | ||
| 1073 | // Store FITS file name as GFilename object | 1073 | // Store FITS file name as GFilename object |
| 1074 | - m_filename = GFilename(fname); | 1074 | + m_filename = filename; |
| 1075 | 1075 | ||
| 1076 | // Determine number of HDUs | 1076 | // Determine number of HDUs |
| 1077 | int num_hdu = 0; | 1077 | int num_hdu = 0; |
| @@ -1227,11 +1227,8 @@ void GFits::save(const bool& clobber) | @@ -1227,11 +1227,8 @@ void GFits::save(const bool& clobber) | ||
| 1227 | ***************************************************************************/ | 1227 | ***************************************************************************/ |
| 1228 | void GFits::saveto(const GFilename& filename, const bool& clobber) | 1228 | void GFits::saveto(const GFilename& filename, const bool& clobber) |
| 1229 | { | 1229 | { |
| 1230 | - // Expand environment variables | ||
| 1231 | - std::string fname = gammalib::expand_env(filename()); | ||
| 1232 | - | ||
| 1233 | // Create gzipped file name version | 1230 | // Create gzipped file name version |
| 1234 | - std::string gzfname = fname + ".gz"; | 1231 | + std::string gzfname = filename + ".gz"; |
| 1235 | 1232 | ||
| 1236 | // Debug header | 1233 | // Debug header |
| 1237 | #if defined(G_DEBUG) | 1234 | #if defined(G_DEBUG) |
| @@ -1243,8 +1240,8 @@ void GFits::saveto(const GFilename& filename, const bool& clobber) | @@ -1243,8 +1240,8 @@ void GFits::saveto(const GFilename& filename, const bool& clobber) | ||
| 1243 | // consider here also the possibility that the file is gzipped, but | 1240 | // consider here also the possibility that the file is gzipped, but |
| 1244 | // the file name does not contain the .gz extension. | 1241 | // the file name does not contain the .gz extension. |
| 1245 | if (clobber) { | 1242 | if (clobber) { |
| 1246 | - if (gammalib::file_exists(fname)) { | ||
| 1247 | - std::remove(fname.c_str()); | 1243 | + if (gammalib::file_exists(filename)) { |
| 1244 | + std::remove(filename.c_str()); | ||
| 1248 | } | 1245 | } |
| 1249 | else { | 1246 | else { |
| 1250 | if (gammalib::file_exists(gzfname)) { | 1247 | if (gammalib::file_exists(gzfname)) { |
| @@ -1254,25 +1251,24 @@ void GFits::saveto(const GFilename& filename, const bool& clobber) | @@ -1254,25 +1251,24 @@ void GFits::saveto(const GFilename& filename, const bool& clobber) | ||
| 1254 | } | 1251 | } |
| 1255 | 1252 | ||
| 1256 | // Otherwise, if file exists then throw an exception | 1253 | // Otherwise, if file exists then throw an exception |
| 1257 | - else if (gammalib::file_exists(fname) || | 1254 | + else if (gammalib::file_exists(filename) || |
| 1258 | gammalib::file_exists(gzfname)) { | 1255 | gammalib::file_exists(gzfname)) { |
| 1259 | - throw GException::fits_file_exist(G_SAVETO, fname); | 1256 | + throw GException::fits_file_exist(G_SAVETO, filename); |
| 1260 | } | 1257 | } |
| 1261 | 1258 | ||
| 1262 | // Create or open FITS file | 1259 | // Create or open FITS file |
| 1263 | - GFits new_fits; | ||
| 1264 | - new_fits.open(fname, true); | 1260 | + GFits fits(filename, true);; |
| 1265 | 1261 | ||
| 1266 | // Append all headers | 1262 | // Append all headers |
| 1267 | for (int i = 0; i < size(); ++i) { | 1263 | for (int i = 0; i < size(); ++i) { |
| 1268 | - new_fits.append(*m_hdu[i]); | 1264 | + fits.append(*m_hdu[i]); |
| 1269 | } | 1265 | } |
| 1270 | 1266 | ||
| 1271 | - // Save new FITS file | ||
| 1272 | - new_fits.save(); | 1267 | + // Save FITS file |
| 1268 | + fits.save(); | ||
| 1273 | 1269 | ||
| 1274 | - // Close new FITS file | ||
| 1275 | - new_fits.close(); | 1270 | + // Close FITS file |
| 1271 | + fits.close(); | ||
| 1276 | 1272 | ||
| 1277 | // Debug trailer | 1273 | // Debug trailer |
| 1278 | #if defined(G_DEBUG) | 1274 | #if defined(G_DEBUG) |
src/obs/GGti.cpp
| @@ -830,7 +830,7 @@ void GGti::write(GXmlElement& xml) const | @@ -830,7 +830,7 @@ void GGti::write(GXmlElement& xml) const | ||
| 830 | if (!m_xml_filename.is_empty()) { | 830 | if (!m_xml_filename.is_empty()) { |
| 831 | 831 | ||
| 832 | // Write "file" attribute | 832 | // Write "file" attribute |
| 833 | - par->attribute("file", m_xml_filename()); | 833 | + par->attribute("file", m_xml_filename); |
| 834 | 834 | ||
| 835 | // Write GTI file | 835 | // Write GTI file |
| 836 | save(m_xml_filename, true); | 836 | save(m_xml_filename, true); |
| @@ -1059,7 +1059,7 @@ std::string GGti::print(const GChatter& chatter) const | @@ -1059,7 +1059,7 @@ std::string GGti::print(const GChatter& chatter) const | ||
| 1059 | // Optionally append XML filename | 1059 | // Optionally append XML filename |
| 1060 | if (!m_xml_filename.is_empty()) { | 1060 | if (!m_xml_filename.is_empty()) { |
| 1061 | result.append("\n"+gammalib::parformat("File name")); | 1061 | result.append("\n"+gammalib::parformat("File name")); |
| 1062 | - result.append(m_xml_filename()); | 1062 | + result.append(m_xml_filename); |
| 1063 | } | 1063 | } |
| 1064 | 1064 | ||
| 1065 | } // endif: chatter was not silent | 1065 | } // endif: chatter was not silent |