2 #ifndef INC_CRingBuffer
\r
3 #define INC_CRingBuffer
\r
8 ////////////////////////////////////////////////////////////////////////////////
\r
10 ////////////////////////////////////////////////////////////////////////////////
\r
11 template<typename T>
\r
14 ////////////////////////////////////////////////////////////////////////////////
\r
15 //
\83\81\83\93\83o
\95Ï
\90\94\r
16 ////////////////////////////////////////////////////////////////////////////////
\r
18 std::vector<T> m_Buffer;
\r
20 int m_WritePosition;
\r
22 ////////////////////////////////////////////////////////////////////////////////
\r
23 //
\83R
\83\93\83X
\83g
\83\89\83N
\83^
\r
24 ////////////////////////////////////////////////////////////////////////////////
\r
29 m_WritePosition = 0;
\r
32 ////////////////////////////////////////////////////////////////////////////////
\r
33 //
\83f
\83X
\83g
\83\89\83N
\83^
\r
34 ////////////////////////////////////////////////////////////////////////////////
\r
36 virtual ~CRingBuffer()
\r
41 ////////////////////////////////////////////////////////////////////////////////
\r
42 // static
\8aÖ
\90\94\81A
\83R
\81[
\83\8b\83o
\83b
\83N
\8aÖ
\90\94\r
43 ////////////////////////////////////////////////////////////////////////////////
\r
44 ////////////////////////////////////////////////////////////////////////////////
\r
45 //
\91\80\8dì
\83\81\83\
\83b
\83h
\r
46 ////////////////////////////////////////////////////////////////////////////////
\r
48 bool allocate(unsigned int in_Size)
\r
54 m_Buffer.resize(in_Size);
\r
56 m_WritePosition = 0;
\r
64 m_WritePosition = 0;
\r
67 bool nextReadBuffer()
\r
73 m_ReadPosition = (m_ReadPosition + 1) % m_Buffer.size();
\r
77 bool nextWriteBuffer()
\r
83 m_WritePosition = (m_WritePosition + 1) % m_Buffer.size();
\r
87 ////////////////////////////////////////////////////////////////////////////////
\r
88 //
\91®
\90«
\83\81\83\
\83b
\83h
\r
89 ////////////////////////////////////////////////////////////////////////////////
\r
93 return m_Buffer.size();
\r
96 T* at(size_t in_Index)
\r
98 return &m_Buffer[in_Index];
\r
101 const T* at(size_t in_Index) const
\r
103 return &m_Buffer[in_Index];
\r
106 T* getReadPointer()
\r
111 return &m_Buffer[m_ReadPosition];
\r
114 const T* getReadPointer() const
\r
116 return &m_Buffer[m_ReadPosition];
\r
119 T* getWritePointer()
\r
121 return &m_Buffer[m_WritePosition];
\r
124 const T* getWritePointer() const
\r
126 return &m_Buffer[m_WritePosition];
\r
129 ////////////////////////////////////////////////////////////////////////////////
\r
130 //
\83C
\83e
\83\8c\81[
\83V
\83\87\83\93\r
131 ////////////////////////////////////////////////////////////////////////////////
\r
132 ////////////////////////////////////////////////////////////////////////////////
\r
134 ////////////////////////////////////////////////////////////////////////////////
\r
136 // check if the buffer is full
\r
139 return m_ReadPosition == (m_WritePosition + 1) % m_Buffer.size();
\r
142 // check if the buffer is empty
\r
145 return m_ReadPosition == m_WritePosition;;
\r
148 ////////////////////////////////////////////////////////////////////////////////
\r
150 ////////////////////////////////////////////////////////////////////////////////
\r
151 ////////////////////////////////////////////////////////////////////////////////
\r
152 //
\8f\83\90\88\89¼
\91z
\8aÖ
\90\94\81A
\92è
\8b`
\82Ì
\82Ý
\81i
\94ñ
\8eÀ
\91\95\92ñ
\8b\9f\81j
\r
153 ////////////////////////////////////////////////////////////////////////////////
\r
154 ////////////////////////////////////////////////////////////////////////////////
\r
155 //
\93à
\95\94\83N
\83\89\83X
\r
156 ////////////////////////////////////////////////////////////////////////////////
\r
161 #endif //INC_CRingBuffer
\r