/* * Copyright (c) 2022 Arm Limited. * * SPDX-License-Identifier: Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the License); you may * not use this file except in compliance with the License. * You may obtain a copy of the License at * * www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an AS IS BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef INDEXED_NETWORKS_H #define INDEXED_NETWORKS_H #include "networks.hpp" #include #include #define XSTRINGIFY(src) #src #define STRINGIFY(src) XSTRINGIFY(src) namespace { #if defined(__has_include) #if defined(MODEL_0) namespace Model0 { #include STRINGIFY(MODEL_0) } #endif #if defined(MODEL_1) namespace Model1 { #include STRINGIFY(MODEL_1) } #endif #if defined(MODEL_2) namespace Model2 { #include STRINGIFY(MODEL_2) } #endif #if defined(MODEL_3) namespace Model3 { #include STRINGIFY(MODEL_3) } #endif #endif } // namespace namespace MessageHandler { class WithIndexedNetworks : public BaseNetworks { public: static bool getIndexedNetwork(const uint32_t index, void *&data, size_t &size) { switch (index) { #if defined(MODEL_0) case 0: data = reinterpret_cast(Model0::networkModel); size = sizeof(Model0::networkModel); break; #endif #if defined(MODEL_1) case 1: data = reinterpret_cast(Model1::networkModel); size = sizeof(Model1::networkModel); break; #endif #if defined(MODEL_2) case 2: data = reinterpret_cast(Model2::networkModel); size = sizeof(Model2::networkModel); break; #endif #if defined(MODEL_3) case 3: data = reinterpret_cast(Model3::networkModel); size = sizeof(Model3::networkModel); break; #endif default: printf("Error: Network model index out of range. index=%" PRIu32 "\n", index); return true; } return false; } }; } // namespace MessageHandler #endif