Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
cStreamQueue.h
Go to the documentation of this file.
1 //
4 //
5 
6 #ifndef _INC_cStreamQueue_H
7 #define _INC_cStreamQueue_H
8 #ifndef NO_PRAGMA_ONCE
9 #pragma once
10 #endif
11 
12 #include "cStream.h"
13 #include "cQueue.h"
14 #include "HResult.h"
15 
16 namespace Gray
17 {
19  {
24 
25  typedef cQueueBytes SUPER_t;
26 
27  protected:
28  cStreamQueue(const cStreamQueue& a) noexcept
29  {
32  }
33 
34  public:
35  cStreamQueue(size_t nGrowSizeChunk = 4 * 1024, size_t nGrowSizeMax = cHeap::k_ALLOC_MAX) noexcept
36  : cQueueBytes(nGrowSizeChunk, nGrowSizeMax)
37  {
39  }
41  {
42  }
43 
44  virtual HRESULT WriteX(const void* pData, size_t nDataSize) override
45  {
46  return SUPER_t::WriteX(pData, nDataSize);
47  }
48  virtual HRESULT ReadX(void* pData, size_t nDataSize) override
49  {
50  return SUPER_t::ReadX(pData, nDataSize);
51  }
52  virtual HRESULT ReadPeek(void* pData, size_t nDataSize) override
53  {
54  return SUPER_t::ReadPeek((BYTE*)pData, (ITERATE_t)nDataSize);
55  }
56  virtual size_t SetSeekSizeMin(size_t nSizeMin = k_FILE_BLOCK_SIZE) override
57  {
61  ITERATE_t iAutoReadCommit = this->get_AutoReadCommit();
62  this->put_AutoReadCommit((ITERATE_t)nSizeMin);
63  return (size_t)iAutoReadCommit;
64  }
65  virtual STREAM_SEEKRET_t Seek(STREAM_OFFSET_t offset, SEEK_ORIGIN_TYPE eSeekOrigin = SEEK_Set) override
66  {
67  return SUPER_t::SeekQ(offset, eSeekOrigin);
68  }
69  virtual STREAM_POS_t GetLength() const override
70  {
72  return this->get_WriteIndex(); // get_ReadQty()
73  }
74  };
75 
76  class GRAYCORE_LINK cStreamStatic : public cStream, public cQueueRW < BYTE >
77  {
82 
83  typedef cQueueRW<BYTE> SUPER_t;
84  public:
85  explicit cStreamStatic()
86  : cQueueRW<BYTE>(nullptr, 0, 0, 0, 0)
87  {
90  }
91  explicit cStreamStatic(void* pData, size_t iDataMax, size_t iReadLast, size_t iWriteLast, size_t iAutoReadCommit = 0)
92  : cQueueRW<BYTE>((BYTE*)pData, (ITERATE_t)iDataMax, (ITERATE_t)iReadLast, (ITERATE_t)iWriteLast, (ITERATE_t)iAutoReadCommit)
93  {
95  }
96  explicit cStreamStatic(const void* pData, size_t iDataMax)
97  : cQueueRW<BYTE>((const BYTE*)pData, (ITERATE_t)iDataMax)
98  {
101  }
102  explicit cStreamStatic(const cMemBlock& m)
103  : cQueueRW<BYTE>((const BYTE*)m.get_DataBytes(), (ITERATE_t)m.get_DataSize())
104  {
107  }
109  {
112  }
114  {
115  }
116 
117  virtual size_t SetSeekSizeMin(size_t nSizeMin) override
118  {
119  UNREFERENCED_PARAMETER(nSizeMin);
120  return 0; // Indicate this does nothing.
121  }
122  virtual STREAM_SEEKRET_t Seek(STREAM_OFFSET_t offset, SEEK_ORIGIN_TYPE eSeekOrigin = SEEK_Set) override
123  {
124  return SUPER_t::SeekQ(offset, eSeekOrigin);
125  }
126  virtual STREAM_POS_t GetLength() const override
127  {
129  return SUPER_t::get_WriteIndex();
130  }
131 
132  virtual HRESULT WriteX(const void* pData, size_t nDataSize) override
133  {
134  return SUPER_t::WriteX(pData, nDataSize);
135  }
136  virtual HRESULT ReadX(void* pData, size_t nDataSize) override
137  {
138  return SUPER_t::ReadX(pData, nDataSize);
139  }
140  virtual HRESULT ReadPeek(void* pData, size_t nDataSize) override
141  {
142  return SUPER_t::ReadPeek((BYTE*)pData, (ITERATE_t)nDataSize);
143  }
144  };
145 
147  {
152  typedef cStreamStatic SUPER_t;
153  private:
154  char m_szVal[StrT::k_LEN_MAX];
155  public:
157  : cStreamStatic(m_szVal, STRMAX(m_szVal), 0, 0)
158  {
159  // Read/Write
160  m_szVal[0] = '\0';
161  }
163  {
164  return (StrLen_t)SUPER_t::get_WriteIndex();
165  }
166  char* ref_StrA()
167  {
168  // Terminate string.
169  StrLen_t nLen = get_StrLen();
170  m_szVal[nLen] = '\0';
171  return m_szVal;
172  }
173  operator char* ()
174  {
175  return ref_StrA();
176  }
177  };
178 }
179 
180 #endif // _INC_cStreamQueue_H
#define GRAYCORE_LINK
Definition: GrayCore.h:47
#define STRMAX(x)
Get Max size of static string space. minus the '\0' terminator character.
Definition: StrConst.h:33
#define UNREFERENCED_PARAMETER(P)
< _WIN32 type thing. get rid of stupid warning.
Definition: SysTypes.h:299
#define UNREFERENCED_REFERENCE(x)
Definition: SysTypes.h:318
INT32 HRESULT
_WIN32 style error codes. INT32
Definition: SysTypes.h:465
Definition: cMem.h:311
Definition: cQueue.h:730
Definition: cQueue.h:388
Definition: cQueue.h:293
Definition: cStreamQueue.h:19
virtual HRESULT ReadPeek(void *pData, size_t nDataSize) override
Definition: cStreamQueue.h:52
~cStreamQueue()
Definition: cStreamQueue.h:40
cStreamQueue(size_t nGrowSizeChunk=4 *1024, size_t nGrowSizeMax=cHeap::k_ALLOC_MAX) noexcept
Definition: cStreamQueue.h:35
virtual HRESULT WriteX(const void *pData, size_t nDataSize) override
Definition: cStreamQueue.h:44
virtual HRESULT ReadX(void *pData, size_t nDataSize) override
Definition: cStreamQueue.h:48
virtual STREAM_SEEKRET_t Seek(STREAM_OFFSET_t offset, SEEK_ORIGIN_TYPE eSeekOrigin=SEEK_Set) override
Disambiguate Seek for cStreamBase to cStreamInput for stupid compiler.
Definition: cStreamQueue.h:65
cStreamQueue(const cStreamQueue &a) noexcept
Definition: cStreamQueue.h:28
virtual size_t SetSeekSizeMin(size_t nSizeMin=k_FILE_BLOCK_SIZE) override
Definition: cStreamQueue.h:56
virtual STREAM_POS_t GetLength() const override
Definition: cStreamQueue.h:69
Definition: cStreamQueue.h:77
virtual HRESULT ReadX(void *pData, size_t nDataSize) override
Definition: cStreamQueue.h:136
virtual STREAM_POS_t GetLength() const override
Definition: cStreamQueue.h:126
virtual HRESULT ReadPeek(void *pData, size_t nDataSize) override
Definition: cStreamQueue.h:140
cStreamStatic(const cMemBlock &m)
Definition: cStreamQueue.h:102
virtual STREAM_SEEKRET_t Seek(STREAM_OFFSET_t offset, SEEK_ORIGIN_TYPE eSeekOrigin=SEEK_Set) override
Disambiguate Seek for cStreamBase to cStreamInput for stupid compiler.
Definition: cStreamQueue.h:122
cStreamStatic()
Definition: cStreamQueue.h:85
~cStreamStatic()
Definition: cStreamQueue.h:113
cStreamStatic(const void *pData, size_t iDataMax)
Definition: cStreamQueue.h:96
virtual HRESULT WriteX(const void *pData, size_t nDataSize) override
Definition: cStreamQueue.h:132
virtual size_t SetSeekSizeMin(size_t nSizeMin) override
Definition: cStreamQueue.h:117
cStreamStatic(const cStreamStatic &a)
Definition: cStreamQueue.h:108
cStreamStatic(void *pData, size_t iDataMax, size_t iReadLast, size_t iWriteLast, size_t iAutoReadCommit=0)
Definition: cStreamQueue.h:91
Definition: cStreamQueue.h:147
cStreamStringA()
Definition: cStreamQueue.h:156
StrLen_t get_StrLen() const
Definition: cStreamQueue.h:162
char * ref_StrA()
Definition: cStreamQueue.h:166
Definition: cStream.h:456
< The main namespace for all Core functions.
Definition: GrayCore.cpp:14
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
LONG_PTR STREAM_SEEKRET_t
return from Seek()
Definition: cOSHandle.h:53
int ITERATE_t
like size_t but signed
Definition: Index.h:28
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_Set
SEEK_SET = FILE_BEGIN = STREAM_SEEK_SET = 0 = relative to the start of the file.
Definition: cOSHandle.h:39
static const StrLen_t k_LEN_MAX
arbitrary max size for Format() etc. NOTE: _MSC_VER says stack frame should be at least 16384
Definition: StrT.h:75
static const size_t k_ALLOC_MAX
256 * 64K = (arbitrary) largest reasonable single malloc.
Definition: cHeap.h:45