/** * \file src/decryption/decrypt_base.h * MegEngine is Licensed under the Apache License, Version 2.0 (the "License") * * Copyright (c) 2014-2021 Megvii Inc. All rights reserved. * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */ #pragma once #include "lite/global.h" #include "misc.h" namespace lite { struct DecryptionStaticData { std::unordered_map< std::string, std::pair>>> decryption_methods; LITE_MUTEX map_mutex; }; DecryptionStaticData& decryption_static_data(); template struct DecryptionRegister; } // namespace lite #define CONCAT_IMPL(a, b) a##b #define MACRO_CONCAT(a, b) CONCAT_IMPL(a, b) #define REGIST_DECRYPTION_METHOD(name_, func_, key_) \ REGIST_DECRYPTION_METHOD_WITH_NUM(__COUNTER__, name_, func_, key_) #define REGIST_DECRYPTION_METHOD_WITH_NUM(number_, name_, func_, key_) \ template <> \ struct DecryptionRegister { \ DecryptionRegister() { register_decryption_and_key(name_, func_, key_); } \ }; \ namespace { \ DecryptionRegister MACRO_CONCAT(decryption_, number_); \ } // vim: syntax=cpp.doxygen foldmethod=marker foldmarker=f{{{,f}}}