diff options
Diffstat (limited to 'runtimes/neurun/core/src/backend/BackendManager.h')
-rw-r--r-- | runtimes/neurun/core/src/backend/BackendManager.h | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/runtimes/neurun/core/src/backend/BackendManager.h b/runtimes/neurun/core/src/backend/BackendManager.h new file mode 100644 index 000000000..ef102123c --- /dev/null +++ b/runtimes/neurun/core/src/backend/BackendManager.h @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2018 Samsung Electronics Co., Ltd. All Rights Reserved + * + * 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 + * + * http://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 __NEURUN_BACKEND_BACKEND_MANAGER_H__ +#define __NEURUN_BACKEND_BACKEND_MANAGER_H__ + +#include <memory> +#include <map> + +#include "model/Operands.h" +#include "backend/Backend.h" + +namespace neurun +{ +namespace backend +{ + +class BackendManager +{ +public: + using backend_create_t = Backend *(*)(); + using backend_destroy_t = void (*)(Backend *); + + static BackendManager &instance(); + +public: + Backend *get(const std::string &key); + const Backend *get(const std::string &key) const; + const Backend *getDefault() const; + const std::vector<const Backend *> &getAll() const { return _available_backends; }; + +private: + BackendManager(); + +private: + std::vector<const Backend *> _available_backends; + std::map<std::string, std::unique_ptr<Backend, backend_destroy_t>> _gen_map; + std::map<std::string, void *> _handle_map; + /** + * @brief Allocate an object of a class of a plugin by loading a plugin function, that does + * allocation, and calling it + * + * @param object_of_plugin_class target object + * @param obj_creator_func_name name of the plugin function, that allocates an object + * @param handle handle of the plugin + * @param args arguments to pass to constructor of the plugin class + * + * @return + */ + template <typename T, class... Types> + void loadObjectFromPlugin(std::shared_ptr<T> &object_of_plugin_class, + const std::string obj_creator_func_name, void *handle, + Types &&... args); + + /** + * @brief load backend plugin + * + * @param backend backend to be loaded + * + * @return + */ + void loadBackend(const std::string &backend); +}; + +} // namespace backend +} // namespace neurun + +#endif // __NEURUN_BACKEND_BACKEND_MANAGER_H__ |