xref: /aosp_15_r20/external/zlib/google/compression_utils.h (revision 86ee64e75fa5f8bce2c8c356138035642429cd05)
1*86ee64e7SAndroid Build Coastguard Worker // Copyright 2014 The Chromium Authors
2*86ee64e7SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*86ee64e7SAndroid Build Coastguard Worker // found in the LICENSE file.
4*86ee64e7SAndroid Build Coastguard Worker 
5*86ee64e7SAndroid Build Coastguard Worker #ifndef THIRD_PARTY_ZLIB_GOOGLE_COMPRESSION_UTILS_H_
6*86ee64e7SAndroid Build Coastguard Worker #define THIRD_PARTY_ZLIB_GOOGLE_COMPRESSION_UTILS_H_
7*86ee64e7SAndroid Build Coastguard Worker 
8*86ee64e7SAndroid Build Coastguard Worker #include <string>
9*86ee64e7SAndroid Build Coastguard Worker 
10*86ee64e7SAndroid Build Coastguard Worker #include "base/containers/span.h"
11*86ee64e7SAndroid Build Coastguard Worker 
12*86ee64e7SAndroid Build Coastguard Worker namespace compression {
13*86ee64e7SAndroid Build Coastguard Worker 
14*86ee64e7SAndroid Build Coastguard Worker // Compresses the data in |input| using gzip, storing the result in
15*86ee64e7SAndroid Build Coastguard Worker // |output_buffer|, of size |output_buffer_size|. If the buffer is large enough
16*86ee64e7SAndroid Build Coastguard Worker // and compression succeeds, |compressed_size| points to the compressed data
17*86ee64e7SAndroid Build Coastguard Worker // size after the call.
18*86ee64e7SAndroid Build Coastguard Worker // |malloc_fn| and |free_fn| are pointers to malloc() and free()-like functions,
19*86ee64e7SAndroid Build Coastguard Worker // or nullptr to use the standard ones.
20*86ee64e7SAndroid Build Coastguard Worker // Returns true for success.
21*86ee64e7SAndroid Build Coastguard Worker bool GzipCompress(base::span<const char> input,
22*86ee64e7SAndroid Build Coastguard Worker                   char* output_buffer,
23*86ee64e7SAndroid Build Coastguard Worker                   size_t output_buffer_size,
24*86ee64e7SAndroid Build Coastguard Worker                   size_t* compressed_size,
25*86ee64e7SAndroid Build Coastguard Worker                   void* (*malloc_fn)(size_t),
26*86ee64e7SAndroid Build Coastguard Worker                   void (*free_fn)(void*));
27*86ee64e7SAndroid Build Coastguard Worker 
28*86ee64e7SAndroid Build Coastguard Worker // Compresses the data in |input| using gzip, storing the result in |output|.
29*86ee64e7SAndroid Build Coastguard Worker // |input| and |output| are allowed to point to the same string (in-place
30*86ee64e7SAndroid Build Coastguard Worker // operation).
31*86ee64e7SAndroid Build Coastguard Worker // Returns true for success.
32*86ee64e7SAndroid Build Coastguard Worker bool GzipCompress(base::span<const char> input, std::string* output);
33*86ee64e7SAndroid Build Coastguard Worker 
34*86ee64e7SAndroid Build Coastguard Worker // Like the above method, but using uint8_t instead.
35*86ee64e7SAndroid Build Coastguard Worker bool GzipCompress(base::span<const uint8_t> input, std::string* output);
36*86ee64e7SAndroid Build Coastguard Worker 
37*86ee64e7SAndroid Build Coastguard Worker // Uncompresses the data in |input| using gzip, storing the result in |output|.
38*86ee64e7SAndroid Build Coastguard Worker // |input| and |output| are allowed to be the same string (in-place operation).
39*86ee64e7SAndroid Build Coastguard Worker // Returns true for success.
40*86ee64e7SAndroid Build Coastguard Worker bool GzipUncompress(const std::string& input, std::string* output);
41*86ee64e7SAndroid Build Coastguard Worker 
42*86ee64e7SAndroid Build Coastguard Worker // Like the above method, but uses base::span to avoid allocations if
43*86ee64e7SAndroid Build Coastguard Worker // needed. |output|'s size must be at least as large as the return value from
44*86ee64e7SAndroid Build Coastguard Worker // GetUncompressedSize.
45*86ee64e7SAndroid Build Coastguard Worker // Returns true for success.
46*86ee64e7SAndroid Build Coastguard Worker bool GzipUncompress(base::span<const char> input,
47*86ee64e7SAndroid Build Coastguard Worker                     base::span<const char> output);
48*86ee64e7SAndroid Build Coastguard Worker 
49*86ee64e7SAndroid Build Coastguard Worker // Like the above method, but using uint8_t instead.
50*86ee64e7SAndroid Build Coastguard Worker bool GzipUncompress(base::span<const uint8_t> input,
51*86ee64e7SAndroid Build Coastguard Worker                     base::span<const uint8_t> output);
52*86ee64e7SAndroid Build Coastguard Worker 
53*86ee64e7SAndroid Build Coastguard Worker // Uncompresses the data in |input| using gzip, and writes the results to
54*86ee64e7SAndroid Build Coastguard Worker // |output|, which must NOT be the underlying string of |input|, and is resized
55*86ee64e7SAndroid Build Coastguard Worker // if necessary.
56*86ee64e7SAndroid Build Coastguard Worker // Returns true for success.
57*86ee64e7SAndroid Build Coastguard Worker bool GzipUncompress(base::span<const char> input, std::string* output);
58*86ee64e7SAndroid Build Coastguard Worker 
59*86ee64e7SAndroid Build Coastguard Worker // Like the above method, but using uint8_t instead.
60*86ee64e7SAndroid Build Coastguard Worker bool GzipUncompress(base::span<const uint8_t> input, std::string* output);
61*86ee64e7SAndroid Build Coastguard Worker 
62*86ee64e7SAndroid Build Coastguard Worker // Returns the uncompressed size from GZIP-compressed |compressed_data|.
63*86ee64e7SAndroid Build Coastguard Worker uint32_t GetUncompressedSize(base::span<const char> compressed_data);
64*86ee64e7SAndroid Build Coastguard Worker 
65*86ee64e7SAndroid Build Coastguard Worker // Like the above method, but using uint8_t instead.
66*86ee64e7SAndroid Build Coastguard Worker uint32_t GetUncompressedSize(base::span<const uint8_t> compressed_data);
67*86ee64e7SAndroid Build Coastguard Worker 
68*86ee64e7SAndroid Build Coastguard Worker }  // namespace compression
69*86ee64e7SAndroid Build Coastguard Worker 
70*86ee64e7SAndroid Build Coastguard Worker #endif  // THIRD_PARTY_ZLIB_GOOGLE_COMPRESSION_UTILS_H_
71