Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
cStreamStack.h
Go to the documentation of this file.
1 //
4 //
5 
6 #ifndef _INC_cStreamStack_H
7 #define _INC_cStreamStack_H
8 #ifndef NO_PRAGMA_ONCE
9 #pragma once
10 #endif
11 
12 #include "cStreamQueue.h"
13 
14 namespace Gray
15 {
16  class GRAYCORE_LINK cStreamStackInp : public cStreamQueue // cStreamInput, protected cStreamStack
17  {
22  protected:
24 
25  protected:
26  HRESULT ReadFill();
27  HRESULT ReadFillAligned(size_t nSizeBlockAlign = 1);
28 
29  public:
30  cStreamStackInp(cStreamInput* pStreamInp = nullptr, size_t nSizeMaxBuffer = cStream::k_FILE_BLOCK_SIZE) noexcept
31  : cStreamQueue(MIN(nSizeMaxBuffer / 2, 8 * 1024), nSizeMaxBuffer) // chunk size, max size.
32  , m_pStreamInp(pStreamInp)
33  {
34  ASSERT(get_AutoReadCommit() > 0);
35  }
36 
37  virtual HRESULT ReadX(void* pData, size_t nDataSize) override = 0; // MUST be overridden. and call ReadFill() at some point.
38  };
39 
40  class GRAYCORE_LINK cStreamStackOut : public cStreamQueue // cStreamOutput, protected cStreamStack
41  {
47  protected:
49 
50  protected:
51  HRESULT WriteFlush();
52 
53  public:
54  cStreamStackOut(cStreamOutput* pStreamOut = nullptr, size_t nSizeBuffer = cStream::k_FILE_BLOCK_SIZE)
55  : cStreamQueue(8 * 1024, nSizeBuffer)
56  , m_pStreamOut(pStreamOut)
57  {
58  }
59 
60  virtual HRESULT WriteX(const void* pData, size_t nDataSize) override = 0; // cStreamOutput override calls WriteFlush() // MUST be overridden
61  };
62 
64  {
70 
71  public:
72  cStreamStackPackets(cStreamOutput* pStreamOut = nullptr, size_t nSizeBuffer = cStream::k_FILE_BLOCK_SIZE)
73  : cStreamStackOut(pStreamOut, nSizeBuffer)
74  {
75  }
76  virtual HRESULT WriteX(const void* pData, size_t nDataSize) override;
77  };
78 };
79 
80 #endif
#define GRAYCORE_LINK
Definition: GrayCore.h:47
#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
static const size_t k_FILE_BLOCK_SIZE
default arbitrary transfer block size. more than this is NOT more efficient.
Definition: cStream.h:89
Definition: cStream.h:306
Definition: cStream.h:126
Definition: cStreamQueue.h:19
Definition: cStreamStack.h:17
cStreamStackInp(cStreamInput *pStreamInp=nullptr, size_t nSizeMaxBuffer=cStream::k_FILE_BLOCK_SIZE) noexcept
Definition: cStreamStack.h:30
cStreamInput * m_pStreamInp
source input stream. called by ReadFill()
Definition: cStreamStack.h:23
virtual HRESULT ReadX(void *pData, size_t nDataSize) override=0
Definition: cStreamStack.h:41
cStreamOutput * m_pStreamOut
End result output stream. called by WriteFlush()
Definition: cStreamStack.h:48
virtual HRESULT WriteX(const void *pData, size_t nDataSize) override=0
cStreamStackOut(cStreamOutput *pStreamOut=nullptr, size_t nSizeBuffer=cStream::k_FILE_BLOCK_SIZE)
Definition: cStreamStack.h:54
Definition: cStreamStack.h:64
cStreamStackPackets(cStreamOutput *pStreamOut=nullptr, size_t nSizeBuffer=cStream::k_FILE_BLOCK_SIZE)
Definition: cStreamStack.h:72
< The main namespace for all Core functions.
Definition: GrayCore.cpp:14