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 #include "utils/intents/zlib-utils.h" 18*993b0882SAndroid Build Coastguard Worker 19*993b0882SAndroid Build Coastguard Worker #include <memory> 20*993b0882SAndroid Build Coastguard Worker 21*993b0882SAndroid Build Coastguard Worker #include "utils/base/logging.h" 22*993b0882SAndroid Build Coastguard Worker #include "utils/zlib/buffer_generated.h" 23*993b0882SAndroid Build Coastguard Worker #include "utils/zlib/zlib.h" 24*993b0882SAndroid Build Coastguard Worker 25*993b0882SAndroid Build Coastguard Worker namespace libtextclassifier3 { 26*993b0882SAndroid Build Coastguard Worker CompressIntentModel(IntentFactoryModelT * intent_model)27*993b0882SAndroid Build Coastguard Workerbool CompressIntentModel(IntentFactoryModelT* intent_model) { 28*993b0882SAndroid Build Coastguard Worker std::unique_ptr<ZlibCompressor> intent_zlib_compressor = 29*993b0882SAndroid Build Coastguard Worker ZlibCompressor::Instance(); 30*993b0882SAndroid Build Coastguard Worker for (auto& generator : intent_model->generator) { 31*993b0882SAndroid Build Coastguard Worker generator->compressed_lua_template_generator.reset(new CompressedBufferT); 32*993b0882SAndroid Build Coastguard Worker intent_zlib_compressor->Compress( 33*993b0882SAndroid Build Coastguard Worker std::string(reinterpret_cast<const char*>( 34*993b0882SAndroid Build Coastguard Worker generator->lua_template_generator.data()), 35*993b0882SAndroid Build Coastguard Worker generator->lua_template_generator.size()), 36*993b0882SAndroid Build Coastguard Worker generator->compressed_lua_template_generator.get()); 37*993b0882SAndroid Build Coastguard Worker generator->lua_template_generator.clear(); 38*993b0882SAndroid Build Coastguard Worker } 39*993b0882SAndroid Build Coastguard Worker return true; 40*993b0882SAndroid Build Coastguard Worker } 41*993b0882SAndroid Build Coastguard Worker DecompressIntentModel(IntentFactoryModelT * intent_model)42*993b0882SAndroid Build Coastguard Workerbool DecompressIntentModel(IntentFactoryModelT* intent_model) { 43*993b0882SAndroid Build Coastguard Worker std::unique_ptr<ZlibDecompressor> zlib_decompressor = 44*993b0882SAndroid Build Coastguard Worker ZlibDecompressor::Instance(); 45*993b0882SAndroid Build Coastguard Worker if (!zlib_decompressor) { 46*993b0882SAndroid Build Coastguard Worker TC3_LOG(ERROR) << "Cannot initialize decompressor."; 47*993b0882SAndroid Build Coastguard Worker return false; 48*993b0882SAndroid Build Coastguard Worker } 49*993b0882SAndroid Build Coastguard Worker 50*993b0882SAndroid Build Coastguard Worker for (std::unique_ptr<IntentFactoryModel_::IntentGeneratorT>& generator : 51*993b0882SAndroid Build Coastguard Worker intent_model->generator) { 52*993b0882SAndroid Build Coastguard Worker if (generator->compressed_lua_template_generator == nullptr) { 53*993b0882SAndroid Build Coastguard Worker continue; 54*993b0882SAndroid Build Coastguard Worker } 55*993b0882SAndroid Build Coastguard Worker 56*993b0882SAndroid Build Coastguard Worker std::string lua_template_generator; 57*993b0882SAndroid Build Coastguard Worker if (!zlib_decompressor->MaybeDecompress( 58*993b0882SAndroid Build Coastguard Worker generator->compressed_lua_template_generator.get(), 59*993b0882SAndroid Build Coastguard Worker &lua_template_generator)) { 60*993b0882SAndroid Build Coastguard Worker TC3_LOG(ERROR) << "Cannot decompress intent template."; 61*993b0882SAndroid Build Coastguard Worker return false; 62*993b0882SAndroid Build Coastguard Worker } 63*993b0882SAndroid Build Coastguard Worker generator->lua_template_generator = std::vector<uint8_t>( 64*993b0882SAndroid Build Coastguard Worker lua_template_generator.begin(), lua_template_generator.end()); 65*993b0882SAndroid Build Coastguard Worker 66*993b0882SAndroid Build Coastguard Worker generator->compressed_lua_template_generator.reset(nullptr); 67*993b0882SAndroid Build Coastguard Worker } 68*993b0882SAndroid Build Coastguard Worker return true; 69*993b0882SAndroid Build Coastguard Worker } 70*993b0882SAndroid Build Coastguard Worker 71*993b0882SAndroid Build Coastguard Worker } // namespace libtextclassifier3 72