Spicy
zlib_.h
1 // Copyright (c) 2020-2021 by the Zeek Project. See LICENSE for details.
2 
3 #pragma once
4 
5 #include <memory>
6 #include <string>
7 
8 #include <hilti/rt/types/bytes.h>
9 #include <hilti/rt/types/stream.h>
10 
11 namespace spicy::rt::zlib {
12 
13 namespace detail {
14 struct State;
15 } // namespace detail
16 
18 class ZlibError : public hilti::rt::RuntimeError {
19  using hilti::rt::RuntimeError::RuntimeError;
20 };
21 
25 class Stream {
26 public:
34  Stream(int64_t window_bits = 15 + 32);
35  ~Stream();
36 
37  Stream(const Stream&) = default;
38  Stream(Stream&&) noexcept = default;
39  Stream& operator=(const Stream&) = default;
40  Stream& operator=(Stream&&) noexcept = default;
41 
49  hilti::rt::Bytes decompress(const hilti::rt::Bytes& data);
50 
58  hilti::rt::Bytes decompress(const hilti::rt::stream::View& data);
59 
65  hilti::rt::Bytes finish();
66 
67 private:
68  std::shared_ptr<detail::State> _state;
69 };
70 
72 inline Stream init(int64_t window_bits) // NOLINT(google-runtime-references)
73 {
74  return Stream(window_bits);
75 }
76 
78 inline hilti::rt::Bytes decompress(Stream& stream, // NOLINT(google-runtime-references)
79  const hilti::rt::Bytes& data) {
80  return stream.decompress(data);
81 }
82 
84 inline hilti::rt::Bytes decompress(Stream& stream, // NOLINT(google-runtime-references)
85  const hilti::rt::stream::View& data) {
86  return stream.decompress(data);
87 }
88 
90 inline hilti::rt::Bytes finish(Stream& stream) // NOLINT(google-runtime-references)
91 {
92  return stream.finish();
93 }
94 
96 extern uint64_t crc32_init();
97 
99 extern uint64_t crc32_add(uint64_t crc, const hilti::rt::Bytes& data);
100 
101 } // namespace spicy::rt::zlib
102 
103 namespace hilti::rt::detail::adl {
104 extern inline std::string to_string(const spicy::rt::zlib::Stream& /* x */, adl::tag /*unused*/) {
105  return "<zlib stream>";
106 }
107 } // namespace hilti::rt::detail::adl
Definition: bytes.h:155
Definition: zlib_.h:25
Definition: stream.h:1001
Definition: zlib_.h:18
Definition: deferred-expression.h:41
hilti::rt::Bytes finish()
Definition: zlib.cc:31
hilti::rt::Bytes decompress(const hilti::rt::Bytes &data)
Definition: zlib.cc:68
Definition: zlib_.h:11