HOPS
HOPS class reference
MHO_FileStreamer.hh
Go to the documentation of this file.
1 #ifndef MHO_FileStreamer_HH__
2 #define MHO_FileStreamer_HH__
3 
4 #include "MHO_Message.hh"
5 #include <fstream>
6 #include <string>
7 
8 namespace hops
9 {
10 
23 {
24  public:
26  {
27  fFileState = FileState::undefined;
28  fObjectState = ObjectState::unset;
29  //fBufferSize = 64*1024; ///64KB chunk
30  fBufferSize = 2 * 1024 * 1024;
31  fBuffer = new char[fBufferSize];
32  };
33 
34  virtual ~MHO_FileStreamer() { delete[] fBuffer; };
35 
41  void SetFilename(const std::string filename)
42  {
43  fFilename = filename;
44  fFileState = FileState::undefined;
45  }
46 
52  std::string GetFilename() { return fFilename; };
53 
58  virtual void OpenToRead() = 0;
59 
64  virtual void OpenToAppend() = 0;
65 
70  virtual void OpenToWrite() = 0;
71 
76  virtual void Close() = 0;
77 
84  virtual bool IsOpenForWrite()
85  {
86  if(fFileState == FileState::writeable)
87  {
88  return true;
89  }
90  return false;
91  }
92 
99  virtual bool IsOpenForRead()
100  {
101  if(fFileState == FileState::readable)
102  {
103  return true;
104  }
105  return false;
106  }
107 
114  virtual bool IsClosed()
115  {
116  if(fFileState == FileState::closed)
117  {
118  return true;
119  }
120  return false;
121  }
122 
123 
130  virtual void SetObjectUnknown() { fObjectState = ObjectState::unknown; }
131 
136  virtual void ResetObjectState() { fObjectState = ObjectState::unset; };
137 
144  virtual bool IsObjectUnknown() { return (fObjectState == ObjectState::unknown); };
145 
152  virtual void SkipAhead(size_t n_bytes)
153  {
154  msg_debug("file", "Seeking ahead by " << n_bytes << " bytes." << eom);
155  if(fFileState == FileState::readable)
156  {
157  //fFile.ignore(n_bytes);
158  fObjectState = ObjectState::unset;
159  fFile.seekg(n_bytes, std::ios_base::cur);
160  }
161  }
162 
169  virtual std::fstream& GetStream() { return fFile; }
170 
177  virtual const std::fstream& GetStream() const { return fFile; }
178 
179  protected:
181  {
185  undefined
186  };
187 
189  {
191  unknown
192  };
193 
194  std::string fFilename;
195  std::fstream fFile;
198 
199  std::streamsize fBufferSize;
200  char* fBuffer;
201 };
202 
206 template< typename XStreamType > struct MHO_ObjectStreamState
207 {
208  //default behavior on an unknown XStreamType is to doing nothing
215  static void SetUnknown(XStreamType& ){};
222  static void Reset(XStreamType& ){};
223 };
224 
225 //NOTE: the use of the keyword 'inline' is necessary for the template specializations
226 //to satsify the C++ ODR, otherwise you will get a multiple-def error on linking
227 
235 {
236  s.SetObjectUnknown();
237 }
238 
246 {
247  s.ResetObjectState();
248 }
249 
250 } // namespace hops
251 
252 #endif
#define msg_debug(xKEY, xCONTENT)
Definition: MHO_Message.hh:297
Class MHO_FileStreamer.
Definition: MHO_FileStreamer.hh:23
char * fBuffer
Definition: MHO_FileStreamer.hh:200
std::string GetFilename()
Getter for filename.
Definition: MHO_FileStreamer.hh:52
virtual void OpenToRead()=0
Function OpenToRead - let derived class specify the exact handling of file.
ObjectState fObjectState
Definition: MHO_FileStreamer.hh:197
virtual const std::fstream & GetStream() const
Getter for stream.
Definition: MHO_FileStreamer.hh:177
MHO_FileStreamer()
Definition: MHO_FileStreamer.hh:25
virtual void SetObjectUnknown()
Setter for object state - if an unrecognized object is encountered in streaming, flag this object by ...
Definition: MHO_FileStreamer.hh:130
virtual std::fstream & GetStream()
Getter for stream.
Definition: MHO_FileStreamer.hh:169
virtual bool IsOpenForRead()
Checks if a file is open for reading.
Definition: MHO_FileStreamer.hh:99
virtual void ResetObjectState()
Resets the object state to unset.
Definition: MHO_FileStreamer.hh:136
std::fstream fFile
Definition: MHO_FileStreamer.hh:195
FileState
Definition: MHO_FileStreamer.hh:181
@ undefined
Definition: MHO_FileStreamer.hh:185
@ writeable
Definition: MHO_FileStreamer.hh:182
@ readable
Definition: MHO_FileStreamer.hh:183
@ closed
Definition: MHO_FileStreamer.hh:184
virtual void Close()=0
Checks if file is closed.
virtual ~MHO_FileStreamer()
Definition: MHO_FileStreamer.hh:34
virtual bool IsClosed()
Checks if the file is closed.
Definition: MHO_FileStreamer.hh:114
void SetFilename(const std::string filename)
Setter for filename.
Definition: MHO_FileStreamer.hh:41
std::streamsize fBufferSize
Definition: MHO_FileStreamer.hh:199
virtual void OpenToAppend()=0
Function OpenToAppend.
virtual bool IsObjectUnknown()
Checks if object state is unknown.
Definition: MHO_FileStreamer.hh:144
ObjectState
Definition: MHO_FileStreamer.hh:189
@ unknown
Definition: MHO_FileStreamer.hh:191
@ unset
Definition: MHO_FileStreamer.hh:190
virtual void SkipAhead(size_t n_bytes)
Seeks ahead in file by specified number of bytes and updates object state.
Definition: MHO_FileStreamer.hh:152
virtual bool IsOpenForWrite()
Checks if file is open for writing.
Definition: MHO_FileStreamer.hh:84
virtual void OpenToWrite()=0
Function OpenToWrite.
std::string fFilename
Definition: MHO_FileStreamer.hh:194
FileState fFileState
Definition: MHO_FileStreamer.hh:196
Definition: MHO_ChannelLabeler.hh:17
Class MHO_ObjectStreamState.
Definition: MHO_FileStreamer.hh:207
static void Reset(XStreamType &)
Resets the state of the XStreamType object to unset.
Definition: MHO_FileStreamer.hh:222
static void SetUnknown(XStreamType &)
Setter for unknown.
Definition: MHO_FileStreamer.hh:215