SourceXtractorPlusPlus
0.21
SourceXtractor++, the next generation SExtractor
Loading...
Searching...
No Matches
SEMain
src
lib
ProgressMediator.cpp
Go to the documentation of this file.
1
17
/*
18
* Progress.cpp
19
*
20
* Created on: Sep 07, 2018
21
* Author: Alejandro Alvarez Ayllon
22
*/
23
24
#include "
SEMain/ProgressMediator.h
"
25
26
namespace
SourceXtractor
{
27
28
class
ProgressMediator::ProgressCounter
:
public
Observer
<SegmentationProgress> {
29
public
:
30
ProgressCounter
(
ProgressMediator
&
progress_listener
,
SegmentationProgress
&
segmentation_progress
,
31
std::mutex
&
mutex
) :
32
m_progress_listener
(
progress_listener
),
m_segmentation_progress
(
segmentation_progress
),
33
m_mutex
(
mutex
) {
34
}
35
36
void
handleMessage
(
const
SegmentationProgress
&
progress
)
override
{
37
{
38
std::lock_guard<std::mutex>
lock
(
m_mutex
);
39
m_segmentation_progress
=
progress
;
40
}
41
m_progress_listener
.
update
();
42
}
43
44
private
:
45
ProgressMediator
&
m_progress_listener
;
46
SegmentationProgress
&
m_segmentation_progress
;
47
std::mutex
&
m_mutex
;
48
};
49
50
class
ProgressMediator::SourceCounter
:
public
Observer
<SourceInterface> {
51
public
:
52
SourceCounter
(
ProgressMediator
&
progress_listener
,
std::atomic_int
&
counter
)
53
:
m_progress_listener
(
progress_listener
),
m_counter
(
counter
) {}
54
55
void
handleMessage
(
const
SourceInterface
&)
override
{
56
++
m_counter
;
57
m_progress_listener
.
update
();
58
}
59
60
private
:
61
ProgressMediator
&
m_progress_listener
;
62
std::atomic_int
&
m_counter
;
63
};
64
65
class
ProgressMediator::GroupCounter
:
public
Observer
<SourceGroupInterface> {
66
public
:
67
GroupCounter
(
ProgressMediator
&
progress_listener
,
std::atomic_int
&
counter
)
68
:
m_progress_listener
(
progress_listener
),
m_counter
(
counter
) {}
69
70
void
handleMessage
(
const
SourceGroupInterface
&
group
)
override
{
71
m_counter
+=
group
.size();
72
m_progress_listener
.
update
();
73
}
74
75
private
:
76
ProgressMediator
&
m_progress_listener
;
77
std::atomic_int
&
m_counter
;
78
};
79
80
ProgressMediator::ProgressMediator
() :
81
m_segmentation_progress{0, 0}, m_detected{0}, m_deblended{0}, m_measured{0},
82
m_segmentation_listener{
std
::
make_shared
<
ProgressCounter
>(*
this
, m_segmentation_progress, m_mutex)},
83
m_detection_listener{
std
::
make_shared
<
SourceCounter
>(*
this
, m_detected)},
84
m_deblending_listener{
std
::
make_shared
<
GroupCounter
>(*
this
, m_deblended)},
85
m_measurement_listener{
std
::
make_shared
<
GroupCounter
>(*
this
, m_measured)} {
86
}
87
88
std::shared_ptr<ProgressMediator::segmentation_observer_t>
&
ProgressMediator::getSegmentationObserver
() {
89
return
m_segmentation_listener
;
90
}
91
92
std::shared_ptr<ProgressMediator::source_observer_t>
&
ProgressMediator::getDetectionObserver
() {
93
return
m_detection_listener
;
94
}
95
96
std::shared_ptr<ProgressMediator::group_observer_t>
&
ProgressMediator::getDeblendingObserver
() {
97
return
m_deblending_listener
;
98
}
99
100
std::shared_ptr<ProgressMediator::group_observer_t>
&
ProgressMediator::getMeasurementObserver
() {
101
return
m_measurement_listener
;
102
}
103
104
void
ProgressMediator::update
(
void
) {
105
std::lock_guard<std::mutex>
guard
(
m_mutex
);
106
this->
ProgressObservable::notifyObservers
(
std::list<ProgressInfo>
{
107
{
"Segmentation"
,
m_segmentation_progress
.
position
,
m_segmentation_progress
.
total
},
108
{
"Detected"
,
m_detected
, -1},
109
{
"Deblended"
,
m_deblended
, -1},
110
{
"Measured"
,
m_measured
,
m_deblended
},
111
});
112
}
113
114
void
ProgressMediator::done
() {
115
std::lock_guard<std::mutex>
guard
(
m_mutex
);
116
this->
DoneObservable::notifyObservers
(
true
);
117
}
118
119
}
// end SourceXtractor
ProgressMediator.h
SourceXtractor::Observable::notifyObservers
void notifyObservers(const T &message) const
Definition
Observable.h:71
SourceXtractor::Observer
Observer interface to be used with Observable to implement the Observer pattern.
Definition
Observable.h:38
SourceXtractor::ProgressMediator::GroupCounter
Definition
ProgressMediator.cpp:65
SourceXtractor::ProgressMediator::GroupCounter::m_progress_listener
ProgressMediator & m_progress_listener
Definition
ProgressMediator.cpp:76
SourceXtractor::ProgressMediator::GroupCounter::handleMessage
void handleMessage(const SourceGroupInterface &group) override
Definition
ProgressMediator.cpp:70
SourceXtractor::ProgressMediator::GroupCounter::GroupCounter
GroupCounter(ProgressMediator &progress_listener, std::atomic_int &counter)
Definition
ProgressMediator.cpp:67
SourceXtractor::ProgressMediator::GroupCounter::m_counter
std::atomic_int & m_counter
Definition
ProgressMediator.cpp:77
SourceXtractor::ProgressMediator::ProgressCounter
Definition
ProgressMediator.cpp:28
SourceXtractor::ProgressMediator::ProgressCounter::handleMessage
void handleMessage(const SegmentationProgress &progress) override
Definition
ProgressMediator.cpp:36
SourceXtractor::ProgressMediator::ProgressCounter::ProgressCounter
ProgressCounter(ProgressMediator &progress_listener, SegmentationProgress &segmentation_progress, std::mutex &mutex)
Definition
ProgressMediator.cpp:30
SourceXtractor::ProgressMediator::ProgressCounter::m_progress_listener
ProgressMediator & m_progress_listener
Definition
ProgressMediator.cpp:45
SourceXtractor::ProgressMediator::ProgressCounter::m_segmentation_progress
SegmentationProgress & m_segmentation_progress
Definition
ProgressMediator.cpp:46
SourceXtractor::ProgressMediator::ProgressCounter::m_mutex
std::mutex & m_mutex
Definition
ProgressMediator.cpp:47
SourceXtractor::ProgressMediator::SourceCounter
Definition
ProgressMediator.cpp:50
SourceXtractor::ProgressMediator::SourceCounter::handleMessage
void handleMessage(const SourceInterface &) override
Definition
ProgressMediator.cpp:55
SourceXtractor::ProgressMediator::SourceCounter::SourceCounter
SourceCounter(ProgressMediator &progress_listener, std::atomic_int &counter)
Definition
ProgressMediator.cpp:52
SourceXtractor::ProgressMediator::SourceCounter::m_progress_listener
ProgressMediator & m_progress_listener
Definition
ProgressMediator.cpp:61
SourceXtractor::ProgressMediator::SourceCounter::m_counter
std::atomic_int & m_counter
Definition
ProgressMediator.cpp:62
SourceXtractor::ProgressMediator
Definition
ProgressMediator.h:51
SourceXtractor::ProgressMediator::m_segmentation_listener
std::shared_ptr< segmentation_observer_t > m_segmentation_listener
Definition
ProgressMediator.h:98
SourceXtractor::ProgressMediator::m_segmentation_progress
SegmentationProgress m_segmentation_progress
Definition
ProgressMediator.h:95
SourceXtractor::ProgressMediator::m_measurement_listener
std::shared_ptr< group_observer_t > m_measurement_listener
Definition
ProgressMediator.h:100
SourceXtractor::ProgressMediator::getDeblendingObserver
std::shared_ptr< group_observer_t > & getDeblendingObserver(void)
Definition
ProgressMediator.cpp:96
SourceXtractor::ProgressMediator::m_detected
std::atomic_int m_detected
Definition
ProgressMediator.h:96
SourceXtractor::ProgressMediator::done
void done()
Definition
ProgressMediator.cpp:114
SourceXtractor::ProgressMediator::m_mutex
std::mutex m_mutex
Definition
ProgressMediator.h:104
SourceXtractor::ProgressMediator::m_deblended
std::atomic_int m_deblended
Definition
ProgressMediator.h:96
SourceXtractor::ProgressMediator::ProgressMediator
ProgressMediator()
Definition
ProgressMediator.cpp:80
SourceXtractor::ProgressMediator::update
void update(void)
Definition
ProgressMediator.cpp:104
SourceXtractor::ProgressMediator::m_deblending_listener
std::shared_ptr< group_observer_t > m_deblending_listener
Definition
ProgressMediator.h:100
SourceXtractor::ProgressMediator::getSegmentationObserver
std::shared_ptr< segmentation_observer_t > & getSegmentationObserver(void)
Definition
ProgressMediator.cpp:88
SourceXtractor::ProgressMediator::m_measured
std::atomic_int m_measured
Definition
ProgressMediator.h:96
SourceXtractor::ProgressMediator::m_detection_listener
std::shared_ptr< source_observer_t > m_detection_listener
Definition
ProgressMediator.h:99
SourceXtractor::ProgressMediator::getDetectionObserver
std::shared_ptr< source_observer_t > & getDetectionObserver(void)
Definition
ProgressMediator.cpp:92
SourceXtractor::ProgressMediator::getMeasurementObserver
std::shared_ptr< group_observer_t > & getMeasurementObserver(void)
Definition
ProgressMediator.cpp:100
SourceXtractor::SourceGroupInterface
Defines the interface used to group sources.
Definition
SourceGroupInterface.h:38
SourceXtractor::SourceInterface
The SourceInterface is an abstract "source" that has properties attached to it.
Definition
SourceInterface.h:46
std::function
std::lock
T lock(T... args)
std::make_shared
T make_shared(T... args)
std::mutex
SourceXtractor
Definition
Aperture.h:30
std
STL namespace.
SourceXtractor::SegmentationProgress
Used to notify observers of the progress of the processing of the image.
Definition
Segmentation.h:43
SourceXtractor::SegmentationProgress::position
int position
Definition
Segmentation.h:44
SourceXtractor::SegmentationProgress::total
int total
Definition
Segmentation.h:44
Generated by
1.10.0