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