nlib
ZlibInputStream.h
[詳解]
1 
2 #pragma once
3 #ifndef INCLUDE_NN_NLIB_ZLIBINPUTSTREAM_H_
4 #define INCLUDE_NN_NLIB_ZLIBINPUTSTREAM_H_
5 #ifndef NLIB_NO_ZLIB
6 
7 #include <stdlib.h>
8 #include <zlib.h>
9 #include "nn/nlib/InputStream.h"
11 
12 NLIB_NAMESPACE_BEGIN
13 
15  typedef void* (*ReallocFunc)(void* p, size_t n);
16  void* buf_in;
17  void* buf_out;
18  size_t buffer_size;
19  ReallocFunc realloc_func;
20 
21  public:
23  buf_out(NULL),
24  buffer_size(64 * 1024),
25  realloc_func(::nlib_realloc) {}
26  NLIB_CEXPR ZlibInputStreamSettings(void* buf_in_, void* buf_out_,
27  size_t buffer_size_) NLIB_NOEXCEPT
28  : buf_in(buf_in_),
29  buf_out(buf_out_),
30  buffer_size(buffer_size_),
31  realloc_func(::nlib_realloc) {}
32  NLIB_CEXPR ZlibInputStreamSettings(void* buf_in_, void* buf_out_, size_t buffer_size_,
33  ReallocFunc realloc_func_) NLIB_NOEXCEPT
34  : buf_in(buf_in_),
35  buf_out(buf_out_),
36  buffer_size(buffer_size_),
37  realloc_func(realloc_func_) {}
38 };
39 
40 namespace detail {
41 
42 class NLIB_VIS_PUBLIC ZlibInputTransform NLIB_FINAL : public InputTransform {
43  public:
44  typedef ZlibInputStreamSettings::ReallocFunc ReallocFunc;
45  ZlibInputTransform() NLIB_NOEXCEPT;
46  virtual ~ZlibInputTransform() NLIB_NOEXCEPT NLIB_OVERRIDE;
47  errno_t Init(const ZlibInputStreamSettings& settings) NLIB_NOEXCEPT;
48  virtual errno_t Transform(InputStream* is, void* p, size_t nBytes,
49  size_t* written) NLIB_NOEXCEPT NLIB_OVERRIDE;
50  virtual void* GetWorkBuffer(size_t* n) NLIB_NOEXCEPT NLIB_OVERRIDE;
51  virtual errno_t OnSetStream(InputStream* is) NLIB_NOEXCEPT NLIB_OVERRIDE;
52  virtual errno_t OnClose() NLIB_NOEXCEPT NLIB_OVERRIDE;
53 
54  private:
55  z_stream m_Strm;
56  ReallocFunc m_Realloc;
57  unsigned char* m_BufIn; // to z_stream::next_in
58  unsigned char* m_BufOut; // to z_stream::next_out
59  size_t m_BufSize; // for both m_BufIn and m_BufOut
60  size_t m_BufOutCur;
61  size_t m_BufOutDataSize;
62  bool m_IsInternalBuffer;
63  bool m_IsZStreamEnd;
64  unsigned char m_BaseBuf[256]; // buffer for InputConverterStream
65 
66  NLIB_DISALLOW_COPY_AND_ASSIGN(ZlibInputTransform);
67 };
68 
69 } // namespace detail
70 
72  : public InputConverterStreamTempl<detail::ZlibInputTransform> {
73  public:
75  virtual ~ZlibInputStream() NLIB_NOEXCEPT NLIB_OVERRIDE;
76  errno_t Init() NLIB_NOEXCEPT {
78  return this->Init(settings);
79  }
80  errno_t Init(const ZlibInputStreamSettings& settings) NLIB_NOEXCEPT {
81  return m_Transform.Init(settings);
82  }
83 
84  private:
86 };
87 
88 NLIB_NAMESPACE_END
89 
90 #endif
91 #endif // INCLUDE_NN_NLIB_ZLIBINPUTSTREAM_H_
#define NLIB_NOEXCEPT
環境に合わせてnoexcept 又は同等の定義がされます。
Definition: Platform.h:2151
#define NLIB_FINAL
利用可能であればfinalが定義されます。そうでない場合は空文字列です。
#define NLIB_DISALLOW_COPY_AND_ASSIGN(TypeName)
TypeName で指定されたクラスのコピーコンストラクタと代入演算子を禁止します。
Definition: Config.h:126
入力ストリームの基底クラスを定義しています。
ZlibInputStreamの各種設定が格納されている構造体です。 コンストラクト時にはデフォルトの設定が格納され...
InputTransformの派生クラスを保持するためのクラスです。
ReallocFunc realloc_func
ZlibInputStream内部で利用するrealloc又はreallocと同等の関数です。
#define NLIB_OVERRIDE
利用可能であればoverrideが定義されます。そうでない場合は空文字列です。
size_t buffer_size
ZlibInputStreamSettings::buf_in, ZlibInputStreamSettings::buf_outのサイズです。
constexpr ZlibInputStreamSettings(void *buf_in_, void *buf_out_, size_t buffer_size_) noexcept
それぞれのデータメンバを設定します。
constexpr ZlibInputStreamSettings() noexcept
デフォルトコンストラクタです。デフォルト値を設定します。
void * buf_in
z_stream::next_inに設定されるバッファです。
#define NLIB_CEXPR
利用可能であればconstexprが定義されます。そうでない場合は空文字列です。
errno_t Init() noexcept
デフォルト設定で初期化します。
constexpr ZlibInputStreamSettings(void *buf_in_, void *buf_out_, size_t buffer_size_, ReallocFunc realloc_func_) noexcept
それぞれのデータメンバを設定します。
zlibを用いて圧縮したデータを読み込むためのストリームクラスです。
NLIB_CHECK_RESULT void * nlib_realloc(void *ptr, size_t size)
C標準関数のrealloc()を呼び出すweak関数です。nlibはこの関数を経由してrealloc()を呼び出します。 ...
#define NLIB_VIS_PUBLIC
関数やクラス等のシンボルをライブラリの外部に公開します。
Definition: Platform_unix.h:51
void * buf_out
z_stream::next_outに設定されるバッファです。
errno_t Init(const ZlibInputStreamSettings &settings) noexcept
settings で指定した値に従いストリーミングに利用するバッファ等の設定を行います。
int errno_t
intのtypedefで、戻り値としてPOSIXのエラー値を返すことを示します。
Definition: NMalloc.h:24