#pragma once
#include "../network_impl_base.h"
#include "lite/global.h"
#include <flatbuffers/flatbuffers.h>
#include "pack_model_generated.h"
#include <unordered_map>
namespace lite {
class ModelParser {
public:
ModelParser(std::shared_ptr<void> model_ptr, size_t model_length)
: m_model(model_ptr), m_total_length(model_length) {
parse_header();
}
bool parse_model_info(
Config& network_config, NetworkIO& network_io,
std::unordered_map<std::string, LiteAny>& isolated_config_map,
std::string& extra_info) const;
std::shared_ptr<void> parse_model(size_t& model_length, const Config& config) const;
private:
void parse_header();
std::shared_ptr<void> decrypt_memory(
const uint8_t* data, size_t length, const std::string decryption_name,
size_t& result_length) const;
private:
std::string m_model_name;
std::string m_info_decryption_name;
std::string m_model_decryption_name;
std::string m_info_parse_func_name;
bool m_is_bare_model = true;
const model_parse::ModelInfo* m_info = nullptr;
const model_parse::ModelData* m_model_data = nullptr;
std::shared_ptr<void> m_model;
size_t m_total_length;
static std::string sm_model_tag;
};
}