SourceXtractorPlusPlus
1.0.3
SourceXtractor++, the next generation SExtractor
Loading...
Searching...
No Matches
SEImplementation
src
lib
Grouping
SplitSourcesGrouping.cpp
Go to the documentation of this file.
1
17
18
#include "
SEImplementation/Grouping/SplitSourcesGrouping.h
"
19
#include "
SEImplementation/Property/SourceId.h
"
20
21
namespace
SourceXtractor
{
22
23
SplitSourcesGrouping::SplitSourcesGrouping
(
std::shared_ptr<SourceGroupFactory>
group_factory,
unsigned
int
hard_limit)
24
:
m_group_factory
(group_factory),
m_hard_limit
(hard_limit)
25
{
26
}
27
28
std::set<PropertyId>
SplitSourcesGrouping::requiredProperties
()
const
{
29
return
{};
30
}
31
33
void
SplitSourcesGrouping::receiveSource
(
std::unique_ptr<SourceInterface>
source) {
34
auto
source_id = source->getProperty<
SourceId
>().getDetectionId();
35
36
if
(
m_source_groups
.find(source_id) ==
m_source_groups
.end()) {
37
auto
new_group =
m_group_factory
->createSourceGroup();
38
m_source_groups
[source_id] =
std::move
(new_group);
39
}
40
41
if
(
m_hard_limit
> 0 &&
m_source_groups
.at(source_id)->size() >=
m_hard_limit
) {
42
// the stored group has reached the hard limit
43
// send the current group to processing
44
sendSource
(
std::move
(
m_source_groups
.at(source_id)));
45
46
// and replace it with a new empty one
47
auto
new_group =
m_group_factory
->createSourceGroup();
48
m_source_groups
[source_id] =
std::move
(new_group);
49
}
50
51
m_source_groups
.at(source_id)->addSource(
std::move
(source));
52
}
53
55
void
SplitSourcesGrouping::receiveProcessSignal
(
const
ProcessSourcesEvent
& event) {
56
std::vector<unsigned int>
groups_to_process;
57
58
// We iterate through all the SourceGroups we have
59
for
(
auto
const
& it :
m_source_groups
) {
60
// We look at its Sources and if we find at least one that needs to be processed
61
for
(
auto
& source : *it.second) {
62
if
(event.
m_selection_criteria
->mustBeProcessed(source)) {
63
groups_to_process.
push_back
(it.first);
64
break
;
65
}
66
}
67
}
68
69
// For each SourceGroup that we put in groups_to_process,
70
for
(
auto
group_id : groups_to_process) {
71
// we remove it from our list of stored SourceGroups and notify our observers
72
sendSource
(
std::move
(
m_source_groups
[group_id]));
73
m_source_groups
.erase(group_id);
74
}
75
}
76
77
}
// SourceXtractor namespace
78
SourceId.h
SplitSourcesGrouping.h
SourceXtractor::PipelineEmitter< SourceGroupInterface >::sendSource
void sendSource(std::unique_ptr< SourceGroupInterface > source) const
Definition
PipelineStage.h:85
SourceXtractor::SourceId
Definition
SourceId.h:32
SourceXtractor::SplitSourcesGrouping::m_hard_limit
unsigned int m_hard_limit
Definition
SplitSourcesGrouping.h:44
SourceXtractor::SplitSourcesGrouping::receiveProcessSignal
void receiveProcessSignal(const ProcessSourcesEvent &event) override
Handles a ProcessSourcesEvent to trigger the processing of some of the Sources stored in SourceGroupi...
Definition
SplitSourcesGrouping.cpp:55
SourceXtractor::SplitSourcesGrouping::m_group_factory
std::shared_ptr< SourceGroupFactory > m_group_factory
Definition
SplitSourcesGrouping.h:42
SourceXtractor::SplitSourcesGrouping::m_source_groups
std::map< unsigned int, std::unique_ptr< SourceGroupInterface > > m_source_groups
Definition
SplitSourcesGrouping.h:43
SourceXtractor::SplitSourcesGrouping::SplitSourcesGrouping
SplitSourcesGrouping(std::shared_ptr< SourceGroupFactory > group_factory, unsigned int hard_limit)
Definition
SplitSourcesGrouping.cpp:23
SourceXtractor::SplitSourcesGrouping::requiredProperties
std::set< PropertyId > requiredProperties() const override
Returns the set of required properties to compute the grouping.
Definition
SplitSourcesGrouping.cpp:28
SourceXtractor::SplitSourcesGrouping::receiveSource
void receiveSource(std::unique_ptr< SourceInterface > source) override
Handles a new Source.
Definition
SplitSourcesGrouping.cpp:33
std::move
T move(T... args)
SourceXtractor
Definition
Aperture.h:30
std::vector::push_back
T push_back(T... args)
std::set
std::shared_ptr
SourceXtractor::ProcessSourcesEvent
Event received by SourceGrouping to request the processing of some of the Sources stored.
Definition
PipelineStage.h:33
SourceXtractor::ProcessSourcesEvent::m_selection_criteria
const std::shared_ptr< SelectionCriteria > m_selection_criteria
Definition
PipelineStage.h:35
std::unique_ptr
std::vector
Generated by
1.14.0