SourceXtractorPlusPlus  0.14
Please provide a description of the project.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
SourceGrouping.h
Go to the documentation of this file.
1 
23 #ifndef _SEFRAMEWORK_PIPELINE_SOURCEGROUPING_H
24 #define _SEFRAMEWORK_PIPELINE_SOURCEGROUPING_H
25 
26 #include <memory>
27 #include <list>
28 
29 #include "SEUtils/Observable.h"
30 
34 
35 namespace SourceXtractor {
36 
43 public:
47  virtual ~SelectionCriteria() = default;
48 
50  virtual bool mustBeProcessed(const SourceInterface& source) const = 0;
51 };
52 
59 public:
60  virtual bool mustBeProcessed(const SourceInterface& ) const override {
61  return true;
62  }
63 };
64 
65 
72 
73  const std::shared_ptr<SelectionCriteria> m_selection_criteria; // Used to identify the Sources to process
74 
76  : m_selection_criteria(selection_criteria) {}
77 };
78 
85 public:
89  virtual ~GroupingCriteria() = default;
90 
92  virtual bool shouldGroup(const SourceInterface& first, const SourceInterface& second) const = 0;
93 
95  virtual std::set<PropertyId> requiredProperties() const { return {}; }
96 };
97 
105 class SourceGrouping : public Observer<std::shared_ptr<SourceInterface>>,
106  public Observer<ProcessSourcesEvent>, public Observable<std::shared_ptr<SourceGroupInterface>> {
107 public:
108 
112  virtual ~SourceGrouping() = default;
113 
116 
118  virtual void handleMessage(const std::shared_ptr<SourceInterface>& source) override;
119 
121  virtual void handleMessage(const ProcessSourcesEvent& source) override;
122 
125 
126 private:
127 
131 
132 }; /* End of SourceGrouping class */
133 
134 
135 } /* namespace SourceXtractor */
136 
137 
138 #endif
std::shared_ptr< SourceGroupFactory > m_group_factory
virtual bool shouldGroup(const SourceInterface &first, const SourceInterface &second) const =0
Determines if the two sources should be grouped together.
const std::shared_ptr< SelectionCriteria > m_selection_criteria
virtual ~SourceGrouping()=default
Destructor.
constexpr double second
virtual void handleMessage(const std::shared_ptr< SourceInterface > &source) override
Handles a new Source.
Used to determine if a Source is selected for processing.
virtual bool mustBeProcessed(const SourceInterface &) const override
Determines if the given Source must be processed or not.
Event received by SourceGrouping to request the processing of some of the Sources stored...
virtual ~SelectionCriteria()=default
Destructor.
std::list< std::shared_ptr< SourceGroupInterface > > m_source_groups
Implements the Observer pattern. Notifications will be made using a message of type T...
Definition: Observable.h:51
SourceGrouping(std::shared_ptr< GroupingCriteria > grouping_criteria, std::shared_ptr< SourceGroupFactory > group_factory)
std::shared_ptr< GroupingCriteria > m_grouping_criteria
SourceGrouping takes Source, groups them together according to its GroupingCriteria and stores them...
STL class.
Criteria used by SourceGrouping to determine if two sources should be grouped together.
std::set< PropertyId > requiredProperties() const
Returns the set of required properties to compute the grouping.
STL class.
virtual bool mustBeProcessed(const SourceInterface &source) const =0
Determines if the given Source must be processed or not.
Observer interface to be used with Observable to implement the Observer pattern.
Definition: Observable.h:38
ProcessSourcesEvent(const std::shared_ptr< SelectionCriteria > &selection_criteria)
virtual ~GroupingCriteria()=default
Destructor.
The SourceInterface is an abstract &quot;source&quot; that has properties attached to it.
virtual std::set< PropertyId > requiredProperties() const
Return a set of used properties so they can be pre-fetched.
An implementation of SelectionCriteria that just marks all Sources as selected.