SourceXtractorPlusPlus  0.13
Please provide a description of the project.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
FitsFileManager.cpp
Go to the documentation of this file.
1 
17 /*
18  * FitsFileManager.cpp
19  *
20  * Created on: Sep 19, 2019
21  * Author: mschefer
22  */
23 
24 #include <iostream>
25 #include <algorithm>
26 
27 #include <assert.h>
28 
30 
32 
34 
35 namespace SourceXtractor {
36 
38 
39 FitsFileManager::FitsFileManager(unsigned int max_open_files) : m_max_open_files(max_open_files) {
40 }
41 
43  closeAllFiles();
44 }
45 
47  for (auto& file : m_fits_files) {
48  file.second->close();
49  }
50 }
51 
53  if (m_fits_files.find(filename) != m_fits_files.end()) {
54  auto fits_file = m_fits_files.at(filename);
55  if (writeable) {
56  fits_file->setWriteMode();
57  }
58 
59  return fits_file;
60  } else {
61  auto new_fits_file = std::shared_ptr<FitsFile>(new FitsFile(filename, writeable, shared_from_this()));
62  m_fits_files[filename] = new_fits_file;
63  return new_fits_file;
64  }
65 }
66 
67 
69  while (m_open_files.size() > m_max_open_files) {
70  auto& file_to_close = m_fits_files[m_open_files.back()];
71  file_to_close->close();
72  }
73 }
74 
76  m_open_files.remove(filename);
77 }
78 
80  auto it = m_fits_files.find(filename);
81  if (it != m_fits_files.end()) {
82  it->second->close();
83  m_fits_files.erase(filename);
84  }
85 }
86 
87 
89  auto iter = std::find(m_open_files.begin(), m_open_files.end(), filename);
90  if (iter == m_open_files.end()) {
91  m_open_files.push_front(filename);
92  }
94 }
95 
96 
97 }
std::shared_ptr< FitsFile > getFitsFile(const std::string &filename, bool writeable=false)
void reportClosedFile(const std::string &filename)
static std::shared_ptr< FitsFileManager > s_instance
STL class.
string filename
Definition: conf.py:63
represents access to a whole FITS file and handles loading and caching FITS headers ...
Definition: FitsFile.h:44
void closeAndPurgeFile(const std::string &filename)
std::list< std::string > m_open_files
T find(T...args)
void reportOpenedFile(const std::string &filename)
FitsFileManager(unsigned int max_open_files=500)
std::unordered_map< std::string, std::shared_ptr< FitsFile > > m_fits_files