ReactOS 0.4.16-dev-2646-g1219156
CicFirstInFirstOut< T_ITEM > Class Template Reference

#include <cicfifo.h>

Public Member Functions

 CicFirstInFirstOut (size_t cInitial=0)
 
 ~CicFirstInFirstOut ()
 
size_t GetSize () const
 
BOOL SetData (const T_ITEM *pItem)
 
BOOL GetData (T_ITEM *pItem)
 

Protected Member Functions

BOOL GrowBuffer (size_t nGrow)
 

Protected Attributes

T_ITEM * m_pItems
 
size_t m_cItems
 
size_t m_iBack
 
size_t m_iFront
 

Private Member Functions

 CicFirstInFirstOut (const CicFirstInFirstOut &)=delete
 
CicFirstInFirstOutoperator= (const CicFirstInFirstOut &)=delete
 

Detailed Description

template<typename T_ITEM>
class CicFirstInFirstOut< T_ITEM >

Definition at line 14 of file cicfifo.h.

Constructor & Destructor Documentation

◆ CicFirstInFirstOut() [1/2]

template<typename T_ITEM >
CicFirstInFirstOut< T_ITEM >::CicFirstInFirstOut ( size_t  cInitial = 0)
inline

Definition at line 24 of file cicfifo.h.

25 : m_pItems(NULL)
26 , m_cItems(0)
27 , m_iBack(0)
28 , m_iFront(0)
29 {
30 if (cInitial)
31 GrowBuffer(cInitial);
32 }
size_t m_cItems
Definition: cicfifo.h:18
T_ITEM * m_pItems
Definition: cicfifo.h:17
BOOL GrowBuffer(size_t nGrow)
Definition: cicfifo.h:77
size_t m_iBack
Definition: cicfifo.h:19
size_t m_iFront
Definition: cicfifo.h:20
#define NULL
Definition: types.h:112

◆ ~CicFirstInFirstOut()

template<typename T_ITEM >
CicFirstInFirstOut< T_ITEM >::~CicFirstInFirstOut ( )
inline

Definition at line 34 of file cicfifo.h.

35 {
37 }
static void cicMemFree(LPVOID ptr)
Definition: cicbase.h:23

◆ CicFirstInFirstOut() [2/2]

template<typename T_ITEM >
CicFirstInFirstOut< T_ITEM >::CicFirstInFirstOut ( const CicFirstInFirstOut< T_ITEM > &  )
privatedelete

Member Function Documentation

◆ GetData()

template<typename T_ITEM >
BOOL CicFirstInFirstOut< T_ITEM >::GetData ( T_ITEM *  pItem)
inline

Definition at line 66 of file cicfifo.h.

67 {
68 if (m_iFront == m_iBack)
69 return FALSE;
70 *pItem = m_pItems[m_iFront];
71 if (++m_iFront == m_cItems)
72 m_iFront = 0;
73 return TRUE;
74 }
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117

◆ GetSize()

template<typename T_ITEM >
size_t CicFirstInFirstOut< T_ITEM >::GetSize ( ) const
inline

Definition at line 39 of file cicfifo.h.

40 {
41 if (m_iBack == m_iFront)
42 return 0;
43 if (m_iBack < m_iFront)
44 return m_iBack + (m_cItems - m_iFront);
45 return m_iBack - m_iFront;
46 }

Referenced by CicFirstInFirstOut< T_ITEM >::SetData().

◆ GrowBuffer()

template<typename T_ITEM >
BOOL CicFirstInFirstOut< T_ITEM >::GrowBuffer ( size_t  nGrow)
inlineprotected

Definition at line 77 of file cicfifo.h.

78 {
79 if (nGrow == 0)
80 return TRUE;
81
82 if (!m_pItems)
83 {
84 m_pItems = (T_ITEM*)cicMemAlloc(nGrow * sizeof(T_ITEM));
85 if (m_pItems)
86 m_cItems = nGrow;
87 return !!m_pItems;
88 }
89
90 size_t cNewItems = m_cItems + nGrow;
91 if (cNewItems < m_cItems || cNewItems > ~(size_t)0 / sizeof(T_ITEM))
92 return FALSE;
93
94 T_ITEM* pNewItems = (T_ITEM*)cicMemAlloc(cNewItems * sizeof(T_ITEM));
95 if (!pNewItems)
96 return FALSE;
97
98 if (m_iBack < m_iFront)
99 {
100 size_t cTail = m_cItems - m_iFront;
101 CopyMemory(pNewItems, &m_pItems[m_iFront], cTail * sizeof(T_ITEM));
102 CopyMemory(&pNewItems[cTail], m_pItems, m_iBack * sizeof(T_ITEM));
103 m_iBack = cTail + m_iBack;
104 }
105 else
106 {
107 size_t nCount = m_iBack - m_iFront;
108 CopyMemory(pNewItems, &m_pItems[m_iFront], nCount * sizeof(T_ITEM));
109 m_iBack = nCount;
110 }
111 m_iFront = 0;
112
114 m_pItems = pNewItems;
115 m_cItems = cNewItems;
116 return TRUE;
117 }
static LPVOID cicMemAlloc(SIZE_T size)
Definition: cicbase.h:13
#define CopyMemory
Definition: minwinbase.h:29

Referenced by CicFirstInFirstOut< T_ITEM >::CicFirstInFirstOut(), and CicFirstInFirstOut< T_ITEM >::SetData().

◆ operator=()

template<typename T_ITEM >
CicFirstInFirstOut & CicFirstInFirstOut< T_ITEM >::operator= ( const CicFirstInFirstOut< T_ITEM > &  )
privatedelete

◆ SetData()

template<typename T_ITEM >
BOOL CicFirstInFirstOut< T_ITEM >::SetData ( const T_ITEM *  pItem)
inline

Definition at line 49 of file cicfifo.h.

50 {
51 if (!m_cItems || GetSize() + 1 >= m_cItems) /* "+1" is for marking */
52 {
53 if (!GrowBuffer(!m_cItems ? 8 : m_cItems))
54 return FALSE;
55 }
56
57 m_pItems[m_iBack] = *pItem;
58
59 if (++m_iBack == m_cItems)
60 m_iBack = 0;
61
62 return TRUE;
63 }
size_t GetSize() const
Definition: cicfifo.h:39

Member Data Documentation

◆ m_cItems

◆ m_iBack

◆ m_iFront

◆ m_pItems


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