-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSelect.h
More file actions
34 lines (27 loc) · 1.08 KB
/
Copy pathSelect.h
File metadata and controls
34 lines (27 loc) · 1.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#pragma once
#include <memory>
#include <functional>
#include <Emitter.h>
template<typename DataT, typename OutDataT>
class SelectEmitter : public Emitter<OutDataT> {
public:
SelectEmitter(const Emitter<DataT>* emitter,
std::function<OutDataT( const DataT )> filter):
emitter(std::move(emitter->Copy())),
filter(filter)
{}
SelectEmitter(const SelectEmitter& emitter):
emitter(std::move(emitter.emitter->CopyState())),
filter(emitter.filter)
{}
virtual const OutDataT EmitNext() override { return filter(emitter->EmitNext()); }
virtual bool Ended() override { return emitter->Ended(); }
virtual void Reset() override { emitter->Reset(); }
virtual std::unique_ptr<Emitter<OutDataT>> Copy() const override
{ return std::make_unique<SelectEmitter>(emitter.get(), filter); }
virtual std::unique_ptr<Emitter<OutDataT>> CopyState() const override
{ return std::make_unique<SelectEmitter>(*this); }
private:
std::unique_ptr< Emitter<DataT> > emitter;
std::function<OutDataT( const DataT )> filter;
};