MySQL 8.0.39
Source Code Documentation
zstd_dec.h
Go to the documentation of this file.
1/* Copyright (c) 2019, 2024, Oracle and/or its affiliates.
2
3 This program is free software; you can redistribute it and/or modify
4 it under the terms of the GNU General Public License, version 2.0,
5 as published by the Free Software Foundation.
6
7 This program is designed to work with certain software (including
8 but not limited to OpenSSL) that is licensed under separate terms,
9 as designated in a particular file or component or in included license
10 documentation. The authors of MySQL hereby grant you an additional
11 permission to link the program and your derivative works with the
12 separately licensed software that they have either included with
13 the program or referenced in the documentation.
14
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License, version 2.0, for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
23
24#ifndef LIBBINLOGEVENTS_COMPRESSION_ZSTD_DEC_H_
25#define LIBBINLOGEVENTS_COMPRESSION_ZSTD_DEC_H_
26
27#include <zstd.h>
28
29#include "decompressor.h"
31
32namespace binary_log {
33namespace transaction {
34namespace compression {
35
36/// Decompressor class that uses the ZSTD library.
37class Zstd_dec : public Decompressor {
38 public:
39 using typename Decompressor::Char_t;
41 using typename Decompressor::Size_t;
42 static constexpr type type_code = ZSTD;
43
44 Zstd_dec();
45 ~Zstd_dec() override;
46
47 Zstd_dec(const Zstd_dec &) = delete;
48 Zstd_dec(const Zstd_dec &&) = delete;
49 Zstd_dec &operator=(const Zstd_dec &) = delete;
50 Zstd_dec &operator=(const Zstd_dec &&) = delete;
51
52 private:
53 /// @return ZSTD
54 type do_get_type_code() const override;
55
56 /// @copydoc Decompressor::do_reset
57 void do_reset() override;
58
59 /// @copydoc Decompressor::do_feed
60 void do_feed(const Char_t *input_data, Size_t input_size) override;
61
62 /// @copydoc Decompressor::do_decompress
63 [[NODISCARD]] std::pair<Decompress_status, Size_t> do_decompress(
64 Char_t *out, Size_t output_size) override;
65
66 /// @copydoc Decompressor::do_get_grow_constraint_hint
68
69 /// Deallocate the ZSTD decompression context.
70 void destroy();
71
72 /// ZSTD decompression context object.
73 ZSTD_DStream *m_ctx{nullptr};
74
75 /// ZSTD input buffer.
76 ZSTD_inBuffer m_ibuf{nullptr, 0, 0};
77
78 bool m_frame_boundary = false;
79};
80
81} // namespace compression
82} // end of namespace transaction
83} // end of namespace binary_log
84
85#endif // ifndef LIBBINLOGEVENTS_COMPRESSION_ZSTD_DEC_H_
Abstract base class for decompressors.
Definition: decompressor.h:57
unsigned char Char_t
Definition: decompressor.h:59
mysqlns::buffer::Buffer_view< Char_t >::Size_t Size_t
Definition: decompressor.h:60
mysqlns::buffer::Grow_constraint Grow_constraint_t
Definition: decompressor.h:62
Decompressor class that uses the ZSTD library.
Definition: zstd_dec.h:37
ZSTD_inBuffer m_ibuf
ZSTD input buffer.
Definition: zstd_dec.h:76
type do_get_type_code() const override
Definition: zstd_dec.cpp:42
~Zstd_dec() override
Definition: zstd_dec.cpp:33
void destroy()
Deallocate the ZSTD decompression context.
Definition: zstd_dec.cpp:35
std::pair< Decompress_status, Size_t > do_decompress(Char_t *out, Size_t output_size) override
Implement decompress.
Definition: zstd_dec.cpp:69
Zstd_dec & operator=(const Zstd_dec &&)=delete
static constexpr type type_code
Definition: zstd_dec.h:42
ZSTD_DStream * m_ctx
ZSTD decompression context object.
Definition: zstd_dec.h:73
bool m_frame_boundary
Definition: zstd_dec.h:78
Zstd_dec & operator=(const Zstd_dec &)=delete
void do_reset() override
Implement do_reset.
Definition: zstd_dec.cpp:44
Grow_constraint_t do_get_grow_constraint_hint() const override
Implement get_grow_constraint_hint.
Definition: zstd_dec.cpp:132
void do_feed(const Char_t *input_data, Size_t input_size) override
Implement feed.
Definition: zstd_dec.cpp:56
Description of a heuristic to determine how much memory to allocate.
Definition: grow_constraint.h:67
The namespace contains classes representing events that can occur in a replication stream.
#define NODISCARD
The function attribute [[NODISCARD]] is a replacement for [[nodiscard]] to workaround a gcc bug.
Definition: nodiscard.h:47