SophiaFramework UNIVERSE 5.3 |
#include <SFXStreamReader.h.hpp>
class SFXStreamReader : public SFXInputStream;
SFMTYPEDEFCLASS(SFXStreamReader)
SFXStreamReader クラスは、 ストレージのストリームからデータを読み込むときに使います。
読み込むデータの種類に応じて、 SFXStreamReader クラスを継承する SFXBinaryStreamReader / SFXAnsiStringStreamReader / SFXWideStringStreamReader クラスのいずれかを使います。
可変長バッファストリームの場合は、 内部で SFXElasticStreamReader クラスが利用されますが、 開発者はこれについて意識する必要はありません。
SFXBinaryStreamReader | SFXAnsiStringStreamReader | SFXWideStringStreamReader | SFXElasticStreamReader | SFXStreamWriter | ストリーム | ストレージ
コンストラクタ/デストラクタ |
---|
SFXStreamReader( Void ) SFXStreamReader クラスのコンストラクタです。
|
パブリック関数 | |
---|---|
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 ] SFXStreamReader(Void);
特に何も行いません。
[ public ] Void Attach( SFXInputStreamPtr stream // 設定するストリーム );
この関数は、このストリームに指定されたストリームを結び付けます。
この関数を呼び出す前にこのストリームに設定されていたストリームは破棄されます。
[ public, virtual ] Void Cancel(Void);
この関数は、 このストリームからの読み込みをキャンセルします。
具体的には、下記の処理を内部で行います。
このストリームに関連付けられたストレージの Cancel 関数を呼び出します。
ファイルの場合は SFXFile::Cancel 関数を、 TCP ソケットの場合は SFXTCPSocket::Cancel 関数を呼び出します。
SFXStreamReader::Fetch 関数による、 このストリームについてのコールバック関数の登録をキャンセルします。
注意 | |
---|---|
この関数は、内部的に SFXStreamReader::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 クラスから得られるストリームでは、 両方のタイプが使用できます。
コールバック関数を登録する場合、 ストレージから内部バッファへのデータ読み込みが完了したタイミングでコールバック関数が呼び出されます。 データ読み込み時のエラーは、コールバック関数の第 1 引数に渡されます。 なお、この関数の戻り値がエラー(SFERR_NO_ERROR 以外の値)の場合、コールバック関数は呼び出されません。
コールバック関数を登録しない場合は、 この関数を呼び出すと、ストレージから内部バッファにデータはすぐに読み込まれます。
Tip | |
---|---|
SFXStreamReader::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);
ストリームバッファから読み込み可能なデータサイズ [単位: バイト]
この関数は、ストリームバッファから読み込み可能なデータサイズを取得します。[単位: バイト]
注意 | |
---|---|
バッファの物理的なサイズは、ストレージクラスの GetStreamReader 関数の size 引数に指定します。 |
Tip | |
---|---|
読み込むデータサイズが不明の場合、 SFXStreamReader::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 // 読み込む変数のサイズ );
この関数は、 ストリームバッファ内のデータを指定した変数に読み込みます。
読み込み可能なデータサイズは SFXStreamReader::GetReadableSize 関数で取得できます。
注意 | |
---|---|
ストリームバッファの物理的サイズは、ストレージクラスの GetStreamReader 関数の size 引数に指定します。 |
注意 | |
---|---|
SFXBuffer 型の buffer 引数を使用するときは、 この関数を呼び出す前に SFXBuffer::SetSize 関数を使用してこのストリームから読み込むデータのサイズを設定する必要があります。 buffer 引数が null、size 引数が 0 以下、または buffer 引数(size 引数)のサイズが SFXStreamReader::GetReadableSize 関数の戻り値よりも大きい場合は、 SFERR_FAILED を返します。 ストリームバッファが buffer 引数のメモリ領域の一部を含む場合は、 SFERR_INVALID_PARAM を返します。 |
Tip | |
---|---|
SFXStreamReader::Fetch 関数を呼び出すことにより、 ストリームに関連付けられたストレージからストリームバッファにデータを読み込みます。 |
[ public ] Void Release(Void);
この関数は、 このストリームからの読み込みをキャンセルし、ストリームを解放します。
注意 | |
---|---|
この関数は、ストリームのデストラクタから呼び出されます。 また、SFXStreamReader::Cancel 関数を呼び出して、 このストリームからの読み込みをキャンセルします。 |
[ public, virtual ] SFCError ResetTrigger(Void);
この関数は、 SFXStreamReader::SetTrigger 関数で設定したトリガー(コールバック関数が呼ばれるタイミング)をリセットします。
この関数は、 ストリームバッファからデータを読み込むための読み込みポインタを進めます。
[ public, virtual ] SFCError SetTrigger( UInt32 size // トリガーとなるサイズ );
[ public, virtual ] SFCError SetTrigger( SFXBufferConstRef buffer // トリガーとなるデータ );
[ public, virtual ] SFCError SetTrigger( VoidConstPtr buffer // トリガーとなるデータ UInt32 size // トリガーとなるデータのサイズ );
SFXStreamReader::Fetch 関数で登録されたコールバック関数は、 ストリームバッファが読み込んだデータで一杯になったときや、 このストリームに設定されたストレージの終端までデータを読み込んだときに呼び出されます。
この関数は、これら以外のタイミングでコールバック関数を呼び出すためのトリガーを設定します。
size 引数だけを指定した場合は、 そのサイズのデータを読み込む毎にコールバック関数が呼び出されます。
buffer 引数を指定した場合は、 それと同じデータを読み込む毎にコールバック関数が呼び出されます。
改行文字を読み込む毎にコールバック関数を呼び出す方法は、以下の通りです。
SetTrigger("\r\n", 2);
[ public, virtual, const ] Bool Triggers(Void);
この関数は、 SFXStreamReader::SetTrigger 関数で設定したトリガーによって、 コールバック関数が呼び出されたか判定します。
Tip | |
---|---|
SFXStreamReader::Fetch 関数で登録したコールバック関数の中で使います。 |
Copyright(c) 2002 - 2024 Sophia Cradle Incorporated All Rights Reserved. |