Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
Gray::cQueueDyn< TYPE > Class Template Reference

#include <cQueue.h>

Inheritance diagram for Gray::cQueueDyn< TYPE >:
Gray::cQueueRW< BYTE > Gray::cQueueRead< TYPE > Gray::cQueueBase

Public Member Functions

 cQueueDyn (ITERATE_t nGrowSizeChunk=128, ITERATE_t nGrowSizeMax=(cHeap::k_ALLOC_MAX/sizeof(TYPE))) noexcept
 
 ~cQueueDyn ()
 
void put_GrowSizeChunk (ITERATE_t nGrowSizeChunk) noexcept
 
ITERATE_t get_GrowSizeChunk () const noexcept
 
bool MakeWritePrepared (ITERATE_t iDesiredCount=1)
 
TYPEGetWritePrepared (ITERATE_t iDesiredCount=1)
 
bool WriteQ (TYPE val)
 
HRESULT WriteQty (const TYPE *pVal, ITERATE_t iCount)
 
void WriteQ (cQueueRead< BYTE > &queue)
 
HRESULT WriteX (const void *pData, size_t nDataSize)
 
- Public Member Functions inherited from Gray::cQueueRW< BYTE >
 cQueueRW () noexcept
 
 cQueueRW (BYTE *pData, ITERATE_t iDataAlloc, ITERATE_t iReadLast, ITERATE_t iWriteLast, ITERATE_t iAutoReadCommit=0)
 
 cQueueRW (const BYTE *pData, ITERATE_t iDataMax)
 
 ~cQueueRW ()
 
void ReadCommitCheck ()
 
ITERATE_t get_AutoReadCommit () const
 
void put_AutoReadCommit (ITERATE_t iAutoReadCommit=8 *1024)
 
void put_ReadIndex (ITERATE_t iReadLo)
 
STREAM_SEEKRET_t SeekQ (STREAM_OFFSET_t iOffset, SEEK_ORIGIN_TYPE eSeekOrigin=SEEK_Set)
 
HRESULT ReadQty (BYTE *pData, ITERATE_t iDataMaxQty)
 
HRESULT ReadX (void *pData, size_t nDataSize)
 
bool isFullQ () const
 
ITERATE_t get_WriteQty () const
 
BYTE * get_WritePtr () const
 
HRESULT WriteQty (const BYTE *pData, ITERATE_t iQtyMax)
 
HRESULT WriteX (const void *pData, size_t nDataSize)
 
void AdvanceWrite (ITERATE_t iCount=1)
 
- Public Member Functions inherited from Gray::cQueueRead< TYPE >
 cQueueRead (const TYPE *pData=nullptr, ITERATE_t iReadLast=0, ITERATE_t iWriteLast=0) noexcept
 
 ~cQueueRead ()
 
const TYPEget_ReadPtr () const
 
void SetQueueRead (const TYPE *pData, ITERATE_t iReadLast=0, ITERATE_t iWriteLast=0)
 
TYPE Read1 (void)
 
HRESULT ReadPeek (TYPE *pData, ITERATE_t iDataMaxQty)
 
HRESULT ReadQty (TYPE *pData, ITERATE_t iDataMaxQty)
 
void ReadCommitNow ()
 
- Public Member Functions inherited from Gray::cQueueBase
 cQueueBase (ITERATE_t iReadLast=0, ITERATE_t iWriteLast=0) noexcept
 
void InitQ (ITERATE_t iReadLast=0, ITERATE_t iWriteLast=0) noexcept
 
bool isEmptyQ () const noexcept
 
void EmptyQ () noexcept
 
ITERATE_t get_ReadIndex () const noexcept
 
ITERATE_t get_WriteIndex () const noexcept
 
ITERATE_t get_ReadQty () const
 
void AdvanceRead (ITERATE_t iCount=1)
 
STREAM_SEEKRET_t SeekQ (STREAM_OFFSET_t iOffset, SEEK_ORIGIN_TYPE eSeekOrigin=SEEK_Set)
 

Protected Member Functions

bool AllocSizeMaxQ (ITERATE_t iDataAlloc)
 
- Protected Member Functions inherited from Gray::cQueueRW< BYTE >
void WriteQN (const BYTE *pData, ITERATE_t iQtyMax)
 

Protected Attributes

ITERATE_t m_nGrowSizeChunk
 number of TYPE elements to grow by in a single re-alloc chunk. 0 = never grow. More...
 
ITERATE_t m_nGrowSizeMax
 Total arbitrary max allowed for m_iDataSizeAlloc. 0 = never grow. More...
 
