/* * 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 NETWORKS_H #define NETWORKS_H #include #include #include using namespace EthosU; namespace MessageHandler { class Networks { public: virtual ~Networks() {} virtual bool getNetwork(const ethosu_core_network_buffer &buffer, void *&data, size_t &size) = 0; }; template class BaseNetworks : public Networks { public: bool getNetwork(const ethosu_core_network_buffer &buffer, void *&data, size_t &size) override { switch (buffer.type) { case ETHOSU_CORE_NETWORK_BUFFER: data = reinterpret_cast(buffer.buffer.ptr); size = buffer.buffer.size; return false; case ETHOSU_CORE_NETWORK_INDEX: return T::getIndexedNetwork(buffer.index, data, size); default: printf("Error: Unsupported network model type. type=%" PRIu32 "\n", buffer.type); return true; } } }; class NoIndexedNetworks : public BaseNetworks { static bool getIndexedNetwork(const uint32_t index, void *&data, size_t &size) { printf("Error: Network model index out of range. index=%" PRIu32 "\n", index); return true; } }; } // namespace MessageHandler #endif