xref: /aosp_15_r20/external/libtextclassifier/native/utils/zlib/zlib.h (revision 993b0882672172b81d12fad7a7ac0c3e5c824a12)
1*993b0882SAndroid Build Coastguard Worker /*
2*993b0882SAndroid Build Coastguard Worker  * Copyright (C) 2018 The Android Open Source Project
3*993b0882SAndroid Build Coastguard Worker  *
4*993b0882SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*993b0882SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*993b0882SAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*993b0882SAndroid Build Coastguard Worker  *
8*993b0882SAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*993b0882SAndroid Build Coastguard Worker  *
10*993b0882SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*993b0882SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*993b0882SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*993b0882SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*993b0882SAndroid Build Coastguard Worker  * limitations under the License.
15*993b0882SAndroid Build Coastguard Worker  */
16*993b0882SAndroid Build Coastguard Worker 
17*993b0882SAndroid Build Coastguard Worker // Functions to compress and decompress low entropy entries in the model.
18*993b0882SAndroid Build Coastguard Worker 
19*993b0882SAndroid Build Coastguard Worker #ifndef LIBTEXTCLASSIFIER_UTILS_ZLIB_ZLIB_H_
20*993b0882SAndroid Build Coastguard Worker #define LIBTEXTCLASSIFIER_UTILS_ZLIB_ZLIB_H_
21*993b0882SAndroid Build Coastguard Worker 
22*993b0882SAndroid Build Coastguard Worker #include <vector>
23*993b0882SAndroid Build Coastguard Worker 
24*993b0882SAndroid Build Coastguard Worker #include "utils/base/integral_types.h"
25*993b0882SAndroid Build Coastguard Worker #include "utils/zlib/buffer_generated.h"
26*993b0882SAndroid Build Coastguard Worker #include <zlib.h>
27*993b0882SAndroid Build Coastguard Worker 
28*993b0882SAndroid Build Coastguard Worker namespace libtextclassifier3 {
29*993b0882SAndroid Build Coastguard Worker 
30*993b0882SAndroid Build Coastguard Worker class ZlibDecompressor {
31*993b0882SAndroid Build Coastguard Worker  public:
32*993b0882SAndroid Build Coastguard Worker   static std::unique_ptr<ZlibDecompressor> Instance();
33*993b0882SAndroid Build Coastguard Worker   ~ZlibDecompressor();
34*993b0882SAndroid Build Coastguard Worker 
35*993b0882SAndroid Build Coastguard Worker   bool Decompress(const uint8* buffer, const int buffer_size,
36*993b0882SAndroid Build Coastguard Worker                   const int uncompressed_size, std::string* out);
37*993b0882SAndroid Build Coastguard Worker   bool MaybeDecompress(const CompressedBuffer* compressed_buffer,
38*993b0882SAndroid Build Coastguard Worker                        std::string* out);
39*993b0882SAndroid Build Coastguard Worker   bool MaybeDecompress(const CompressedBufferT* compressed_buffer,
40*993b0882SAndroid Build Coastguard Worker                        std::string* out);
41*993b0882SAndroid Build Coastguard Worker   bool MaybeDecompressOptionallyCompressedBuffer(
42*993b0882SAndroid Build Coastguard Worker       const flatbuffers::String* uncompressed_buffer,
43*993b0882SAndroid Build Coastguard Worker       const CompressedBuffer* compressed_buffer, std::string* out);
44*993b0882SAndroid Build Coastguard Worker   bool MaybeDecompressOptionallyCompressedBuffer(
45*993b0882SAndroid Build Coastguard Worker       const flatbuffers::Vector<uint8>* uncompressed_buffer,
46*993b0882SAndroid Build Coastguard Worker       const CompressedBuffer* compressed_buffer, std::string* out);
47*993b0882SAndroid Build Coastguard Worker 
48*993b0882SAndroid Build Coastguard Worker  private:
49*993b0882SAndroid Build Coastguard Worker   explicit ZlibDecompressor();
50*993b0882SAndroid Build Coastguard Worker   z_stream stream_;
51*993b0882SAndroid Build Coastguard Worker   bool initialized_;
52*993b0882SAndroid Build Coastguard Worker };
53*993b0882SAndroid Build Coastguard Worker 
54*993b0882SAndroid Build Coastguard Worker class ZlibCompressor {
55*993b0882SAndroid Build Coastguard Worker  public:
56*993b0882SAndroid Build Coastguard Worker   static std::unique_ptr<ZlibCompressor> Instance();
57*993b0882SAndroid Build Coastguard Worker   ~ZlibCompressor();
58*993b0882SAndroid Build Coastguard Worker 
59*993b0882SAndroid Build Coastguard Worker   void Compress(const std::string& uncompressed_content,
60*993b0882SAndroid Build Coastguard Worker                 CompressedBufferT* out);
61*993b0882SAndroid Build Coastguard Worker 
62*993b0882SAndroid Build Coastguard Worker  private:
63*993b0882SAndroid Build Coastguard Worker   explicit ZlibCompressor(const int level = Z_BEST_COMPRESSION,
64*993b0882SAndroid Build Coastguard Worker                           // Tmp. buffer size was set based on the current set
65*993b0882SAndroid Build Coastguard Worker                           // of patterns to be compressed.
66*993b0882SAndroid Build Coastguard Worker                           const int tmp_buffer_size = 64 * 1024);
67*993b0882SAndroid Build Coastguard Worker   z_stream stream_;
68*993b0882SAndroid Build Coastguard Worker   std::unique_ptr<Bytef[]> buffer_;
69*993b0882SAndroid Build Coastguard Worker   unsigned int buffer_size_;
70*993b0882SAndroid Build Coastguard Worker   bool initialized_;
71*993b0882SAndroid Build Coastguard Worker };
72*993b0882SAndroid Build Coastguard Worker 
73*993b0882SAndroid Build Coastguard Worker }  // namespace libtextclassifier3
74*993b0882SAndroid Build Coastguard Worker 
75*993b0882SAndroid Build Coastguard Worker #endif  // LIBTEXTCLASSIFIER_UTILS_ZLIB_ZLIB_H_
76