nlib
nn::nlib::ZlibInputStream クラスfinal

zlibを用いて圧縮したデータを読み込むためのストリームクラスです。 [詳解]

#include "nn/nlib/ZlibInputStream.h"

+ nn::nlib::ZlibInputStream の継承関係図

公開メンバ関数

コンストラクタ、デストラクタ、及び初期化
constexpr ZlibInputStream () noexcept
 デフォルトコンストラクタです。
 
errno_t Init () noexcept
 上記関数の引数省略版で、settingsをデフォルト値で渡します。
 
errno_t Init (const ZlibInputStreamSettings &settings) noexcept
 動作オプションを指定して初期化を行います。成功した場合は0を返します。 [詳解]
 
- 基底クラス nn::nlib::InputConverterStream に属する継承公開メンバ関数
errno_t SetStream (InputStream *istr) noexcept
 変換前のデータを読み込む入力ストリームを設定します。 [詳解]
 
InputStreamGetStream () const noexcept
 変換前のデータを読み込む入力ストリームを取得します。 [詳解]
 
- 基底クラス nn::nlib::InputStream に属する継承公開メンバ関数
errno_t GetErrorValue () const noexcept
 エラー値を取得します。 [詳解]
 
size_t Pos () const noexcept
 ストリーム上の現在位置を返します。 [詳解]
 
uint64_t Pos64 () const noexcept
 ストリーム上の現在位置を64bit値で返します。 [詳解]
 
bool IsEos () noexcept
 ストリームを最後まで読み終えている場合trueを返します。最後まで読み終えていない場合やエラーが発生している場合はfalseを返します。 [詳解]
 
int Read () noexcept
 ストリームから1バイトを読み込みます。 [詳解]
 
int Peek () noexcept
 ストリームを消費せずに次の1バイトを読み込みます。 [詳解]
 
size_t Skip (size_t nbytes) noexcept
 nbytes を読み飛ばします。 [詳解]
 
size_t Read (void *ptr, size_t nbytes) noexcept
 ptr で示されるメモリにnbytes 読み込みます。 [詳解]
 
template<size_t N>
size_t Read (nlib_byte_t(&buf)[N]) noexcept
 上記関数のテンプレートオーバーロードです。
 
bool Close () noexcept
 ストリームを閉じます。成功した場合にはtrueを返します。 [詳解]
 
bool Mark (size_t readlimit) noexcept
 現在の読み込み位置にGoBackToMark()で戻ることができるように設定します。 [詳解]
 
bool GoBackToMark () noexcept
 最後にMark()を実行した読み込み位置に戻ります。 [詳解]
 
bool IsMarkSupported () const noexcept
 このストリームがMark()GoBackToMark()をサポートしていればtrueを返します。
 
 operator bool () const
 オブジェクトが初期化済みで内部でエラーが発生していなければtrue、発生していればfalseを返します。
 
constexpr InputStream () noexcept
 デフォルトコンストラクタです。 派生クラスから呼び出されます。
 
virtual ~InputStream () noexcept
 デストラクタです。 派生クラスから呼び出されます。
 

その他の継承メンバ

- 基底クラス nn::nlib::InputStream に属する継承限定公開メンバ関数
void SetBuffer (void *p, size_t nbytes, bool is_mark_supported, bool is_buf_readonly) noexcept
 InputStreamが持つバッファを設定します。 [詳解]
 
void SetError (errno_t e) const noexcept
 InputStreamにエラーを設定します。 [詳解]
 

詳解

zlibを用いて圧縮したデータを読み込むためのストリームクラスです。

説明
zlibで圧縮したデータをストリーミングで読み込みます。 サイズの大きいデータでもストリーミングして読み込むことができます。
利用方法は、オブジェクトの構築後、Init()でバッファ等をセットアップし、SetStream()でベースストリームに関連付けてから、InputStreamと同様にデータを読み出します。
このストリームをクローズするとベースストリームはデタッチ(SetStream()以前の状態に戻る)されます。 ベースストリーム自体をクローズすることはありません。
データの読込中発生するエラーは、以下のようなものがあります。 zlibのエラーはerrnoのエラー値が設定されます。
  • Z_DATA_ERRORの場合はEILSEQ
  • Z_NEED_DICTの場合はEILSEQ
  • Z_STREAM_ERRORの場合はEIO
  • Z_MEM_ERRORの場合はENOMEM
  • Z_BUF_ERRORの場合はENOBUFS
  • 不意のEOFが見つかった場合はEOF
  • ベースストリームが失敗した場合はEIO
次に、SetStream()関数の動作について以下に解説します。
内部ではinflateInit2を呼び出していて、データの展開のための初期化を行なっています。 現在のところinflateInit2windowBits には47が指定されています。 z_streamzalloc, zfree, opaque にはいずれもZ_NULL が指定されています。
また、zlibinflateInit2が返すエラーについては以下のような変換が行われています。
  • Z_MEM_ERRORENOMEMに変換されます。
  • Z_STREAM_ERROREINVALに変換されます。
  • Z_VERSION_ERRORENOTSUPに変換されます。
オブジェクトの状態遷移
オブジェクトの状態遷移の概略は以下のとおりです。
dot_inline_dotgraph_13.png
各種例:
misc/usezlib/usezlib.cpp.

ZlibInputStream.h53 行目に定義があります。

関数詳解

◆ Init()

nn::nlib::ZlibInputStream::Init ( const ZlibInputStreamSettings settings)
noexcept

動作オプションを指定して初期化を行います。成功した場合は0を返します。

引数
[in]settings動作オプション
戻り値
0成功した場合
EALREADY既に初期化済みの場合
ENOMEM内部でメモリ確保に失敗した場合
EINVAL動作オプションの指定が不正だった場合

このクラス詳解は次のファイルから抽出されました: