SophiaFramework UNIVERSE 5.3 |
#include <SFXElasticStreamReader.h.hpp>
class SFXElasticStreamReader : public SFXInputStream;
SFMTYPEDEFCLASS(SFXElasticStreamReader)
SFXElasticStreamReader とは
SFXElasticStreamReader クラスは、 可変長バッファストリームからデータを読み込むときに内部的に利用されます。
size 引数(バッファサイズ)を指定せずにストレージクラスの GetStreamReader 関数を呼び出して SFXBinaryStreamReader / SFXAnsiStringStreamReader / SFXWideStringStreamReader ストリームを取得すると、 ストリームバッファは可変長になります。
このとき、内部では、 SFXElasticStreamReader::Attach 関数を使用して SFXBinaryStreamReader / SFXAnsiStringStreamReader / SFXWideStringStreamReader ストリームに SFXElasticStreamReader ストリームを結び付けます。 この処理により、ストリームからのデータの読み込みは可変長バッファを使用して行われることになります。
バッファは読み込むデータのサイズまで自動的に拡張されます。
注意 | |
---|---|
可変長バッファを使用してストリームからデータを読み込む処理は実装済みなので、 開発者が明示的に SFXElasticStreamReader クラスを使用する必要はありません。 |
SFXBinaryStreamReader | SFXAnsiStringStreamReader | SFXWideStringStreamReader | SFXElasticStreamWriter | ストリーム | ストレージ | 可変長バッファストリーム | ストリームバッファ
コンストラクタ/デストラクタ |
---|
SFXElasticStreamReader( Void ) SFXElasticStreamReader クラスのコンストラクタです。
|
パブリック関数 | |
---|---|
Void |
Attach(
SFXInputStreamPtr stream
) このストリームに指定されたストリームを結び付けます。
|
Void |
Cancel( Void ) ストリームからの読み込みをキャンセルします。
|
SFXInputStreamPtr |
Detach( Void ) このストリームに結び付けられているストリームを切り離します。
|
Bool |
Ends( Void ) 読み込みポインタがストリームの終端に到達したか判定します。
|
SFCError |
Fetch( Void ) ストレージからストリームにデータを読み込みます。
|
SFCError |
Fetch(
CallbackSPP spp
, VoidPtr reference
) ストレージからストリームにデータを読み込みます。
|
SInt32 |
FirstIndexOf(
Byte byte
, SInt32 index = SINT32_MINIMUM
) ストリームバッファを先頭から検索して、指定されたデータと一致する最初のインデックスを取得します。
|
SInt32 |
FirstIndexOf(
SFXBufferConstRef buffer
, SInt32 index = SINT32_MINIMUM
) ストリームバッファを先頭から検索して、指定されたデータと一致する最初のインデックスを取得します。
|
SInt32 |
FirstIndexOf(
VoidConstPtr buffer
, UInt32 size
, SInt32 index = SINT32_MINIMUM
) ストリームバッファを先頭から検索して、指定されたデータと一致する最初のインデックスを取得します。
|
UInt32 |
GetReadableSize( Void ) ストリームから読み込み可能なデータサイズを取得します。[単位: バイト]
|
SInt32 |
LastIndexOf(
Byte byte
, SInt32 index = SINT32_MAXIMUM
) ストリームバッファを終端から検索して、指定されたデータと一致する最後のインデックスを取得します。
|
SInt32 |
LastIndexOf(
SFXBufferConstRef buffer
, SInt32 index = SINT32_MAXIMUM
) ストリームバッファを終端から検索して、指定されたデータと一致する最後のインデックスを取得します。
|
SInt32 |
LastIndexOf(
VoidConstPtr buffer
, UInt32 size
, SInt32 index = SINT32_MAXIMUM
) ストリームバッファを終端から検索して、指定されたデータと一致する最後のインデックスを取得します。
|
SFCError |
Read(
SFXBufferPtr buffer
) ストリームからデータを読み込みます。
|
SFCError |
Read(
VoidPtr buffer
, UInt32 size
) ストリームからデータを読み込みます。
|
Void |
Release( Void ) ストリームを解放します。
|
SFCError |
ResetTrigger( Void ) トリガー(コールバック関数が呼ばれるタイミング)をリセットします。
|
SFCError |
Seek(
UInt32 size
) 読み込みポインタを進めます。
|
SFCError |
SetTrigger(
UInt32 size
) トリガー(コールバック関数が呼ばれるタイミング)を設定します。
|
SFCError |
SetTrigger(
SFXBufferConstRef buffer
) トリガー(コールバック関数が呼ばれるタイミング)を設定します。
|
SFCError |
SetTrigger(
VoidConstPtr buffer
, UInt32 size
) トリガー(コールバック関数が呼ばれるタイミング)を設定します。
|
Bool |
Triggers( Void ) トリガーによりコールバック関数が呼び出されたか判定します。
|
型 |
---|
CallbackSPP
(SFXStream から継承)
コールバック関数を表す型です。
|
[ public, explicit ] SFXElasticStreamReader(Void);
特に何も行いません。
[ public ] Void Attach( SFXInputStreamPtr stream // 設定するストリーム );
この関数は、このストリームに指定されたストリームを結び付けます。
この関数を呼び出す前にこのストリームに設定されていたストリームと可変長バッファは破棄されます。
[ public, virtual ] Void Cancel(Void);
この関数は、 このストリームからの読み込みをキャンセルします。
具体的には、下記の処理を内部で行います。
このストリームに関連付けられたストレージの Cancel 関数を呼び出します。
ファイルの場合は SFXFile::Cancel 関数を、 TCP ソケットの場合は SFXTCPSocket::Cancel 関数を呼び出します。
SFXElasticStreamReader::Fetch 関数による、 このストリームについてのコールバック関数の登録をキャンセルします。
注意 | |
---|---|
この関数は、内部的に SFXElasticStreamReader::Release 関数から呼び出されます。 |
[ public ] SFXInputStreamPtr Detach(Void);
このストリームに結び付けられていたストリーム
この関数を呼び出した後、 このストリームは設定されていない状態になります。 また、可変長バッファは破棄されます。
[ public, virtual, const ] Bool Ends(Void);
この関数は、読み込みポインタがストリームの終端に到達したか判定します。
もし読み込みポインタがストリームバッファの終端に到達し、 このストリームに設定されたストレージからデータが読み込めないときは、"true" が返ります。 そうでない場合は、"false" が返ります。
[ public, virtual ] SFCError Fetch(Void);
[ public, virtual ] SFCError Fetch( CallbackSPP spp // コールバック関数 VoidPtr reference // コールバック関数に渡すデータ(参照値) );
この関数は、 ストリームに関連付けられたストレージから ストリームバッファにデータを読み込みます。
この関数には、コールバック関数を登録するタイプと登録しないタイプがあります。 利用可能なタイプはストレージの種類に依存します。
例えば、SFXTCPSocket クラスから得られるストリームでは、 コールバック関数を登録するタイプだけが利用可能です。 一方、SFXFile クラスから得られるストリームでは、 両方のタイプが使用できます。
コールバック関数を登録しないタイプの場合、 この関数を呼び出すと、ストレージから内部バッファにデータはすぐに読み込まれます。
Tip | |
---|---|
SFXElasticStreamReader::Read 関数を呼び出すことにより、 ストリームバッファ内のデータは引数に指定した変数に読み込みます。 |
[ public, virtual, const ] SInt32 FirstIndexOf( Byte byte // 検索するデータ SInt32 index = SINT32_MINIMUM // 検索開始位置 );
[ public, virtual, const ] SInt32 FirstIndexOf( SFXBufferConstRef buffer // 検索するデータ SInt32 index = SINT32_MINIMUM // 検索開始位置 );
[ public, virtual, const ] SInt32 FirstIndexOf( VoidConstPtr buffer // 検索するデータ UInt32 size // 検索するデータのサイズ SInt32 index = SINT32_MINIMUM // 検索開始位置 );
この関数は、 ストリームバッファを先頭から検索して、 指定されたデータと一致する最初のインデックスを取得します。
検索開始位置を指定することで、先頭以外の位置から検索できます。
注意 | |
---|---|
ストリームバッファの先頭インデックスは 0 です。 |
[ public, virtual, const ] UInt32 GetReadableSize(Void);
ストリームバッファから読み込み可能なデータサイズ [単位: バイト]
この関数は、ストリームバッファから読み込み可能なデータサイズを取得します。[単位: バイト]
Tip | |
---|---|
読み込むデータサイズが不明の場合、 SFXElasticStreamReader::Read 関数を呼び出す前に この関数を呼び出して読み込み可能なデータサイズを調べる必要があります。 |
[ public, virtual, const ] SInt32 LastIndexOf( Byte byte // 検索するデータ SInt32 index = SINT32_MAXIMUM // 検索開始位置 );
[ public, virtual, const ] SInt32 LastIndexOf( SFXBufferConstRef buffer // 検索するデータ SInt32 index = SINT32_MAXIMUM // 検索開始位置 );
[ public, virtual, const ] SInt32 LastIndexOf( VoidConstPtr buffer // 検索するデータ UInt32 size // 検索するデータのサイズ SInt32 index = SINT32_MAXIMUM // 検索開始位置 );
この関数は、 ストリームバッファを終端から検索して、 指定されたデータと一致する最後のインデックスを取得します。
検索開始位置を指定することで、終端以外の位置から検索できます。
注意 | |
---|---|
ストリームバッファの先頭インデックスは 0 です。 |
[ public, virtual ] SFCError Read( SFXBufferPtr buffer // 読み込むバッファ );
[ public, virtual ] SFCError Read( VoidPtr buffer // 読み込むバッファ UInt32 size // 読み込むバッファのサイズ );
この関数は、 ストリームバッファ内のデータを指定した変数に読み込みます。
読み込み可能なデータサイズは SFXElasticStreamReader::GetReadableSize 関数で取得できます。
注意 | |
---|---|
SFXBuffer 型の buffer 引数を使用するときは、 この関数を呼び出す前に読み込むデータサイズを SFXBuffer::SetSize 関数で設定する必要があります。 buffer 引数が null、size 引数が 0 以下、または SFXElasticStreamReader::GetReadableSize 関数の戻り値よりも大きなサイズのデータを読み込もうとしたときは、 SFERR_FAILED を返します。 |
Tip | |
---|---|
SFXElasticStreamReader::Fetch 関数を呼び出すことにより、 ストリームに関連付けられたストレージからストリームバッファにデータを読み込みます。 |
SFXElasticStreamReader::GetReadableSize | SFXElasticStreamReader::Fetch | ストリームバッファ | 可変長バッファストリーム | ストレージ
[ public ] Void Release(Void);
この関数は、 このストリームからの読み込みをキャンセルし、ストリームを解放します。
注意 | |
---|---|
この関数は、ストリームのデストラクタから呼び出されます。 また、SFXElasticStreamReader::Cancel 関数を呼び出して、 このストリームからの読み込みをキャンセルします。 |
[ public, virtual ] SFCError ResetTrigger(Void);
この関数は、 SFXElasticStreamReader::SetTrigger 関数で設定したトリガー(コールバック関数が呼ばれるタイミング)をリセットします。
SFXElasticStreamReader::SetTrigger | SFXElasticStreamReader::Triggers | SFXElasticStreamReader::Fetch
この関数は、 ストリームバッファからデータを読み込むための読み込みポインタを進めます。
[ public, virtual, const ] Bool Triggers(Void);
この関数は、 SFXElasticStreamReader::SetTrigger 関数で設定したトリガーによって、 コールバック関数が呼び出されたか判定します。
Tip | |
---|---|
SFXElasticStreamReader::Fetch 関数で登録したコールバック関数の中で使います。 |
SFXElasticStreamReader::SetTrigger | SFXElasticStreamReader::ResetTrigger | SFXElasticStreamReader::Fetch
[ public, virtual ] SFCError SetTrigger( UInt32 size // トリガーとなるサイズ );
[ public, virtual ] SFCError SetTrigger( SFXBufferConstRef buffer // トリガーとなるデータ );
[ public, virtual ] SFCError SetTrigger( VoidConstPtr buffer // トリガーとなるデータ UInt32 size // トリガーとなるデータのサイズ );
SFXElasticStreamReader::Fetch 関数で登録されたコールバック関数は、 このストリームに設定されたストレージの終端までデータを読み込んだときに呼び出されます。
この関数は、これら以外のタイミングでコールバック関数を呼び出すためのトリガーを設定します。
size 引数だけを指定した場合は、 そのサイズのデータを読み込む毎にコールバック関数が呼び出されます。
buffer 引数を指定した場合は、 それと同じデータを読み込む毎にコールバック関数が呼び出されます。
改行文字を読み込む毎にコールバック関数を呼び出す方法は、以下の通りです。
SetTrigger("\r\n", 2);
Copyright(c) 2002 - 2024 Sophia Cradle Incorporated All Rights Reserved. |