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 
129  virtual void SetObjectUnknown() { fObjectState = ObjectState::unknown; }
130 
135  virtual void ResetObjectState() { fObjectState = ObjectState::unset; };
136 
143  virtual bool IsObjectUnknown() { return (fObjectState == ObjectState::unknown); };
144 
151  virtual void SkipAhead(size_t n_bytes)
152  {
153  msg_debug("file", "Seeking ahead by " << n_bytes << " bytes." << eom);
154  if(fFileState == FileState::readable)
155  {
156  //fFile.ignore(n_bytes);
157  fObjectState = ObjectState::unset;
158  fFile.seekg(n_bytes, std::ios_base::cur);
159  }
160  }
161 
168  virtual std::fstream& GetStream() { return fFile; }
169 
176  virtual const std::fstream& GetStream() const { return fFile; }
177 
178  protected:
180  {
184  undefined
185  };
186 
188  {
190  unknown
191  };
192 
193  std::string fFilename;
194  std::fstream fFile;
197 
198  std::streamsize fBufferSize;
199  char* fBuffer;
200 };
201 
205 template< typename XStreamType > struct MHO_ObjectStreamState
206 {
207  //default behavior on an unknown XStreamType is to doing nothing
214  static void SetUnknown(XStreamType& ){};
221  static void Reset(XStreamType& ){};
222 };
223 
224 //NOTE: the use of the keyword 'inline' is necessary for the template specializations
225 //to satsify the C++ ODR, otherwise you will get a multiple-def error on linking
226 
234 {
235  s.SetObjectUnknown();
236 }
237 
245 {
246  s.ResetObjectState();
247 }
248 
249 } // namespace hops
250 
251 #endif
#define msg_debug(xKEY, xCONTENT)
Definition: MHO_Message.hh:291
Class MHO_FileStreamer.
Definition: MHO_FileStreamer.hh:23
char * fBuffer
Definition: MHO_FileStreamer.hh:199
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:196
virtual const std::fstream & GetStream() const
Getter for stream.
Definition: MHO_FileStreamer.hh:176
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:129
virtual std::fstream & GetStream()
Getter for stream.
Definition: MHO_FileStreamer.hh:168
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:135
std::fstream fFile
Definition: MHO_FileStreamer.hh:194
FileState
Definition: MHO_FileStreamer.hh:180
@ undefined
Definition: MHO_FileStreamer.hh:184
@ writeable
Definition: MHO_FileStreamer.hh:181
@ readable
Definition: MHO_FileStreamer.hh:182
@ closed
Definition: MHO_FileStreamer.hh:183
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:198
virtual void OpenToAppend()=0
Function OpenToAppend.
virtual bool IsObjectUnknown()
Checks if object state is unknown.
Definition: MHO_FileStreamer.hh:143
ObjectState
Definition: MHO_FileStreamer.hh:188
@ unknown
Definition: MHO_FileStreamer.hh:190
@ unset
Definition: MHO_FileStreamer.hh:189
virtual void SkipAhead(size_t n_bytes)
Seeks ahead in file by specified number of bytes and updates object state.
Definition: MHO_FileStreamer.hh:151
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:193
FileState fFileState
Definition: MHO_FileStreamer.hh:195
Definition: MHO_AdhocFlagging.hh:18
Class MHO_ObjectStreamState.
Definition: MHO_FileStreamer.hh:206
static void Reset(XStreamType &)
Resets the state of the XStreamType object to unset.
Definition: MHO_FileStreamer.hh:221
static void SetUnknown(XStreamType &)
Setter for unknown.
Definition: MHO_FileStreamer.hh:214