Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
cFileMem.h
Go to the documentation of this file.
1 //
4 //
5 
6 #ifndef _INC_cFileMem_H
7 #define _INC_cFileMem_H
8 #ifndef NO_PRAGMA_ONCE
9 #pragma once
10 #endif
11 
12 #include "../GrayLibBase.h"
13 #include "GrayCore/include/cFile.h"
14 
15 namespace GrayLib
16 {
17  class GRAYLIB_LINK cFileMem : public cFile
18  {
22  // Does NOT use cOSHandle. So NOT inter-process.
23 
24  typedef cFile SUPER_t;
25 
26  private:
27  BYTE* m_pDataStart;
28  size_t m_nDataLength;
29  cHeapBlock m_Data;
30  size_t m_nPosition;
31 
32  public:
33  cFileMem() noexcept
34  : m_pDataStart(nullptr)
35  , m_nDataLength(0)
36  , m_nPosition(0) // current read/write position
37  {
38  }
39  virtual ~cFileMem()
40  {
41  }
42 
43  virtual bool isFileOpen() const override
44  {
45  return(m_pDataStart != nullptr);
46  }
47  virtual HRESULT OpenX(cStringF sFilePath = "", OF_FLAGS_t nOpenFlags = OF_READ | OF_SHARE_DENY_NONE) override
48  {
50  HRESULT hRes = OpenSetup(sFilePath, nOpenFlags);
51  m_nPosition = 0;
52  return hRes;
53  }
54  virtual STREAM_SEEKRET_t Seek(STREAM_OFFSET_t lOffset = 0, SEEK_ORIGIN_TYPE eSeekOrigin = SEEK_Set) override
55  {
56  switch (eSeekOrigin)
57  {
58  default:
59  case SEEK_Set: // FILE_BEGIN = SEEK_Set
60  m_nPosition = lOffset;
61  break;
62  case SEEK_Cur: // FILE_CURRENT = SEEK_CUR
63  m_nPosition += lOffset;
64  break;
65  case SEEK_End: // FILE_END
66  m_nPosition = m_nDataLength + lOffset;
67  break;
68  }
69  return m_nPosition;
70  }
71  virtual STREAM_POS_t GetPosition() const override
72  {
73  return m_nPosition;
74  }
75  virtual STREAM_POS_t GetLength() const override
76  {
77  return m_nDataLength;
78  }
79 
80  bool isLengthStatic() const noexcept
81  {
83  return(m_nDataLength != 0 && !m_Data.isValidPtr());
84  }
85 
86  virtual void SetLength(STREAM_SEEKRET_t dwNewLen) override
87  {
89  if (isLengthStatic())
90  {
91  ASSERT(0);
92  return;
93  }
94  m_nDataLength = dwNewLen;
95  m_Data.ReAlloc(dwNewLen);
96  m_pDataStart = m_Data.get_DataBytes();
97  }
98 
99  virtual HRESULT ReadX(void* pData, size_t nDataSize) override;
100  virtual HRESULT WriteX(const void* pData, size_t nDataSize) override;
101 
102  void SetDataStatic(void* pDataStart, size_t nDataSize)
103  {
105  m_pDataStart = (BYTE*)pDataStart;
106  m_nDataLength = nDataSize;
107  m_Data.Free();
108  ASSERT(isLengthStatic());
109  }
110  void SetDataStr(const char* pszData)
111  {
112  SetDataStatic((BYTE*)pszData, StrT::Len(pszData));
113  }
114  void SetDataStr(const char* pszData, StrLen_t nDataChars)
115  {
116  nDataChars = MIN(StrT::Len(pszData), nDataChars);
117  SetDataStatic((BYTE*)pszData, nDataChars);
118  }
119  void SetDataCopy(const BYTE* pDataStart, size_t nDataSize)
120  {
121  SetLength(nDataSize);
122  memcpy(m_pDataStart, pDataStart, nDataSize);
123  }
124 
126  };
127 };
128 #endif
#define GRAYLIB_LINK
Definition: GrayLibBase.h:35
#define MIN(a, b)
Definition: SysTypes.h:457
INT32 HRESULT
_WIN32 style error codes. INT32
Definition: SysTypes.h:465
#define ASSERT(exp)
Definition: cDebugAssert.h:87
Definition: cFileMem.h:18
void SetDataStr(const char *pszData, StrLen_t nDataChars)
Definition: cFileMem.h:114
virtual HRESULT OpenX(cStringF sFilePath="", OF_FLAGS_t nOpenFlags=OF_READ|OF_SHARE_DENY_NONE) override
Definition: cFileMem.h:47
virtual bool isFileOpen() const override
Definition: cFileMem.h:43
bool isLengthStatic() const noexcept
Definition: cFileMem.h:80
virtual STREAM_SEEKRET_t Seek(STREAM_OFFSET_t lOffset=0, SEEK_ORIGIN_TYPE eSeekOrigin=SEEK_Set) override
Definition: cFileMem.h:54
UNITTEST_FRIEND(cFileMem)
void SetDataCopy(const BYTE *pDataStart, size_t nDataSize)
Definition: cFileMem.h:119
virtual void SetLength(STREAM_SEEKRET_t dwNewLen) override
Definition: cFileMem.h:86
virtual ~cFileMem()
Definition: cFileMem.h:39
virtual STREAM_POS_t GetLength() const override
Definition: cFileMem.h:75
cFileMem() noexcept
Definition: cFileMem.h:33
virtual STREAM_POS_t GetPosition() const override
Definition: cFileMem.h:71
void SetDataStr(const char *pszData)
Definition: cFileMem.h:110
void SetDataStatic(void *pDataStart, size_t nDataSize)
Definition: cFileMem.h:102
Definition: cFile.h:84
Definition: cFile.h:137
Definition: cHeap.h:156
BYTE * get_DataBytes() const noexcept
Definition: cHeap.h:372
void Free()
Definition: cHeap.h:249
bool ReAlloc(size_t nSize)
Definition: cHeap.h:313
bool isValidPtr() const noexcept
Definition: cMem.h:371
Definition: cMesh.h:22
LONG_PTR STREAM_OFFSET_t
Might be 64 or 32 bit. TODO SET USE_FILE_POS64.
Definition: cOSHandle.h:52
int StrLen_t
the length of a string in chars (bytes for UTF8, wchar_t for UNICODE). or offset in characters....
Definition: StrConst.h:32
UINT32 OF_FLAGS_t
Mask of file open flags OF_FLAGS_TYPE_.
Definition: cFile.h:77
LONG_PTR STREAM_SEEKRET_t
return from Seek()
Definition: cOSHandle.h:53
ULONG_PTR STREAM_POS_t
NOT same as FILE_SIZE_t in 32 bit. Why not ?
Definition: cOSHandle.h:54
SEEK_ORIGIN_TYPE
Definition: cOSHandle.h:34
@ SEEK_End
SEEK_END = FILE_END = STREAM_SEEK_END = 2 = relative to the end of the file.
Definition: cOSHandle.h:41
@ SEEK_Set
SEEK_SET = FILE_BEGIN = STREAM_SEEK_SET = 0 = relative to the start of the file.
Definition: cOSHandle.h:39
@ SEEK_Cur
SEEK_CUR = FILE_CURRENT = STREAM_SEEK_CUR = 1 = relative to the current position.
Definition: cOSHandle.h:40
static StrLen_t Len(const TYPE *pszStr) noexcept