前のページ次のページ上に戻るホーム SophiaFramework UNIVERSE 5.3
SFXElasticStreamReader
可変長バッファ使用して読み込み用ストリームにアクセスするためのクラスです。
#include <SFXElasticStreamReader.h.hpp>
class SFXElasticStreamReader : public SFXInputStream;
SFMTYPEDEFCLASS(SFXElasticStreamReader)

継承図

SFXElasticStreamReader クラスの継承図

協調図

SFXElasticStreamReader クラスの協調図

解説

SFXElasticStreamReader とは

SFXElasticStreamReader クラスは、 可変長バッファストリームからデータを読み込むときに内部的に利用されます。

size 引数(バッファサイズ)を指定せずにストレージクラスの GetStreamReader 関数を呼び出して SFXBinaryStreamReader / SFXAnsiStringStreamReader / SFXWideStringStreamReader ストリームを取得すると、 ストリームバッファは可変長になります。

このとき、内部では、 SFXElasticStreamReader::Attach 関数を使用して SFXBinaryStreamReader / SFXAnsiStringStreamReader / SFXWideStringStreamReader ストリームに SFXElasticStreamReader ストリームを結び付けます。 この処理により、ストリームからのデータの読み込みは可変長バッファを使用して行われることになります。

バッファは読み込むデータのサイズまで自動的に拡張されます。

[Note] 注意
可変長バッファを使用してストリームからデータを読み込む処理は実装済みなので、 開発者が明示的に 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 から継承)
コールバック関数を表す型です。

SFXElasticStreamReader::SFXElasticStreamReader
SFXElasticStreamReader クラスのコンストラクタです。
[ public, explicit ]
SFXElasticStreamReader(Void);

解説

特に何も行いません。


SFXElasticStreamReader::Attach
このストリームに指定されたストリームを結び付けます。
[ public ]
Void Attach(
    SFXInputStreamPtr stream   // 設定するストリーム
);

解説

この関数は、このストリームに指定されたストリームを結び付けます。

この関数を呼び出す前にこのストリームに設定されていたストリームと可変長バッファは破棄されます。

参照

SFXElasticStreamReader::Detach


SFXElasticStreamReader::Cancel
ストリームからの読み込みをキャンセルします。
[ public, virtual ]
Void Cancel(Void);

解説

この関数は、 このストリームからの読み込みをキャンセルします。

具体的には、下記の処理を内部で行います。

  1. このストリームに関連付けられたストレージの Cancel 関数を呼び出します。

    ファイルの場合は SFXFile::Cancel 関数を、 TCP ソケットの場合は SFXTCPSocket::Cancel 関数を呼び出します。

  2. SFXElasticStreamReader::Fetch 関数による、 このストリームについてのコールバック関数の登録をキャンセルします。

[Note] 注意
この関数は、内部的に SFXElasticStreamReader::Release 関数から呼び出されます。

参照

SFXElasticStreamReader::Fetch | SFXFile::Cancel | SFXTCPSocket::Cancel


SFXElasticStreamReader::Detach
このストリームに結び付けられているストリームを切り離します。
[ public ]
SFXInputStreamPtr Detach(Void);

戻り値

このストリームに結び付けられていたストリーム

解説

この関数を呼び出した後、 このストリームは設定されていない状態になります。 また、可変長バッファは破棄されます。

参照

SFXElasticStreamReader::Attach


SFXElasticStreamReader::Ends
読み込みポインタがストリームの終端に到達したか判定します。
[ public, virtual, const ]
Bool Ends(Void);

戻り値

  • 読み込みポインタがストリームバッファの終端に到達し、ストレージから読み込むデータがないとき: true
  • そうでないとき: false

解説

この関数は、読み込みポインタがストリームの終端に到達したか判定します。

もし読み込みポインタがストリームバッファの終端に到達し、 このストリームに設定されたストレージからデータが読み込めないときは、"true" が返ります。 そうでない場合は、"false" が返ります。

参照

SFXStreamReader::Fetch | ストリームバッファ | ストレージ


