前のページ次のページ上に戻るホーム SophiaFramework 2.2
SFUSourceStream
ISource からデータを読み取るストリームを表します。
#include <SFUSourceStream.hpp>
class SFUSourceStream : public SFUStream;
typedef SFUSourceStream&          SFUSourceStreamRef;
typedef SFUSourceStream*          SFUSourceStreamPtr;
typedef SFUSourceStream**         SFUSourceStreamHandle;
typedef const SFUSourceStream     ConstSFUSourceStream;
typedef const SFUSourceStream&    ConstSFUSourceStreamRef;
typedef const SFUSourceStream*    ConstSFUSourceStreamPtr;
typedef const SFUSourceStream**   ConstSFUSourceStreamHandle;

継承図

SFUSourceStream クラスの継承図

協調図

SFUSourceStream クラスの協調図

解説

BREW API の ISource インターフェイスからデータを読み取るストリームです。

制限事項

このストリームは、書き込みをサポートしません。 読み取り位置の移動もサポートしません。

使用の一般手順

SFUSourceStream は一般に次の手順で使用します。

  1. コンストラクタで ソースストリームを作成します。
  2. 読み出したい ISource インターフェイスを用意し、 Open を呼び出すことで、ストリームをオープンします。 この関数には、データ読み出しの通知を受け取るための コールバック関数を指定します。
  3. ISource から SFUSourceStream の内部バッファにデータを転送するために、 Fetch を呼び出します。
  4. ISource から内部バッファへのデータ転送が完了すると、 Open で登録したコールバック関数が呼び出されて NOTIFY_READ 通知が行われます。 転送時にエラーが発生した場合もコールバック関数が呼び出されます。
  5. コールバック関数では、 Get 関数やエクストラクタ >> を使用してデータを呼び出すことができます。
  6. データを呼び出した後、 ISource から内部バッファに追加のデータを転送するには、 Fetch を呼び出します。 ISource にデータが残っているかどうかは、 IsEOSIsFetchable で判定できます。
  7. ストリームの使用が終わったら Close を呼び出してリソースを解放します。

参照

SFUStream

メンバ

コンストラクタ/デストラクタ
public
SFUSourceStream SFUSourceStream クラスのコンストラクタです。
public
~SFUSourceStream SFUSourceStream クラスのデストラクタです。
パブリック関数
public
Available 読み取り可能なデータサイズを返します。
public
Close ソースストリームをクローズします。
public
Exception (SFAException から継承) エラーコードを取得/設定します。
public
Fetch ISource からストリームの内部バッファにデータを読み取ります。
public
Get 内部バッファからデータを読み取ります。
public
GetReadBufferSize 内部バッファのサイズを取得します。
public
IsEOS ストリームの終端に達したかを判定します。
public
IsFetchable ISource からストリームの内部バッファにデータを読み取ることができるかどうかを判定します。
public
Open ストリームをオープンします。
public
Put SFUSourceStream ではストリームへの書き込みはできません。
public
Seek SFUSourceStream ではストリームポインタの移動はできません。
public
SetReadBufferSize 内部バッファのサイズを設定します。
public
Tell 読み取った総データ量を返します。
public
operator<< (SFUStream から継承) ストリームのインサータ (書き込み演算子) です。
public
operator>> (SFUStream から継承) ストリームのエクストラクタ (読み取り演算子) です。
プロテクト関数
public
Exception (SFAException から継承) エラーコードを取得/設定します。
protected
endianbig (SFUStream から継承) 読み込みモード/書き込みモードのエンディアンをビッグエンディアンに設定します。
protected
endianlittle (SFUStream から継承) 読み込みモード/書き込みモードのエンディアンをリトルエンディアンに設定します。
protected
multi (SFUStream から継承) 任意のサイズのデータを読み書きします。
protected
offset (SFUStream から継承) ストリームの読み込み/書き込みポインタを指定された位置に移動します。
protected
seek (SFUStream から継承) ストリームの読み込み/書き込みポインタを指定された位置に移動します。
EndianEnum (SFUStream から継承) ストリームのエンディアン変換を表す定数です。
NO_ERROR (SFAException から継承) エラーがないことを表す定数です。
NotifyEnum コールバック関数に渡される通知定数です。
SeekEnum (SFUStream から継承) ストリームのシークモードを表す定数です。
SourceStreamSPP ソースストリームのコールバック関数を表す型です。

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

