| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 | // This file is part of OpenCV project.// It is subject to the license terms in the LICENSE file found in the top-level directory// of this distribution and at http://opencv.org/license.html.//#ifndef OPENCV_DNN_LAYER_DETAILS_HPP#define OPENCV_DNN_LAYER_DETAILS_HPP#include <opencv2/dnn/layer.hpp>namespace cv {namespace dnn {CV__DNN_EXPERIMENTAL_NS_BEGIN/** @brief Registers layer constructor in runtime.*   @param type string, containing type name of the layer.*   @param constuctorFunc pointer to the function of type LayerRegister::Constuctor, which creates the layer.*   @details This macros must be placed inside the function code.*/#define CV_DNN_REGISTER_LAYER_FUNC(type, constuctorFunc) \    cv::dnn::LayerFactory::registerLayer(#type, constuctorFunc);/** @brief Registers layer class in runtime. *  @param type string, containing type name of the layer. *  @param class C++ class, derived from Layer. *  @details This macros must be placed inside the function code. */#define CV_DNN_REGISTER_LAYER_CLASS(type, class) \    cv::dnn::LayerFactory::registerLayer(#type, cv::dnn::details::_layerDynamicRegisterer<class>);/** @brief Registers layer constructor on module load time.*   @param type string, containing type name of the layer.*   @param constuctorFunc pointer to the function of type LayerRegister::Constuctor, which creates the layer.*   @details This macros must be placed outside the function code.*/#define CV_DNN_REGISTER_LAYER_FUNC_STATIC(type, constuctorFunc) \static cv::dnn::details::_LayerStaticRegisterer __LayerStaticRegisterer_##type(#type, constuctorFunc);/** @brief Registers layer class on module load time. *  @param type string, containing type name of the layer. *  @param class C++ class, derived from Layer. *  @details This macros must be placed outside the function code. */#define CV_DNN_REGISTER_LAYER_CLASS_STATIC(type, class)                         \Ptr<Layer> __LayerStaticRegisterer_func_##type(LayerParams ¶ms) \    { return Ptr<Layer>(new class(params)); }                       \static cv::dnn::details::_LayerStaticRegisterer __LayerStaticRegisterer_##type(#type, __LayerStaticRegisterer_func_##type);namespace details {template<typename LayerClass>Ptr<Layer> _layerDynamicRegisterer(LayerParams ¶ms){    return Ptr<Layer>(LayerClass::create(params));}//allows automatically register created layer on module load timeclass _LayerStaticRegisterer{    String type;public:    _LayerStaticRegisterer(const String &layerType, LayerFactory::Constuctor layerConstuctor)    {        this->type = layerType;        LayerFactory::registerLayer(layerType, layerConstuctor);    }    ~_LayerStaticRegisterer()    {        LayerFactory::unregisterLayer(type);    }};} // namespaceCV__DNN_EXPERIMENTAL_NS_END}} // namespace#endif
 |