HARDT - The Ham Radio DSP Toolkit
houtput.h
1 #ifndef __HOUTPUT_H
2 #define __HOUTPUT_H
3 
4 #include <functional>
5 
26 template <class T, class O>
27 class HOutput : public HChunkWriter<T>, public HWriterConsumer<O>
28 {
29  private:
30 
31  std::function<void(O*, size_t)> _bufferReady;
32  std::function<void(O)> _valueReady;
33  std::function<void()> _ready;
34  HWriter<O>* _writer;
35 
36  public:
37 
39  void Ready(O* buffer, size_t blocksize)
40  {
41  if( _bufferReady != NULL )
42  {
43  _bufferReady(buffer, blocksize);
44  }
45  if( _writer != NULL )
46  {
47  _writer->Write(buffer, blocksize);
48  }
49  }
50 
52  void Ready(O value)
53  {
54  if( _valueReady != NULL )
55  {
56  _valueReady(value);
57  }
58  }
59 
61  void Ready()
62  {
63  if( _ready != NULL )
64  {
65  _ready();
66  }
67  }
68 
70  bool Start()
71  {
72  return _writer != NULL ?_writer->Start() : true;
73  }
74 
76  bool Stop()
77  {
78  return _writer != NULL ?_writer->Stop() : true;
79  }
80 
81  public:
82 
85  HChunkWriter<T>(),
86  _bufferReady(NULL),
87  _valueReady(NULL),
88  _ready(NULL),
89  _writer(NULL)
90  {
91  }
92 
95  HChunkWriter<T>(),
96  _bufferReady(NULL),
97  _valueReady(NULL),
98  _ready(NULL),
99  _writer(NULL)
100  {
101  consumer->SetWriter(this);
102  }
103 
105  HOutput(std::function<void(O*, size_t)> ready):
106  HChunkWriter<T>(),
107  _bufferReady(ready),
108  _valueReady(NULL),
109  _ready(NULL),
110  _writer(NULL)
111  {
112  }
113 
116  HOutput(std::function<void(O*, size_t)> ready, HWriterConsumer<T>* consumer):
117  HChunkWriter<T>(),
118  _bufferReady(ready),
119  _valueReady(NULL),
120  _ready(NULL),
121  _writer(NULL)
122  {
123  consumer->SetWriter(this);
124  }
125 
127  HOutput(std::function<void(O)> ready):
128  HChunkWriter<T>(),
129  _bufferReady(NULL),
130  _valueReady(ready),
131  _ready(NULL),
132  _writer(NULL)
133  {
134  }
135 
138  HOutput(std::function<void(O)> ready, HWriterConsumer<T>* consumer):
139  HChunkWriter<T>(),
140  _bufferReady(NULL),
141  _valueReady(ready),
142  _ready(NULL),
143  _writer(NULL)
144  {
145  consumer->SetWriter(this);
146  }
147 
149  HOutput(std::function<void()> ready):
150  HChunkWriter<T>(),
151  _bufferReady(NULL),
152  _valueReady(NULL),
153  _ready(ready),
154  _writer(NULL)
155  {
156  }
157 
160  HOutput(std::function<void()> ready, HWriterConsumer<T>* consumer):
161  HChunkWriter<T>(),
162  _bufferReady(NULL),
163  _valueReady(NULL),
164  _ready(ready),
165  _writer(NULL)
166  {
167  consumer->SetWriter(this);
168  }
169 
171  HOutput(HWriter<O>* writer):
172  HChunkWriter<T>(),
173  _bufferReady(NULL),
174  _valueReady(NULL),
175  _ready(NULL),
176  _writer(writer)
177  {
178  }
179 
181  HOutput(HWriter<O>* writer, HWriterConsumer<T>* consumer):
182  HChunkWriter<T>(),
183  _bufferReady(NULL),
184  _valueReady(NULL),
185  _ready(NULL),
186  _writer(writer)
187  {
188  consumer->SetWriter(this);
189  }
190 
192  HOutput(int chunksize):
193  HChunkWriter<T>(chunksize),
194  _bufferReady(NULL),
195  _valueReady(NULL),
196  _ready(NULL),
197  _writer(NULL)
198  {
199  }
200 
202  HOutput(int chunksize, HWriterConsumer<T>* consumer):
203  HChunkWriter<T>(chunksize),
204  _bufferReady(NULL),
205  _valueReady(NULL),
206  _ready(NULL),
207  _writer(NULL)
208  {
209  consumer->SetWriter(this);
210  }
211 
213  HOutput(std::function<void(O*, size_t)> ready, int chunksize):
214  HChunkWriter<T>(chunksize),
215  _bufferReady(ready),
216  _valueReady(NULL),
217  _ready(NULL),
218  _writer(NULL)
219  {
220  }
221 
224  HOutput(std::function<void(O*, size_t)> ready, int chunksize, HWriterConsumer<T>* consumer):
225  HChunkWriter<T>(chunksize),
226  _bufferReady(ready),
227  _valueReady(NULL),
228  _ready(NULL),
229  _writer(NULL)
230  {
231  consumer->SetWriter(this);
232  }
233 
235  HOutput(std::function<void(O)> ready, int chunksize):
236  HChunkWriter<T>(chunksize),
237  _bufferReady(NULL),
238  _valueReady(ready),
239  _ready(NULL),
240  _writer(NULL)
241  {
242  }
243 
246  HOutput(std::function<void(O)> ready, int chunksize, HWriterConsumer<T>* consumer):
247  HChunkWriter<T>(chunksize),
248  _bufferReady(NULL),
249  _valueReady(ready),
250  _ready(NULL),
251  _writer(NULL)
252  {
253  consumer->SetWriter(this);
254  }
255 
257  HOutput(std::function<void()> ready, int chunksize):
258  HChunkWriter<T>(chunksize),
259  _bufferReady(NULL),
260  _valueReady(NULL),
261  _ready(ready)
262  {
263  }
264 
267  HOutput(std::function<void()> ready, int chunksize, HWriterConsumer<T>* consumer):
268  HChunkWriter<T>(chunksize),
269  _bufferReady(NULL),
270  _valueReady(NULL),
271  _ready(ready)
272  {
273  consumer->SetWriter(this);
274  }
275 
277  HOutput(HWriter<O>* writer, int chunksize):
278  HChunkWriter<T>(chunksize),
279  _bufferReady(NULL),
280  _valueReady(NULL),
281  _ready(NULL),
282  _writer(writer)
283  {
284  }
285 
288  HOutput(HWriter<O>* writer, int chunksize, HWriterConsumer<T>* consumer):
289  HChunkWriter<T>(chunksize),
290  _bufferReady(NULL),
291  _valueReady(NULL),
292  _ready(NULL),
293  _writer(writer)
294  {
295  consumer->SetWriter(this);
296  }
297 
299  int WriteChunk(T* src, size_t blocksize)
300  {
301  return Output(src, blocksize);
302  }
303 
305  virtual int Output(T* src, size_t blocksize) = 0;
306 
308  void SetWriter(HWriter<O>* writer)
309  {
310  _writer = writer;
311  }
312 };
313 
314 #endif
HOutput::HOutput
HOutput(std::function< void(O *, size_t)> ready, HWriterConsumer< T > *consumer)
Definition: houtput.h:116
HOutput::Output
virtual int Output(T *src, size_t blocksize)=0
HOutput::HOutput
HOutput(std::function< void(O *, size_t)> ready)
Definition: houtput.h:105
HOutput::HOutput
HOutput(std::function< void(O *, size_t)> ready, int chunksize)
Definition: houtput.h:213
HOutput::HOutput
HOutput(int chunksize)
Definition: houtput.h:192
HOutput::HOutput
HOutput(HWriter< O > *writer)
Definition: houtput.h:171
HOutput::HOutput
HOutput(int chunksize, HWriterConsumer< T > *consumer)
Definition: houtput.h:202
HOutput::HOutput
HOutput(std::function< void(O)> ready, HWriterConsumer< T > *consumer)
Definition: houtput.h:138
HOutput::Stop
bool Stop()
Definition: houtput.h:76
HOutput::HOutput
HOutput(HWriter< O > *writer, int chunksize)
Definition: houtput.h:277
HOutput::Start
bool Start()
Definition: houtput.h:70
HOutput::Ready
void Ready(O value)
Definition: houtput.h:52
HWriter< O >
HOutput::Ready
void Ready()
Definition: houtput.h:61
HWriterConsumer::SetWriter
virtual void SetWriter(HWriter< T > *writer)=0
HWriter::Write
virtual int Write(T *src, size_t blocksize)=0
HOutput
Definition: houtput.h:27
HOutput::HOutput
HOutput(std::function< void(O *, size_t)> ready, int chunksize, HWriterConsumer< T > *consumer)
Definition: houtput.h:224
HOutput::HOutput
HOutput(HWriter< O > *writer, int chunksize, HWriterConsumer< T > *consumer)
Definition: houtput.h:288
HOutput::HOutput
HOutput(std::function< void()> ready, int chunksize, HWriterConsumer< T > *consumer)
Definition: houtput.h:267
HOutput::HOutput
HOutput(std::function< void(O)> ready, int chunksize, HWriterConsumer< T > *consumer)
Definition: houtput.h:246
HOutput::HOutput
HOutput(std::function< void()> ready, int chunksize)
Definition: houtput.h:257
HOutput::HOutput
HOutput(std::function< void(O)> ready, int chunksize)
Definition: houtput.h:235
HChunkWriter
Definition: hchunkwriter.h:12
HOutput::Ready
void Ready(O *buffer, size_t blocksize)
Definition: houtput.h:39
HWriter::Start
virtual bool Start()
Definition: hwriter.h:21
HOutput::WriteChunk
int WriteChunk(T *src, size_t blocksize)
Definition: houtput.h:299
HOutput::HOutput
HOutput(std::function< void(O)> ready)
Definition: houtput.h:127
HOutput::HOutput
HOutput(std::function< void()> ready)
Definition: houtput.h:149
HOutput::HOutput
HOutput(std::function< void()> ready, HWriterConsumer< T > *consumer)
Definition: houtput.h:160
HWriter::Stop
virtual bool Stop()
Definition: hwriter.h:27
HOutput::HOutput
HOutput(HWriter< O > *writer, HWriterConsumer< T > *consumer)
Definition: houtput.h:181
HOutput::HOutput
HOutput(HWriterConsumer< T > *consumer)
Definition: houtput.h:94
HWriterConsumer
Definition: hwriterconsumer.h:8
HOutput::SetWriter
void SetWriter(HWriter< O > *writer)
Definition: houtput.h:308
HOutput::HOutput
HOutput()
Definition: houtput.h:84