HARDT - The Ham Radio DSP Toolkit
hcustomwriter.h
1 #ifndef __HCUSTOMWRITER_H
2 #define __HCUSTOMWRITER_H
3 
4 #include <functional>
5 
24 template <class T>
25 class HCustomWriter : public HWriter<T>
26 {
27  private:
28 
29  std::function<int(T*, size_t)> _customWriteFunc;
30 
31  public:
32 
35  HCustomWriter(std::function<int(T*, size_t)> customWriteFunc):
36  _customWriteFunc(customWriteFunc)
37  {}
38 
42  HCustomWriter(std::function<int(T*, size_t)> customWriteFunc, HWriterConsumer<T>* consumer):
43  _customWriteFunc(customWriteFunc)
44  {
45  consumer->SetWriter(this);
46  }
47 
49  int Write(T* src, size_t blocksize)
50  {
51  return _customWriteFunc(src, blocksize);
52  }
53 
55  bool Start()
56  {
57  return true;
58  }
59 
61  bool Stop()
62  {
63  return true;
64  }
65 
68  static HCustomWriter<T>* Create(int(*customWriteFunc)(T*, size_t blocksize))
69  {
70  std::function<int(T*, size_t)> func = customWriteFunc;
71 
72  return new HCustomWriter<T>(func);
73  }
74 
77  static HCustomWriter<T>* Create(int(*customWriteFunc)(T*, size_t blocksize), HWriterConsumer<T>* consumer)
78  {
79  std::function<int(T*, size_t)> func = customWriteFunc;
80 
81  return new HCustomWriter<T>(func, consumer);
82  }
83 
86  template <typename F>
87  static HCustomWriter<T>* Create(F* customWriterObject, int (F::*customWriteFunc)(T*, size_t blocksize))
88  {
89  using std::placeholders::_1;
90  using std::placeholders::_2;
91  std::function<int(T*, size_t)> func = std::bind( customWriteFunc, customWriterObject, _1, _2);
92 
93  return new HCustomWriter<T>(func);
94  }
95 
98  template <typename F>
99  static HCustomWriter<T>* Create(F* customWriterObject, int (F::*customWriteFunc)(T*, size_t blocksize), HWriterConsumer<T>* consumer)
100  {
101  using std::placeholders::_1;
102  using std::placeholders::_2;
103  std::function<int(T*, size_t)> func = std::bind( customWriteFunc, customWriterObject, _1, _2);
104 
105  return new HCustomWriter<T>(func, consumer);
106  }
107 
108  bool Command(HCommand* command) {
109  // Terminates a command
110  return true;
111  }
112 };
113 
114 #endif
HCustomWriter::Write
int Write(T *src, size_t blocksize)
Definition: hcustomwriter.h:49
HCustomWriter::Stop
bool Stop()
Definition: hcustomwriter.h:61
HCustomWriter::HCustomWriter
HCustomWriter(std::function< int(T *, size_t)> customWriteFunc)
Definition: hcustomwriter.h:35
HCustomWriter::Create
static HCustomWriter< T > * Create(F *customWriterObject, int(F::*customWriteFunc)(T *, size_t blocksize), HWriterConsumer< T > *consumer)
Definition: hcustomwriter.h:99
HCustomWriter::Create
static HCustomWriter< T > * Create(F *customWriterObject, int(F::*customWriteFunc)(T *, size_t blocksize))
Definition: hcustomwriter.h:87
HCustomWriter
Definition: hcustomwriter.h:25
HWriter
Definition: hwriter.h:10
HWriterConsumer::SetWriter
virtual void SetWriter(HWriter< T > *writer)=0
HCustomWriter::HCustomWriter
HCustomWriter(std::function< int(T *, size_t)> customWriteFunc, HWriterConsumer< T > *consumer)
Definition: hcustomwriter.h:42
HCommand
Definition: hcommand.h:81
HCustomWriter::Create
static HCustomWriter< T > * Create(int(*customWriteFunc)(T *, size_t blocksize), HWriterConsumer< T > *consumer)
Definition: hcustomwriter.h:77
HCustomWriter::Start
bool Start()
Definition: hcustomwriter.h:55
HCustomWriter::Create
static HCustomWriter< T > * Create(int(*customWriteFunc)(T *, size_t blocksize))
Definition: hcustomwriter.h:68
HWriterConsumer
Definition: hwriterconsumer.h:8
HCustomWriter::Command
bool Command(HCommand *command)
Definition: hcustomwriter.h:108