SFXElasticStreamReader::Fetch
ストレージからストリームにデータを読み込みます。
[ public, virtual ]
SFCError Fetch(Void);
[ public, virtual ]
SFCError Fetch(
    CallbackSPP spp     // コールバック関数
    VoidPtr reference   // コールバック関数に渡すデータ(参照値)
);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • ストリームが設定されていない、 または 既にこの関数を呼び出してコールバックを待っているとき: SFERR_INVALID_STATE
  • 失敗したとき: SFERR_FAILED または AEEError.h で定義されるエラー値

解説

この関数は、 ストリームに関連付けられたストレージから ストリームバッファにデータを読み込みます。

この関数には、コールバック関数を登録するタイプと登録しないタイプがあります。 利用可能なタイプはストレージの種類に依存します。

例えば、SFXTCPSocket クラスから得られるストリームでは、 コールバック関数を登録するタイプだけが利用可能です。 一方、SFXFile クラスから得られるストリームでは、 両方のタイプが使用できます。

コールバック関数を登録しないタイプの場合、 この関数を呼び出すと、ストレージから内部バッファにデータはすぐに読み込まれます。

[Tip] Tip
SFXElasticStreamReader::Read 関数を呼び出すことにより、 ストリームバッファ内のデータは引数に指定した変数に読み込みます。

参照

SFXElasticStreamReader::Read | SFXElasticStreamReader::SetTrigger | ストレージ | ストリームバッファ


SFXElasticStreamReader::FirstIndexOf
ストリームバッファを先頭から検索して、指定されたデータと一致する最初のインデックスを取得します。
[ 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   // 検索開始位置
);

戻り値

  • 成功したとき: 見つかった位置のインデックス
  • 失敗したとき: -1

解説

この関数は、 ストリームバッファを先頭から検索して、 指定されたデータと一致する最初のインデックスを取得します。

検索開始位置を指定することで、先頭以外の位置から検索できます。

[Note] 注意
ストリームバッファの先頭インデックスは 0 です。

参照

SFXElasticStreamReader::LastIndexOf | ストリームバッファ


SFXElasticStreamReader::GetReadableSize
ストリームから読み込み可能なデータサイズを取得します。[単位: バイト]
[ public, virtual, const ]
UInt32 GetReadableSize(Void);

戻り値

ストリームバッファから読み込み可能なデータサイズ [単位: バイト]

解説

この関数は、ストリームバッファから読み込み可能なデータサイズを取得します。[単位: バイト]

[Tip] Tip
読み込むデータサイズが不明の場合、 SFXElasticStreamReader::Read 関数を呼び出す前に この関数を呼び出して読み込み可能なデータサイズを調べる必要があります。

参照

SFXElasticStreamReader::Read | ストリームバッファ | ストレージ


SFXElasticStreamReader::LastIndexOf
ストリームバッファを終端から検索して、指定されたデータと一致する最後のインデックスを取得します。
[ 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   // 検索開始位置
);

戻り値

  • 成功したとき: 見つかった位置のインデックス
  • 失敗したとき: -1

解説

この関数は、 ストリームバッファを終端から検索して、 指定されたデータと一致する最後のインデックスを取得します。

検索開始位置を指定することで、終端以外の位置から検索できます。

[Note] 注意
ストリームバッファの先頭インデックスは 0 です。

参照

SFXElasticStreamReader::FirstIndexOf


SFXElasticStreamReader::Read
ストリームからデータを読み込みます。
[ public, virtual ]
SFCError Read(
    SFXBufferPtr buffer   // 読み込むバッファ
);
[ public, virtual ]
SFCError Read(
    VoidPtr buffer   // 読み込むバッファ
    UInt32 size      // 読み込むバッファのサイズ
);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • ストリームが設定されていないとき: SFERR_INVALID_STATE
  • buffer 引数が null、size 引数が 0 以下、または SFXElasticStreamReader::GetReadableSize 関数の戻り値よりも大きなサイズのデータを読み込もうとしたとき: SFERR_FAILED

解説

この関数は、 ストリームバッファ内のデータを指定した変数に読み込みます。

読み込み可能なデータサイズは SFXElasticStreamReader::GetReadableSize 関数で取得できます。

[Caution] 注意

SFXBuffer 型の buffer 引数を使用するときは、 この関数を呼び出す前に読み込むデータサイズを SFXBuffer::SetSize 関数で設定する必要があります。

buffer 引数が null、size 引数が 0 以下、または SFXElasticStreamReader::GetReadableSize 関数の戻り値よりも大きなサイズのデータを読み込もうとしたときは、 SFERR_FAILED を返します。

