![]() ![]() ![]()
|
BREW C++ ライブラリ & GUI フレームワーク & XML ミドルウェア : SophiaFramework UNIVERSE 5.0 |
#include <SFXZIPDecoder.h.hpp>
class SFXZIPDecoder : public SFXStorage;
SFMTYPEDEFCLASS(SFXZIPDecoder)


SFXFile クラスや SFXTCPSocket クラスなどのストレージ クラス、SFBSource クラス、SFBAStream クラスの Deflate 圧縮されたデータを登録し、解凍したデータを取得できます。
■ SFXZIPDecoder クラスの使用手順
例 780. gzip ファイルを解凍する方法
// コールバックを使うため、SFXZIPDecoder のインスタンスはクラスのメンバ変数にする class MyClass { private: SFXFile _file; SFXZIPDecoder _decoder; // SFXZIPDecoder クラスのインスタンス SFXAnsiStringStreamReader _reader; // 読み込み用ストリーム SFXAnsiString _unzipString; // 解凍後の文字列 public: Void Start(Void); // コールバック関数 CALLBACK_DECLARE_SFXANSISTRINGSTREAMREADER(OnFetch) }; Void MyClass::Start(Void) { SFCError error; // エラー // 読み書きモードでファイルを開く if ((error = _file.OpenReadOnly(SFXPath("/testdata.tar.gz"))) == SFERR_NO_ERROR) { // ストレージ ( ファイル ) をデコーダに登録する if ((error = _decoder.Open(_file)) == SFERR_NO_ERROR) { // デコーダから読み込み用ストリームを取得する if ((error = _decoder.GetStreamReader(&_reader)) == SFERR_NO_ERROR) { // フェッチする if ((error = _reader.Fetch(CALLBACK_FUNCTION(OnFetch))) != SFERR_NO_ERROR) { // エラーのとき _reader.Release(); } } if (error != SFERR_NO_ERROR) { // エラーのとき _decoder.Close(); } } if (error != SFERR_NO_ERROR) { // エラーのとき _file.Close(); } } } // フェッチが完了したときに呼び出されるコールバック関数 CALLBACK_IMPLEMENT_SFXANSISTRINGSTREAMREADER(MyClass, OnFetch, error) { if (error == SFERR_NO_ERROR) { // エラーが発生していないとき // 解凍したデータを _unzipString 変数に読み込む if ((error = _reader.ReadSFXAnsiString(&_unzipString)) == SFERR_NO_ERROR) { // 文字列を表示する TRACE("%s", _unzipString.GetCString()); } } // 終了処理 _decoder.Close(); _file.Close(); }
| コンストラクタ/デストラクタ |
|---|
|
SFXZIPDecoder( Void ) SFXZIPDecoder クラスのコンストラクタです。
|
|
~SFXZIPDecoder( Void ) SFXZIPDecoder クラスのデストラクタです。
|
| パブリック関数 | |
|---|---|
| SFCError |
AsSFBAStream(
SFBAStreamSmpPtr result
) 内部で管理されているストリームを SFBAStream クラスのインスタンスに変換します。
|
| SFCError |
AsSFBSource(
SFBSourceSmpPtr result
) 内部で管理されているストリームを SFBSource クラスのインスタンスに変換します。
|
| Void |
Cancel( Void ) 登録したコールバックをキャンセルします。
|
| Void |
Close( Void ) ストレージを閉じます。
|
| SFBUnzipAStreamSmpConstRef |
GetSFBUnzipAStream( Void ) 内部で管理されている SFBUnzipAStream クラスのインスタンスを取得します。
|
| SFCError |
GetStreamReader(
UInt32 size
, SFXStreamReaderPtr result
) GetStreamReader( SFXStreamReaderPtr result ) 読み込み用ストリームを取得します。
|
| SFCError |
GetStreamWriter(
UInt32 size
, SFXStreamWriterPtr result
) GetStreamWriter( SFXStreamWriterPtr result ) 【 現在、この関数は使えません。 】
|
| SFCError |
Open(
SFXStorageConstRef storage
) Open( SFBSourceSmpConstRef source ) Open( SFBAStreamSmpConstRef stream ) ストレージをデコーダに登録します。
|
| 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 から継承)
コールバック関数を表す型です。
|
[ public, explicit ] SFXZIPDecoder(Void);
SFBUnzipAStream インターフェースは確保されません。
[ public, virtual ] virtual ~SFXZIPDecoder(Void);
SFXZIPDecoder::Close 関数が呼び出されます。
[ public, virtual, const ] SFCError AsSFBAStream( SFBAStreamSmpPtr result // 結果を格納するポインタ );
[ public, virtual, const ] SFCError AsSFBSource( SFBSourceSmpPtr result // 結果を格納するポインタ );
![]() |
注意 |
|---|---|
| SFXZIPDecoder::AsSFBSource 関数の内部では SFBSourceUtil クラスが使われています。 | |
[ public, virtual ] Void Cancel(Void);
内部で使っている SFBUnzipAStream クラスのインスタンスに登録されたコールバックをキャンセルします。
[ public ] Void Close(Void);
登録していたコールバックはキャンセルされ、内部の SFBUnzipAStream クラスのインスタンスは解放されます。
[ public, const ] SFBUnzipAStreamSmpConstRef GetSFBUnzipAStream(Void);
[ public, virtual ] SFCError GetStreamReader( UInt32 size // バッファ サイズ SFXStreamReaderPtr result // 読み込み用ストリームへのポインタ );
[ public, virtual ] SFCError GetStreamReader( SFXStreamReaderPtr result // 読み込み用ストリームへのポインタ );
読み込み用ストリームのバッファ サイズを指定することも可能です。 読み込み用ストリームは、データの種類に応じて、SFXBinaryStreamReader、 SFXAnsiStringStreamReader、または SFXWideStringStreamReader クラスを使い分けます。
![]() |
注意 |
|---|---|
| SFXZIPDecoder::GetStreamReader 関数を呼び出す前に、SFXZIPDecoder::Open 関数を使ってソースをデコーダーに登録する必要があります。 | |
SFXZIPDecoder::Open | SFXZIPDecoder::GetStreamWriter | SFXBinaryStreamReader | SFXAnsiStringStreamReader | SFXWideStringStreamReader
[ public, virtual ] SFCError GetStreamWriter( UInt32 size // サイズ SFXStreamWriterPtr result // 書き込み用ストリームへのポインタ );
[ public, virtual ] SFCError GetStreamWriter( SFXStreamWriterPtr result // 書き込み用ストリームへのポインタ );
SFERR_UNSUPPORTED を返します。
[ public ] SFCError Open( SFXStorageConstRef storage // 解凍するデータのストレージ );
[ public ] SFCError Open( SFBAStreamSmpConstRef stream // 解凍するデータの SFBAStream );
[ public ] SFCError Open( SFBSourceSmpConstRef source // 解凍するデータの SFBSource );
内部の SFBUnzipAStream クラスのインスタンスに、SFXStorage、SFBAStream、SFBSource のいずれかのクラスのインスタンスを設定します。
[ public, virtual ] SFCError Read( VoidPtr buffer // 読み込んだデータを格納するバッファ UInt32Ptr size // バッファのサイズ、読み込んだデータのサイズ );
読み込んだデータを格納するバッファを指定します。
関数の呼び出し時には、バッファのサイズを指定します。Read 関数が終了すると、読み込んだデータのサイズが格納されます。
![]() |
注意 |
|---|---|
| SFXZIPDecoder::Read 関数を呼び出す前に、SFXZIPDecoder::Open 関数を使ってソースをデコーダーに登録する必要があります。 | |
[ public, virtual ] SFCError ScheduleRead( CallbackSPP spp // コールバック関数 VoidPtr reference // コールバック関数に渡すデータ );
SFXZIPDecoder::ScheduleRead 関数は、SFXZIPDecoder::Read 関数を使ってデータ受信するコールバック関数を登録するために使います。
※ SFXZIPDecoder::Read 関数の戻り値が AEE_STREAM_WOULDBLOCK である場合、SFXZIPDecoder::ScheduleRead 関数でコールバック関数を登録して、再びデータ受信を試みます。
![]() |
注意 |
|---|---|
| SFXZIPDecoder::ScheduleRead 関数を呼び出す前に、SFXZIPDecoder::Open 関数を使ってソースをデコーダーに登録する必要があります。 | |
[ public, virtual ] SFCError ScheduleWrite( CallbackSPP spp // コールバック関数 VoidPtr reference // コールバックに渡すデータ );
SFERR_UNSUPPORTED を返します。
[ public, virtual ] SFCError Write( VoidConstPtr buffer // 書き込むデータ UInt32Ptr size // 書き込むデータのサイズ );
SFERR_UNSUPPORTED を返します。
|
Copyright (C) 2002 - 2008 Sophia Cradle Incorporated All Rights Reserved. |
![]() ![]() ![]()
|