mFrame
載入中...
搜尋中...
無符合項目
RingBuffer.h
1
8#ifndef MFRAME_BA359EBF_505B_445E_8A31_2AB82A22FEB8
9#define MFRAME_BA359EBF_505B_445E_8A31_2AB82A22FEB8
10
11/* ***************************************************************************************
12 * Include
13 */
14
15//----------------------------------------------------------------------------------------
16
17//----------------------------------------------------------------------------------------
18#include "./../io/Buffer.h"
19#include "./../lang/Memory.h"
20
21/* ***************************************************************************************
22 * Macro
23 */
24
25/* ***************************************************************************************
26 * Namespace
27 */
28namespace mframe::io {
29 class RingBuffer;
30} // namespace mframe::io
31
32/* ***************************************************************************************
33 * Class/Interface/Struct
34 */
38 public mframe::io::Buffer {
39 /* *************************************************************************************
40 * Variable
41 */
42 private:
43 volatile uint32 vCount;
44 volatile uint32 vHead;
45 volatile uint32 vTail;
46 volatile bool vUnlock;
47
48 /* *************************************************************************************
49 * Abstract Method
50 */
51
52 /* *************************************************************************************
53 * Construct Method
54 */
55 public:
62
69
74 virtual ~RingBuffer(void) override;
75
76 /* *************************************************************************************
77 * Operator Method
78 */
79
80 /* *************************************************************************************
81 * Public Method <Override> - mframe::lang::Flushable
82 */
83 public:
84 virtual void flush(void) override;
85
86 /* *************************************************************************************
87 * Public Method <Override> - mframe::io::Buffer
88 */
89 public:
90 virtual mframe::lang::Readable& getReadable(void) override;
91
92 virtual mframe::lang::Appendable& getAppendable(void) override;
93
94 /* *************************************************************************************
95 * Public Method <Override> - mframe::lang::Readable
96 */
97 public:
98 virtual int avariable(void) const override;
99
100 virtual int pollByte(char& result) override;
101
102 virtual int poll(mframe::lang::Appendable& appendable) override;
103
104 virtual int poll(void* pointer, int length) override;
105
106 virtual int skip(int length) override;
107
108 virtual void lock(bool lock) override;
109
110 /* *************************************************************************************
111 * Public Method <Override> - mframe::lang::Appendable
112 */
113 public:
114 virtual int remaining(void) const override;
115
116 virtual int putByte(const char data) override;
117
118 virtual int put(mframe::lang::Readable& readable) override;
119
120 virtual int put(const void* pointer, int length) override;
121
122 /* *************************************************************************************
123 * Public Method <Inline>
124 */
125 public:
131 inline int getSize(void) {
132 return static_cast<int>(RingBuffer::vCount);
133 }
134
140 inline int getHeadPosition(void) {
141 return static_cast<int>((this->vHead & (this->vCount - 1)));
142 }
143
149 inline int getTailPosition(void) {
150 return static_cast<int>((this->vTail & (this->vCount - 1)));
151 }
152
153 /* *************************************************************************************
154 * Public Method
155 */
156
157 /* *************************************************************************************
158 * Protected Method
159 */
160
161 /* *************************************************************************************
162 * Private Method
163 */
164 private:
165 void init(void);
166
167 int putMult(mframe::lang::Readable* readable, const void* buffer, int length);
168
169 int pollMult(mframe::lang::Appendable* appendable, void* buffer, int length);
170 /* *************************************************************************************
171 * Static Variable
172 */
173
174 /* *************************************************************************************
175 * Static Method
176 */
177};
178
179/* ***************************************************************************************
180 * End of file
181 */
182#endif /* MFRAME_BA359EBF_505B_445E_8A31_2AB82A22FEB8 */
Definition RingBuffer.h:38
RingBuffer(const mframe::lang::Memory &memory)
Construct a new Ring Buffer object.
virtual int poll(mframe::lang::Appendable &appendable) override
檢索至Appendable指定數量字節,並由此緩衝區刪除
virtual int remaining(void) const override
取得緩衝區剩餘空閒字節數。
virtual int put(const void *pointer, int length) override
將指針內資料輸入至緩衝區。
RingBuffer(int length)
Construct a new Ring Buffer object.
int getTailPosition(void)
Get the Tail Position object `.
Definition RingBuffer.h:149
virtual int put(mframe::lang::Readable &readable) override
將readable內資料輸入至緩衝區。
virtual ~RingBuffer(void) override
Destroy the Ring Buffer object.
virtual int skip(int length) override
跳躍指定的字結數量,並由此緩衝區刪除。
virtual void flush(void) override
int getSize(void)
Return size the ring buffer.
Definition RingBuffer.h:131
virtual void lock(bool lock) override
鎖定緩存,取出不移除。
virtual int poll(void *pointer, int length) override
檢索至pointer指定數量字節,並由此緩衝區刪除
virtual int avariable(void) const override
取得輸出緩存內剩餘多少位元組
int getHeadPosition(void)
Get the Head Position object.
Definition RingBuffer.h:140
virtual int putByte(const char data) override
將字節輸入至緩衝區。
virtual int pollByte(char &result) override
檢索一個字節,並由此緩衝區刪除
int length(void) const
Definition Data.h:126
Definition Memory.h:29
int lock(void) const
核心鎖定,在調用unlock以前將不會進行執行緒切換
E * pointer(void) const
模板方法,取得內部指標並轉換為指定型態(不指定偏移)
Definition Pointer.h:409
Definition AppendableOutputStream.h:24
Definition Buffer.h:31
可附加的 <Interface>
Definition Appendable.h:36
Definition Readable.h:31