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