HARDT - The Ham Radio DSP Toolkit
hfilewriter.h
1 #ifndef __HFILEWRITER_H
2 #define __HFILEWRITER_H
3 
4 #include <stdio.h>
5 #include <fstream>
6 
7 #include "hwriter.h"
8 #include "hwriterconsumer.h"
9 
13 template <class T>
14 class HFileWriter : public HWriter<T>
15 {
16  private:
17 
18  std::ofstream _stream;
19  const std::string _filename;
20  bool _seq;
21  int _seqCount;
22 
23  public:
24 
26  HFileWriter(const char* filename, bool sequence = false):
27  _filename(std::string(filename)),
28  _seq(sequence)
29  {}
30 
32  HFileWriter(const std::string filename, bool sequence = false):
33  _filename(filename),
34  _seq(sequence)
35  {}
36 
39  HFileWriter(const char* filename, HWriterConsumer<T>* consumer, bool sequence = false):
40  _filename(std::string(filename)),
41  _seq(sequence)
42  {
43  consumer->SetWriter(this);
44  }
45 
48  HFileWriter(const std::string filename, HWriterConsumer<T>* consumer, bool sequence = false):
49  _filename(filename),
50  _seq(sequence)
51  {
52  consumer->SetWriter(this);
53  }
54 
56  virtual int Write(T* src, size_t blocksize)
57  {
58  _stream.write((char*) src, blocksize * sizeof(T));
59  return blocksize;
60  }
61 
63  bool Start()
64  {
65  HLog("Trying to open stream for %s", _filename.c_str());
66  std::string fname;
67  if( _seq ) {
68  fname = std::to_string(_seqCount++) + "-" + _filename;
69  } else {
70  fname = _filename;
71  }
72  _stream.open(fname.c_str(), std::ios::out | std::ios::binary | std::ios::trunc);
73  if( !_stream.is_open())
74  {
75  HError("Failed to open file %s", _filename.c_str());
76  return false;
77  }
78  HLog("Stream is open");
79  return true;
80  }
81 
83  bool Stop()
84  {
85  HLog("Closing stream");
86  _stream.close();
87  return true;
88  }
89 
91  void Seek(int bytes)
92  {
93  _stream.seekp(bytes, std::ios::beg);
94  }
95 
97  bool Command(HCommand* command) {
98  // No ruther propagation of commands
99  return true;
100  }
101 };
102 
103 #endif
HFileWriter::HFileWriter
HFileWriter(const std::string filename, HWriterConsumer< T > *consumer, bool sequence=false)
Definition: hfilewriter.h:48
HFileWriter::Stop
bool Stop()
Definition: hfilewriter.h:83
HWriter
Definition: hwriter.h:10
HFileWriter::HFileWriter
HFileWriter(const char *filename, HWriterConsumer< T > *consumer, bool sequence=false)
Definition: hfilewriter.h:39
HWriterConsumer::SetWriter
virtual void SetWriter(HWriter< T > *writer)=0
HFileWriter::Seek
void Seek(int bytes)
Definition: hfilewriter.h:91
HFileWriter::Command
bool Command(HCommand *command)
Definition: hfilewriter.h:97
HFileWriter::HFileWriter
HFileWriter(const std::string filename, bool sequence=false)
Definition: hfilewriter.h:32
HFileWriter::Write
virtual int Write(T *src, size_t blocksize)
Definition: hfilewriter.h:56
HCommand
Definition: hcommand.h:81
HFileWriter::Start
bool Start()
Definition: hfilewriter.h:63
HFileWriter::HFileWriter
HFileWriter(const char *filename, bool sequence=false)
Definition: hfilewriter.h:26
HFileWriter
Definition: hfilewriter.h:14
HWriterConsumer
Definition: hwriterconsumer.h:8