- Protected Attributes inherited from Gray::cQueueRW< BYTE >
ITERATE_t m_iDataSizeAlloc
 The max qty we can write into m_pData. Maybe NOT exactly same as m_pData true OS allocated size? More...
 
ITERATE_t m_iAutoReadCommit
 Read data is destroyed once read more than this amount. make more room for writing. 0 = don't do this, just fail write if we run out of space. More...
 
- Protected Attributes inherited from Gray::cQueueRead< TYPE >
TYPEm_pData
 NOT owned/managed block of memory I read from. not freed on destruct. More...
 
- Protected Attributes inherited from Gray::cQueueBase
ITERATE_t m_iReadLast
 old items removed/read from here. More...
 
ITERATE_t m_iWriteLast
 new items added/written here. end of read. More...
 

Detailed Description

template<class TYPE = BYTE>
class Gray::cQueueDyn< TYPE >

Create a generic (dynamic sized) contiguous queue. Does NOT wrap! just grows as more is written.

Note
Needs to EmptyQ() or AutoReadCommit() periodically so it doesn't grow > nGrowSizeMax and FAIL! free on destruct.

Constructor & Destructor Documentation

◆ cQueueDyn()

template<class TYPE = BYTE>
Gray::cQueueDyn< TYPE >::cQueueDyn ( ITERATE_t  nGrowSizeChunk = 128,
ITERATE_t  nGrowSizeMax = (cHeap::k_ALLOC_MAX / sizeof(TYPE)) 
)
inlinenoexcept
  • nGrowSizeMax = 0 = not used. write only ?

◆ ~cQueueDyn()

template<class TYPE = BYTE>
Gray::cQueueDyn< TYPE >::~cQueueDyn ( )
inline

m_aData is freed

Member Function Documentation

◆ AllocSizeMaxQ()

template<class TYPE = BYTE>
bool Gray::cQueueDyn< TYPE >::AllocSizeMaxQ ( ITERATE_t  iDataAlloc)
inlineprotected

(re)Allocate the total size we will need.

◆ get_GrowSizeChunk()

template<class TYPE = BYTE>
ITERATE_t Gray::cQueueDyn< TYPE >::get_GrowSizeChunk ( ) const
inlinenoexcept

◆ GetWritePrepared()

template<class TYPE = BYTE>
TYPE* Gray::cQueueDyn< TYPE >::GetWritePrepared ( ITERATE_t  iDesiredCount = 1)
inline

Use get_WriteQty() to check size avail. paired with AdvanceWrite

◆ MakeWritePrepared()

template<class TYPE = BYTE>
bool Gray::cQueueDyn< TYPE >::MakeWritePrepared ( ITERATE_t  iDesiredCount = 1)
inline

Use get_WriteQty() to check size avail. Grow buffer if i need to. paired with AdvanceWrite

◆ put_GrowSizeChunk()

template<class TYPE = BYTE>
void Gray::cQueueDyn< TYPE >::put_GrowSizeChunk ( ITERATE_t  nGrowSizeChunk)
inlinenoexcept

How big are the chunks if we need to grow.

◆ WriteQ() [1/2]

template<class TYPE = BYTE>
void Gray::cQueueDyn< TYPE >::WriteQ ( cQueueRead< BYTE > &  queue)
inline

Write a Q into the Q

◆ WriteQ() [2/2]

template<class TYPE = BYTE>
bool Gray::cQueueDyn< TYPE >::WriteQ ( TYPE  val)
inline

Write a single value into the Q.

◆ WriteQty()

template<class TYPE = BYTE>
HRESULT Gray::cQueueDyn< TYPE >::WriteQty ( const TYPE pVal,
ITERATE_t  iCount 
)
inline

Write array into the Q pVal = nullptr = just test if it has enough room.

◆ WriteX()

template<class TYPE = BYTE>
HRESULT Gray::cQueueDyn< TYPE >::WriteX ( const void *  pData,
size_t  nDataSize 
)
inline

Write a buffer/array into the Q

Returns
size of data added.

Member Data Documentation

◆ m_nGrowSizeChunk

template<class TYPE = BYTE>
ITERATE_t Gray::cQueueDyn< TYPE >::m_nGrowSizeChunk
protected

number of TYPE elements to grow by in a single re-alloc chunk. 0 = never grow.

◆ m_nGrowSizeMax

template<class TYPE = BYTE>
ITERATE_t Gray::cQueueDyn< TYPE >::m_nGrowSizeMax
protected

Total arbitrary max allowed for m_iDataSizeAlloc. 0 = never grow.


The documentation for this class was generated from the following file: