Alternate e697dbe9c5997e35395fe158628dd8c5209481da
for Visual Studio 2022 and Windows 11.
読み取り中…
検索中…
一致する文字列を見つけられません
RingBuffer.cpp
[詳解]
1// ----------------------------------------------------------------------------
6
7#include "pch.h"
8#include "RingBuffer.h"
9
10using namespace alt;
11
14{
15 _lpbyStartPoint = NULL;
16 _lpbyEndPoint = NULL;
17 _size = 0;
18 _remainSize = 0;
19 _lpbyReadPoint = NULL;
20 _lpbyWritePoint = NULL;
21}
22
24 :RingBuffer ()
25{
26 this->Init (size);
27}
28
30{
31 if (_lpbyStartPoint != NULL)
32 delete[] _lpbyStartPoint;
33}
34
36{
37 _lpbyStartPoint = new BYTE[size];
39 _size = size;
40 _remainSize = 0;
43
44 return TRUE;
45}
46
48{
49 delete[] _lpbyStartPoint;
50 _lpbyStartPoint = new BYTE[_size];
52 _remainSize = 0;
53 _lpbyReadPoint = NULL;
54 _lpbyWritePoint = NULL;
55
56 return TRUE;
57}
58
59BOOL RingBuffer::Write (LPBYTE lpbyBuffer, SIZE_T size)
60{
61 LPBYTE lpbyWritePointEnd = _lpbyWritePoint + size;
62
63 // 書き込み量がバッファサイズを超えてはいけない。
64 if ((_remainSize + size) > _size) return FALSE;
65
66 if (lpbyWritePointEnd <= _lpbyEndPoint)
67 {
68 // リングバッファの内部で完結
69 CopyMemory (_lpbyWritePoint, lpbyBuffer, size);
70 _lpbyWritePoint = lpbyWritePointEnd;
71 }
72 else
73 {
74 // 書き込みが最大バッファを超える場合は、分割して書き込む。
75 SIZE_T writeSize1 = _lpbyEndPoint - _lpbyWritePoint;
76 CopyMemory (_lpbyWritePoint, lpbyBuffer, writeSize1);
77
78 SIZE_T writeSize2 = size - writeSize1;
79 CopyMemory (_lpbyStartPoint, &lpbyBuffer[writeSize1], writeSize2);
80
81 _lpbyWritePoint = _lpbyStartPoint + writeSize2;
82 }
83
85
86 return TRUE;
87}
88
89BOOL RingBuffer::Read (LPBYTE lpbyBuffer, SIZE_T size)
90{
91 LPBYTE lpbyReadPointStart = _lpbyReadPoint;
92 LPBYTE lpbyReadPointEnd = _lpbyReadPoint + size;
93
94 // 読み込み量が書き込み量を超えてはいけない。
95 if (size > _remainSize) return FALSE;
96
97 if (lpbyReadPointEnd <= _lpbyEndPoint)
98 {
99 // リングバッファの内部で完結
100 CopyMemory (lpbyBuffer, _lpbyReadPoint, size);
101 _lpbyReadPoint = lpbyReadPointEnd;
102 }
103 else
104 {
105 // 読み込みが最大バッファを超える場合は、分割して読み込む。
106 SIZE_T readSize1 = _lpbyEndPoint - _lpbyReadPoint;
107 CopyMemory (lpbyBuffer, _lpbyReadPoint, readSize1);
108
109 SIZE_T readSize2 = size - readSize1;
110 CopyMemory (&lpbyBuffer[readSize1], _lpbyStartPoint, readSize2);
111
112 _lpbyReadPoint = _lpbyStartPoint + readSize2;
113 }
114
115 _remainSize -= size;
116
117 return TRUE;
118}
119
120SIZE_T RingBuffer::Remain () const
121{
122 return _remainSize;
123}
void Init()
ストラテジーの初期化を行います。
リングバッファに関するクラス
#define size
プリコンパイル済みヘッダー ファイルです。
リングバッファに関するクラス
Definition: RingBuffer.h:16
SIZE_T _remainSize
Definition: RingBuffer.h:65
LPBYTE _lpbyReadPoint
Definition: RingBuffer.h:67
APIENTRY ~RingBuffer()
デストラクタ
Definition: RingBuffer.cpp:29
LPBYTE _lpbyStartPoint
Definition: RingBuffer.h:62
BOOL APIENTRY Read(LPBYTE lpbyBuffer, SIZE_T size)
バッファの読み込み
Definition: RingBuffer.cpp:89
LPBYTE _lpbyWritePoint
Definition: RingBuffer.h:68
APIENTRY RingBuffer()
コンストラクタ
Definition: RingBuffer.cpp:12
BOOL APIENTRY Init(SIZE_T size)
初期化
Definition: RingBuffer.cpp:35
LPBYTE _lpbyEndPoint
Definition: RingBuffer.h:63
BOOL APIENTRY Write(LPBYTE lpbyBuffer, SIZE_T size)
バッファの書き込み
Definition: RingBuffer.cpp:59
SIZE_T APIENTRY Remain() const
残りバッファサイズの取得
Definition: RingBuffer.cpp:120
BOOL APIENTRY Clear()
バッファのクリア
Definition: RingBuffer.cpp:47
プロジェクト共通基底クラス
Definition: DBLibrary.h:12