解説

データメンバを初期化します。 エラー値 SFERR_NO_ERROR が設定されます。

参照

SFUSourceStream::Open


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

解説

ストリームがオープンされている場合は、自動的にクローズされます。

参照

SFUSourceStream::Close


SFUSourceStream::Available
読み取り可能なデータサイズを返します。
[ public, virtual ]
UInt32 Available(Void);

戻り値

ストリームがオープンされていれば、 内部バッファから読み取り可能なサイズを返します。 ストリームがオープン状態でなければ、0 を返します。 エラー値は設定されません。

使用例

下記の例では、現在のバッファにデータがなくなったら、 Fetch を呼び出して、ISource から追加のデータを読み取っています。

while(stream.Available() > 0) {
    Byte b;
    stream >> b;
    ....
}

if (stream.IsFetchable()) {
    stream.Fetch();
}

参照

SFUSourceStream::IsEOS


SFUSourceStream::Close
ソースストリームをクローズします。
[ public ]
Void Close(Void);

解説

ISource インスタンスを解放してストリームをクローズます。 エラー値 SFERR_NO_ERROR が設定されます。

参照

SFUSourceStream::Open


SFUSourceStream::Fetch
ISource からストリームの内部バッファにデータを読み取ります。
[ public ]
Void Fetch(Void);

解説

ISource からデータの取得を試みます。 最大で読み取りバッファの空き容量に等しいサイズの取得を試みます。

  • ストリームがオープン状態にない場合は、エラー値 SFERR_STREAM_NOT_OPEN が設定されます。
  • ストリームの終端に達している場合は、エラー値 SFERR_STREAM_EOS が設定されます。
  • この関数が成功するとエラー値 SFERR_NO_ERROR が設定されます。

成功すると、読み取りが完了した時点で、 Open で登録されたコールバック関数に通知されます。 読み取り時のエラーは、エラー値として設定されず、 コールバック関数の第二引数に渡されます。

参照

SFUSourceStream::IsFetchable


SFUSourceStream::Get
内部バッファからデータを読み取ります。
[ public, virtual ]
UInt32 Get(
    VoidPtr ptr   // 読み取ったデータを格納するポインタ
    UInt32 size   // 読み取るデータサイズ
);

戻り値

失敗すると 0 を返します。 成功すると読み取ったデータサイズ (size) を返します。

解説

内部バッファからデータを読み取ります。

  • ストリームがオープン状態でない場合は、 エラー値 SFERR_STREAM_NOT_OPEN が設定されます。
  • ptr が NULL で、size が 0 でない場合は、エラー値 SFERR_INVALID_PARAM が設定されます。
  • 指定されたサイズのデータが読み取れない場合は、 エラー値 SFERR_STREAM_READ_FAILED が設定されます。
  • 読み取りに成功すると、エラー値 SFERR_NO_ERROR が設定されます。

この関数が失敗すると、読み取りポインタが進むことはありません。

参照

SFUSourceStream::Fetch | SFUSourceStream::Put


SFUSourceStream::GetReadBufferSize
内部バッファのサイズを取得します。
[ public ]
UInt32 GetReadBufferSize(Void);

参照

SFUSourceStream::SetReadBufferSize


SFUSourceStream::IsEOS
ストリームの終端に達したかを判定します。
[ public, virtual ]
Bool IsEOS(Void);

解説

