前のページ次のページ上に戻るホーム SophiaFramework UNIVERSE 5.3

14.4. リングバッファクラス

SFXRingBuffer クラスは、リングバッファを表すクラスです。

図 14.1. リングバッファの概念図

リングバッファの概念図

リングバッファとは、概念的に環状に配置されたメモリを表します。

リングバッファには、リングバッファ上を時計回りに進む書き込みポインタと読み込みポインタがあります。 書き込みポインタ経由でリングバッファにデータを書き込むと、書き込みポインタは進みます。 読み込みポインタ経由でリングバッファからデータを読み込むと、読み込みポインタは進みます。

[Note] 注意
読み込みポインタは書き込みポインタの位置を越えることができません。 逆に、書き込みポインタは読み込みポインタの位置を越えることができません。

例 14.10. リングバッファの使い方

Byte data1[] = {'1', '2', '3', '4', '5', '6', '7', '8'};
Byte data2[] = {'9', 'a', 'b', 'c', 'd', 'e'};
SFXRingBuffer ring;
SFXBuffer buffer;

// リングバッファのサイズを 12 バイトに設定する
ring.Allocate(12);

// 8 バイトのデータを書き込む
ring.Write(data1, sizeof(data1));

// 読み込み用のバッファを確保する
buffer.SetSize(4);

// 4 バイト読み込む
ring.Read(&buffer); // buffer = "1234"

// 6 バイトのデータを書き込む
ring.Write(data2, sizeof(data2));

// 読み込み用のバッファを確保する
buffer.SetSize(10);

// 10 バイト読み込む
ring.Read(&buffer); // buffer = "56789abcde"