SourceXtractorPlusPlus  0.15
Please provide a description of the project.
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 
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  {
39  m_segmentation_progress = progress;
40  }
42  }
43 
44 private:
48 };
49 
50 class ProgressMediator::SourceCounter : public Observer<std::shared_ptr<SourceInterface>> {
51 public:
52  SourceCounter(ProgressMediator& progress_listener, std::atomic_int& counter) :
53  m_progress_listener(progress_listener), m_counter(counter) {}
54 
56  ++m_counter;
58  }
59 
60 private:
62  std::atomic_int& m_counter;
63 };
64 
65 class ProgressMediator::GroupCounter : public Observer<std::shared_ptr<SourceGroupInterface>> {
66 public:
67  GroupCounter(ProgressMediator& progress_listener, std::atomic_int& counter) :
68  m_progress_listener(progress_listener), m_counter(counter) {}
69 
71  m_counter += group->size();
73  }
74 
75 private:
77  std::atomic_int& m_counter;
78 };
79 
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 
90 }
91 
93  return m_detection_listener;
94 }
95 
97  return m_deblending_listener;
98 }
99 
101  return m_measurement_listener;
102 }
103 
108  {"Detected", m_detected, -1},
109  {"Deblended", m_deblended, -1},
110  {"Measured", m_measured, m_deblended},
111  });
112 }
113 
117 }
118 
119 } // end SourceXtractor
void notifyObservers(const T &message) const
Definition: Observable.h:71
Observer interface to be used with Observable to implement the Observer pattern.
Definition: Observable.h:38
GroupCounter(ProgressMediator &progress_listener, std::atomic_int &counter)
void handleMessage(const std::shared_ptr< SourceGroupInterface > &group) override
void handleMessage(const SegmentationProgress &progress) override
ProgressCounter(ProgressMediator &progress_listener, SegmentationProgress &segmentation_progress, std::mutex &mutex)
SourceCounter(ProgressMediator &progress_listener, std::atomic_int &counter)
void handleMessage(const std::shared_ptr< SourceInterface > &) override
std::shared_ptr< segmentation_observer_t > m_segmentation_listener
SegmentationProgress m_segmentation_progress
std::shared_ptr< group_observer_t > m_measurement_listener
std::shared_ptr< group_observer_t > & getDeblendingObserver(void)
std::shared_ptr< group_observer_t > m_deblending_listener
std::shared_ptr< segmentation_observer_t > & getSegmentationObserver(void)
std::shared_ptr< source_observer_t > m_detection_listener
std::shared_ptr< source_observer_t > & getDetectionObserver(void)
std::shared_ptr< group_observer_t > & getMeasurementObserver(void)
T lock(T... args)
T make_shared(T... args)
STL namespace.
Used to notify observers of the progress of the processing of the image.
Definition: Segmentation.h:48