[Tip] Tip
SFXElasticStreamReader::Fetch 関数を呼び出すことにより、 ストリームに関連付けられたストレージからストリームバッファにデータを読み込みます。

参照

SFXElasticStreamReader::GetReadableSize | SFXElasticStreamReader::Fetch | ストリームバッファ | 可変長バッファストリーム | ストレージ


SFXElasticStreamReader::Release
ストリームを解放します。
[ public ]
Void Release(Void);

解説

この関数は、 このストリームからの読み込みをキャンセルし、ストリームを解放します。

[Note] 注意

この関数は、ストリームのデストラクタから呼び出されます。

また、SFXElasticStreamReader::Cancel 関数を呼び出して、 このストリームからの読み込みをキャンセルします。

参照

SFXElasticStreamReader::Cancel


SFXElasticStreamReader::ResetTrigger
トリガー(コールバック関数が呼ばれるタイミング)をリセットします。
[ public, virtual ]
SFCError ResetTrigger(Void);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • ストリームが設定されていない、 または 既に SFXElasticStreamReader::Fetch 関数を呼び出してコールバックを待っているとき: SFERR_INVALID_STATE

解説

この関数は、 SFXElasticStreamReader::SetTrigger 関数で設定したトリガー(コールバック関数が呼ばれるタイミング)をリセットします。

参照

SFXElasticStreamReader::SetTrigger | SFXElasticStreamReader::Triggers | SFXElasticStreamReader::Fetch


SFXElasticStreamReader::Seek
読み込みポインタを進めます。
[ public, virtual ]
SFCError Seek(
    UInt32 size   // 進めるサイズ
);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • ストリームが設定されていないとき: SFERR_INVALID_STATE
  • 読み込みポインタがストリームバッファの終端を越えたとき: SFERR_FAILED

解説

この関数は、 ストリームバッファからデータを読み込むための読み込みポインタを進めます。

参照

ストリームバッファ


SFXElasticStreamReader::Triggers
トリガーによりコールバック関数が呼び出されたか判定します。
[ public, virtual, const ]
Bool Triggers(Void);

戻り値

  • SFXElasticStreamReader::SetTrigger 関数で設定したトリガーによって、コールバック関数が呼び出されたとき: true
  • そうでないとき: false

解説

この関数は、 SFXElasticStreamReader::SetTrigger 関数で設定したトリガーによって、 コールバック関数が呼び出されたか判定します。

[Tip] Tip
SFXElasticStreamReader::Fetch 関数で登録したコールバック関数の中で使います。

参照

SFXElasticStreamReader::SetTrigger | SFXElasticStreamReader::ResetTrigger | SFXElasticStreamReader::Fetch


SFXElasticStreamReader::SetTrigger
トリガー(コールバック関数が呼ばれるタイミング)を設定します。
[ public, virtual ]
SFCError SetTrigger(
    UInt32 size   // トリガーとなるサイズ
);
[ public, virtual ]
SFCError SetTrigger(
    SFXBufferConstRef buffer   // トリガーとなるデータ
);
[ public, virtual ]
SFCError SetTrigger(
    VoidConstPtr buffer   // トリガーとなるデータ
    UInt32 size           // トリガーとなるデータのサイズ
);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • ストリームが設定されていない、 または SFXElasticStreamReader::Fetch 関数によりコールバック関数が登録された状態であるとき: SFERR_INVALID_STATE
  • メモリ不足のとき: SFERR_NO_MEMORY

解説

SFXElasticStreamReader::Fetch 関数で登録されたコールバック関数は、 このストリームに設定されたストレージの終端までデータを読み込んだときに呼び出されます。

この関数は、これら以外のタイミングでコールバック関数を呼び出すためのトリガーを設定します。

size 引数だけを指定した場合は、 そのサイズのデータを読み込む毎にコールバック関数が呼び出されます。

buffer 引数を指定した場合は、 それと同じデータを読み込む毎にコールバック関数が呼び出されます。

使用例

改行文字を読み込む毎にコールバック関数を呼び出す方法は、以下の通りです。

SetTrigger("\r\n", 2);

参照

SFXElasticStreamReader::ResetTrigger | SFXElasticStreamReader::Triggers | SFXElasticStreamReader::Fetch