SourceXtractorPlusPlus
0.19
SourceXtractor++, the next generation SExtractor
SEMain
src
lib
Sorter.cpp
Go to the documentation of this file.
1
17
#include <
SEImplementation/Plugin/SourceIDs/SourceID.h
>
18
#include <algorithm>
19
#include "
SEMain/Sorter.h
"
20
21
namespace
SourceXtractor
{
22
23
static
unsigned
int
extractSourceId
(
const
SourceInterface
&i) {
24
return
i.
getProperty
<
SourceID
>().getId();
25
}
26
27
Sorter::Sorter
(): m_output_next{1} {
28
}
29
30
void
Sorter::receiveSource
(
std::unique_ptr<SourceGroupInterface>
message) {
31
std::vector<unsigned int>
source_ids(message->size());
32
std::transform
(message->cbegin(), message->cend(), source_ids.
begin
(),
extractSourceId
);
33
std::sort
(source_ids.
begin
(), source_ids.
end
());
34
35
auto
first_source_id = source_ids.
front
();
36
m_output_buffer
.emplace(first_source_id,
std::move
(message));
37
38
while
(!
m_output_buffer
.empty() &&
m_output_buffer
.begin()->first ==
m_output_next
) {
39
auto
&next_group =
m_output_buffer
.begin()->second;
40
m_output_next
+= next_group->size();
41
sendSource
(
std::move
(next_group));
42
m_output_buffer
.erase(
m_output_buffer
.begin());
43
}
44
}
45
void
Sorter::receiveProcessSignal
(
const
ProcessSourcesEvent
& event) {
46
sendProcessSignal
(event);
47
}
48
49
}
// end SourceXtractor
Sorter.h
SourceID.h
std::vector::begin
T begin(T... args)
SourceXtractor::PipelineEmitter< SourceGroupInterface >::sendProcessSignal
void sendProcessSignal(const ProcessSourcesEvent &event) const
Definition:
PipelineStage.h:92
SourceXtractor::PipelineEmitter< SourceGroupInterface >::sendSource
void sendSource(std::unique_ptr< SourceGroupInterface > source) const
Definition:
PipelineStage.h:85
SourceXtractor::Sorter::m_output_buffer
std::map< int, std::unique_ptr< SourceGroupInterface > > m_output_buffer
Definition:
Sorter.h:42
SourceXtractor::Sorter::Sorter
Sorter()
Definition:
Sorter.cpp:27
SourceXtractor::Sorter::receiveSource
void receiveSource(std::unique_ptr< SourceGroupInterface > source) override
Definition:
Sorter.cpp:30
SourceXtractor::Sorter::receiveProcessSignal
void receiveProcessSignal(const ProcessSourcesEvent &event) override
Definition:
Sorter.cpp:45
SourceXtractor::Sorter::m_output_next
int m_output_next
Definition:
Sorter.h:43
SourceXtractor::SourceID
Definition:
SourceID.h:33
SourceXtractor::SourceInterface
The SourceInterface is an abstract "source" that has properties attached to it.
Definition:
SourceInterface.h:46
SourceXtractor::SourceInterface::getProperty
const PropertyType & getProperty(unsigned int index=0) const
Convenience template method to call getProperty() with a more user-friendly syntax.
Definition:
SourceInterface.h:57
std::vector::end
T end(T... args)
std::vector::front
T front(T... args)
std::move
T move(T... args)
SourceXtractor
Definition:
Aperture.h:30
SourceXtractor::extractSourceId
static unsigned int extractSourceId(const SourceInterface &i)
Definition:
Sorter.cpp:23
std::sort
T sort(T... args)
SourceXtractor::ProcessSourcesEvent
Event received by SourceGrouping to request the processing of some of the Sources stored.
Definition:
PipelineStage.h:33
std::transform
T transform(T... args)
std::unique_ptr
std::vector< unsigned int >
Generated by
1.9.1