前のページ次のページ上に戻るホーム BREW C++ ライブラリ & GUI フレームワーク & XML ミドルウェア : SophiaFramework UNIVERSE 5.0
SFXSource
ISource インターフェースからデータを読み込むのためのストレージ クラスです。
#include <SFXSource.h.hpp>
class SFXSource : public SFXStorage;
SFMTYPEDEFCLASS(SFXSource)

継承図

SFXSource クラスの継承図

協調図

SFXSource クラスの協調図

解説

制限事項

書き込み用ストリームは取得できません。読み込み位置の移動もサポートしません。

■ SFXSource クラスの使用手順

  1. SFBSource インターフェースを作成し読み出すストレージを用意します。それから、SFXSource::Open 関数を呼び出してストレージを登録します。
  2. SFXSource::GetStreamReader 関数を使って読み込み用ストリームを取得します。
  3. 取得したストリームを使い、データを読み込みます。ストレージの種類によっては、コールバック関数を使ってデータを読み込みます。
  4. ストリームを使い終わったら、SFXSource::Close 関数を呼び出してリソースを解放します。

例 772. ISource インターフェースからデータを読み込む方法

Void MyClass::UseSFXSource(Void)
{
    SFXSource source; 
    static ACharConst data[] = "test data"; // SFBSource ストレージから読み込むデータ
    SFXAnsiString string;           // SFBSource ストレージから読み込む変数
    SFXBinaryStreamReader reader;   // 読み込み用ストリーム
    SFBSourceUtilSmp util;
    SFBSourceSmp bs;

    // メモリブロックから SFBSource を作成する
    util = SFBSourceUtil::NewInstance();
    util->SourceFromMemory(data, sizeof(data), null, null, &bs);

    // SFBSource ストレージをオープンする
    if (source.Open(bs) == SFERR_NO_ERROR) {

        // 読み込み用ストリームを取得する
        if (source.GetStreamReader(1024, &reader) == SFERR_NO_ERROR) {

            reader.Fetch();  // SFBSource ストレージから読み込みストリームにデータを読み込む 
            reader >> string; // 読み込みストリームから string にデータを読み込む

            // SFBSource ストレージから読み込んだ内容を表示する
            TRACE("size = %d", string.GetLength());   // 文字列の長さを表示する: "size = 9"
            TRACE("read = %s", string.GetCString());  // 文字列を表示する: "read = test data"   

            reader.Release();  // 読み込みストリームを解放する
        }
        source.Close();  // SFBSource ストレージをクローズする
    }
    return;
}

参照

SFXBinaryStreamReader | SFXAnsiStringStreamReader | SFXWideStringStreamReader

メンバ

コンストラクタ/デストラクタ
SFXSource( Void )
SFXSource クラスのコンストラクタです。
~SFXSource( Void )
SFXSource クラスのデストラクタです。
パブリック関数
SFCError AsSFBAStream( SFBAStreamSmpPtr result )
内部で管理されている SFBSource クラスのインスタンスを SFBAStream クラスのインスタンスに変換します。
SFCError AsSFBSource( SFBSourceSmpPtr result )
内部で管理されている SFBSource クラスのインスタンスを読み書き属性をつけて取得します。
Void Cancel( Void )
コールバックをキャンセルします。
Void Close( Void )
内部で使っているソースを閉じます。
SFBSourceSmpConstRef GetSFBSource( Void )
内部で使っている SFBSource クラスのインスタンスを取得します。
SFCError GetStreamReader( UInt32 size , SFXStreamReaderPtr result )
GetStreamReader( SFXStreamReaderPtr result )
読み込み用ストリームを取得します。
SFCError GetStreamWriter( UInt32 size , SFXStreamWriterPtr result )
GetStreamWriter( SFXStreamWriterPtr result )
【 現在、この関数は使えません。 】
SFCError Open( SFXMemoryConstRef memory )
Open( SFBAStreamSmpConstRef stream )
Open( SFBSourceSmpConstRef source )
Open( SFXTCPSocketConstRef socket )
Open( SFXFileConstRef file )
Open( SFXZIPDecoderConstRef zip )
ソースを登録します。
SFCError Read( VoidPtr buffer , UInt32Ptr size )
読み込み用ストリームを使わずにソースからデータを読み込みます。
SFCError ScheduleRead( CallbackSPP spp , VoidPtr reference )
読み込み用ストリームを使わないソースからのデータ読み込みをスケジュールします。
SFCError ScheduleWrite( CallbackSPP spp , VoidPtr reference )
【 現在、この関数は使えません。 】
SFCError Write( VoidConstPtr buffer , UInt32Ptr size )
【 現在、この関数は使えません。 】
CallbackSPP (SFXStorage から継承)
コールバック関数を表す型です。

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

解説

リソースは確保されません。


SFXSource::~SFXSource
SFXSource クラスのデストラクタです。
[ public, virtual ]
virtual ~SFXSource(Void);

SFXSource::AsSFBAStream
内部で管理されている SFBSource クラスのインスタンスを SFBAStream クラスのインスタンスに変換します。
[ public, virtual, const ]
SFCError AsSFBAStream(
    SFBAStreamSmpPtr result   // 結果の SFBAStream クラスのインスタンスへのポインタ
);

引数

result

変換後の SFBAStream クラスのインスタンスへのポインタを指定します。

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • データソースが閉じているとき : SFERR_INVALID_STATE
  • 引数が null のとき : SFERR_INVALID_PARAM

解説

データソースの内容を非同期ストリームとして扱います。


SFXSource::AsSFBSource
内部で管理されている SFBSource クラスのインスタンスを読み書き属性をつけて取得します。
[ public, virtual, const ]
SFCError AsSFBSource(
    SFBSourceSmpPtr result   // 結果の SFBSource クラスのインスタンスへのポインタ
);