ストリームの終端に達したかを判定します。 Available が 0 を返すからといって、ストリームの終端であるわけではありません。 Fetch を呼び出すことで、さらなるデータを読み取ることができる場合があるからです。

IsFetchable が TRUE で、かつ、 Available が 0 の場合に、 ストリームが終端であると判断されます。

参照

SFUSourceStream::Available | SFUSourceStream::IsFetchable


SFUSourceStream::IsFetchable
ISource からストリームの内部バッファにデータを読み取ることができるかどうかを判定します。
[ public ]
Bool IsFetchable(Void);

解説

この関数が TRUE を返す場合、 Fetch を呼び出すことで、さらなるデータを内部バッファに読み取ることができます。

この関数が FALSE を返す場合、 現在内部バッファに格納されているデータで終了となります。

参照

SFUSourceStream::Fetch


SFUSourceStream::Open
ストリームをオープンします。
[ public ]
SFCError Open(
    const SFUBrewPtr< SFBSource > & src   // ISource インスタンス
    SourceStreamSPP func                  // コールバック関数
    VoidPtr data                          // コールバック関数に渡すデータ
);

戻り値

エラー値を返します。 エラー値は Exception 関数で取得することもできます。

解説

ISource からデータを読み込むストリームをオープンします。

  • src が NULL の場合はエラー値 SFERR_INVALID_PARAM が設定されます。
  • 読み取りバッファの確保に失敗した場合は、エラー値 SFERR_NO_MEMORY が設定されます。
  • 成功した場合はエラー値 SFERR_NO_ERROR が設定されます。

参照

SFUSourceStream::Close


SFUSourceStream::Put
SFUSourceStream ではストリームへの書き込みはできません。
[ public, virtual ]
UInt32 Put(
    ConstVoidPtr ptr   
    UInt32 size        
);

解説

SFUSourceStream ではストリームへの書き込みはできません。 この関数を呼び出すと、エラー値 SFERR_UNAVAILABLE が設定され、 UInt32(-1) が返ります。

参照

SFUSourceStream::Get


SFUSourceStream::Seek
SFUSourceStream ではストリームポインタの移動はできません。
[ public, virtual ]
UInt32 Seek(
    SInt32 offset   
    SeekEnum dir    
    ModeEnum mode   
);

解説

この関数を呼び出すと、 エラー値 SFERR_UNAVAILABLE が設定され、 UInt32(-1) が返ります。

参照

SFUSourceStream::Tell


SFUSourceStream::SetReadBufferSize
内部バッファのサイズを設定します。
[ public ]
Void SetReadBufferSize(
    UInt32 size   // サイズ
);

解説

内部バッファのサイズを指定します。 このサイズは、次回の SFUSourceStream::Open 呼び出し時に使用されます。

参照

SFUSourceStream::GetReadBufferSize


SFUSourceStream::Tell
読み取った総データ量を返します。
[ public, virtual ]
UInt32 Tell(
    ModeEnum mode   // SFUStream::MODE_READ を指定してください
);

戻り値

ストリームがオープン状態で mode が SFUStream::MODE_READ の場合、 現在までに読み取ったデータ量を返します。 それ以外の場合は UInt32(-1) を返します。

参照

SFUSourceStream::Seek


SFUSourceStream::NotifyEnum
コールバック関数に渡される通知定数です。
enum NotifyEnum {
    NOTIFY_READ = 1
};

解説

コールバック関数に渡される通知定数です。 SFUSourceStream::Fetch 呼び出しの後、ISource からのデータ読み取りが完了すると、 NOTIFY_READ を指定してコールバック関数が呼び出されます。

参照

SFUSourceStream::Open | SFUSourceStream::SourceStreamSPP


SFUSourceStream::SourceStreamSPP
ソースストリームのコールバック関数を表す型です。
typedef Void(* SFUSourceStream::SourceStreamSPP)(NotifyEnum notify, SFCError error, VoidPtr data)

参照

SFUSourceStream::Open | SFUSourceStream::NotifyEnum