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