引数

result

SFBSource クラスのインスタンスへのポインタを指定します。

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • データソースが閉じているとき : SFERR_INVALID_STATE
  • 引数が null のとき : SFERR_INVALID_PARAM

解説

内部で管理しているデータソースの内容を読み書き属性をつけて取得します。


SFXSource::Cancel
コールバックをキャンセルします。
[ public, virtual ]
Void Cancel(Void);

解説

内部で使っている SFBSource クラスのインスタンスに登録されているコールバックをキャンセルします。

参照

SFXSource::Close


SFXSource::Close
内部で使っているソースを閉じます。
[ public ]
Void Close(Void);

解説

登録していたコールバックもキャンセルします。

参照

SFXSource::Cancel


SFXSource::GetSFBSource
内部で使っている SFBSource クラスのインスタンスを取得します。
[ public, const ]
SFBSourceSmpConstRef GetSFBSource(Void);

SFXSource::GetStreamReader
読み込み用ストリームを取得します。
[ public, virtual ]
SFCError GetStreamReader(
    UInt32 size                 // バッファサイズ
    SFXStreamReaderPtr result   // 読み込み用ストリームへのポインタ
);
[ public, virtual ]
SFCError GetStreamReader(
    SFXStreamReaderPtr result   // 読み込み用ストリームへのポインタ
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • 引数が null のとき : SFERR_INVALID_PARAM
  • ソースが登録されていない( SFXSource::Open 関数を呼び出していない )とき : SFERR_INVALID_STATE
  • メモリ不足のとき : SFERR_NO_MEMORY

解説

読み込み用ストリームのバッファ サイズを指定することも可能です。 読み込み用ストリームは、読み込むデータの種類に応じて SFXBinaryStreamReaderSFXAnsiStringStreamReader、または SFXWideStringStreamReader クラスを使い分けます。

参照

SFXSource::GetStreamWriter | SFXBinaryStreamReader | SFXAnsiStringStreamReader | SFXWideStringStreamReader


SFXSource::GetStreamWriter
【 現在、この関数は使えません。 】
[ public, virtual ]
SFCError GetStreamWriter(
    UInt32 size                 // サイズ
    SFXStreamWriterPtr result   // 書き込み用ストリームへのポインタ
);
[ public, virtual ]
SFCError GetStreamWriter(
    SFXStreamWriterPtr result   // 書き込み用ストリームへのポインタ
);

解説

SFERR_UNSUPPORTED を返します。

参照

SFXSource::GetStreamReader


SFXSource::Open
ソースを登録します。
[ public ]
SFCError Open(
    SFXMemoryConstRef memory   
);
[ public ]
SFCError Open(
    SFXZIPDecoderConstRef zip   
);
[ public ]
SFCError Open(
    SFXFileConstRef file   
);
[ public ]
SFCError Open(
    SFXTCPSocketConstRef socket   
);
[ public ]
SFCError Open(
    SFBSourceSmpConstRef source   
);
[ public ]
SFCError Open(
    SFBAStreamSmpConstRef stream   
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • ソースが既に登録されているとき : SFERR_INVALID_STATE
  • 引数が null のとき : SFERR_INVALID_PARAM
  • メモリ不足のとき : SFERR_NO_MEMORY
  • 失敗したとき : SFERR_FAILED

参照

SFXSource::Close


SFXSource::Read
読み込み用ストリームを使わずにソースからデータを読み込みます。
[ public, virtual ]
SFCError Read(
    VoidPtr buffer   // 読み込んだデータを格納するバッファ
    UInt32Ptr size   // バッファのサイズ、読み込んだデータのサイズ
);

引数

buffer

読み込んだデータを格納するバッファを指定します。

size

SFXSource::Read 関数の呼び出し時には、バッファ サイズを指定します。 SFXSource::Read 関数が終了すると、読み込んだデータのサイズが格納されます。

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • ソースが登録されていない( SFXSource::Open 関数を呼び出していない )とき : SFERR_INVALID_STATE
  • サイズが null のとき : SFERR_INVALID_PARAM
  • 再試行が必要なとき : AEE_STREAM_WOULDBLOCK

解説

SFXSource::Read 関数を使うには、SFXSource::Open 関数を呼び出してソースを登録する必要があります。

参照

SFXSource::Open | SFXSource::ScheduleRead


SFXSource::ScheduleRead
読み込み用ストリームを使わないソースからのデータ読み込みをスケジュールします。
[ public, virtual ]
SFCError ScheduleRead(
    CallbackSPP spp     // コールバック関数
    VoidPtr reference   // コールバック関数に渡すデータ
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • ソースが登録されていない( SFXSource::Open 関数を呼び出していない )とき、またはコールバックが既に登録されているとき : SFERR_INVALID_STATE

解説

SFXSource::ScheduleRead 関数は、SFXSource::Read 関数を使ってデータ受信するコールバック関数を登録するために使います。

SFXSource::Read 関数の戻り値が AEE_STREAM_WOULDBLOCK である場合、SFXSource::ScheduleRead 関数でコールバック関数を登録して、再びデータ受信を試みます。

参照

SFXSource::Read


SFXSource::ScheduleWrite
【 現在、この関数は使えません。 】
[ public, virtual ]
SFCError ScheduleWrite(
    CallbackSPP spp     // コールバック関数
    VoidPtr reference   // コールバックに渡すデータ
);

解説

SFERR_UNSUPPORTED を返します。


SFXSource::Write
【 現在、この関数は使えません。 】
[ public, virtual ]
SFCError Write(
    VoidConstPtr buffer   // 書き込むデータ
    UInt32Ptr size        // 書き込むデータのサイズ
);

解説

SFERR_UNSUPPORTED を返します。