SourceXtractorPlusPlus
0.13
Please provide a description of the project.
SEFramework
src
lib
FITS
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
29
#include "
ElementsKernel/Exception.h
"
30
31
#include "
SEFramework/FITS/FitsFile.h
"
32
33
#include "
SEFramework/FITS/FitsFileManager.h
"
34
35
namespace
SourceXtractor
{
36
37
std::shared_ptr<FitsFileManager>
FitsFileManager::s_instance
;
38
39
FitsFileManager::FitsFileManager
(
unsigned
int
max_open_files) : m_max_open_files(max_open_files) {
40
}
41
42
FitsFileManager::~FitsFileManager
() {
43
closeAllFiles
();
44
}
45
46
void
FitsFileManager::closeAllFiles
() {
47
for
(
auto
& file :
m_fits_files
) {
48
file.second->close();
49
}
50
}
51
52
std::shared_ptr<FitsFile>
FitsFileManager::getFitsFile
(
const
std::string
&
filename
,
bool
writeable) {
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
68
void
FitsFileManager::closeExtraFiles
() {
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
75
void
FitsFileManager::reportClosedFile
(
const
std::string
&
filename
) {
76
m_open_files
.
remove
(
filename
);
77
}
78
79
void
FitsFileManager::closeAndPurgeFile
(
const
std::string
&
filename
) {
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
88
void
FitsFileManager::reportOpenedFile
(
const
std::string
&
filename
) {
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
}
93
closeExtraFiles
();
94
}
95
96
97
}
SourceXtractor::FitsFileManager::~FitsFileManager
virtual ~FitsFileManager()
Definition:
FitsFileManager.cpp:42
std::string
STL class.
std::shared_ptr
STL class.
std::list::push_front
T push_front(T... args)
conf.filename
string filename
Definition:
conf.py:63
std::find
T find(T... args)
std::list::size
T size(T... args)
SourceXtractor::FitsFileManager::m_max_open_files
unsigned int m_max_open_files
Definition:
FitsFileManager.h:64
std::list::back
T back(T... args)
SourceXtractor::FitsFileManager::m_open_files
std::list< std::string > m_open_files
Definition:
FitsFileManager.h:65
SourceXtractor::FitsFile
represents access to a whole FITS file and handles loading and caching FITS headers
Definition:
FitsFile.h:44
SourceXtractor::FitsFileManager::closeExtraFiles
void closeExtraFiles()
Definition:
FitsFileManager.cpp:68
SourceXtractor::FitsFileManager::closeAndPurgeFile
void closeAndPurgeFile(const std::string &filename)
Definition:
FitsFileManager.cpp:79
SourceXtractor
Definition:
Aperture.h:30
std::enable_shared_from_this< FitsFileManager >::shared_from_this
T shared_from_this(T... args)
Exception.h
SourceXtractor::FitsFileManager::s_instance
static std::shared_ptr< FitsFileManager > s_instance
Definition:
FitsFileManager.h:67
SourceXtractor::FitsFileManager::closeAllFiles
void closeAllFiles()
Definition:
FitsFileManager.cpp:46
std::list::remove
T remove(T... args)
std::list::begin
T begin(T... args)
SourceXtractor::FitsFileManager::m_fits_files
std::unordered_map< std::string, std::shared_ptr< FitsFile > > m_fits_files
Definition:
FitsFileManager.h:62
SourceXtractor::FitsFileManager::reportOpenedFile
void reportOpenedFile(const std::string &filename)
Definition:
FitsFileManager.cpp:88
std::list::end
T end(T... args)
SourceXtractor::FitsFileManager::getFitsFile
std::shared_ptr< FitsFile > getFitsFile(const std::string &filename, bool writeable=false)
Definition:
FitsFileManager.cpp:52
FitsFile.h
FitsFileManager.h
SourceXtractor::FitsFileManager::FitsFileManager
FitsFileManager(unsigned int max_open_files=500)
Definition:
FitsFileManager.cpp:39
SourceXtractor::FitsFileManager::reportClosedFile
void reportClosedFile(const std::string &filename)
Definition:
FitsFileManager.cpp:75
Generated by
1.8.20