| /** |
| * A global dictionary that holds information about what Caffe2 modules have |
| * been loaded in the current runtime, and also utility functions to load |
| * modules. |
| */ |
| #ifndef CAFFE2_CORE_MODULE_H_ |
| #define CAFFE2_CORE_MODULE_H_ |
| |
| #include <algorithm> |
| #include <cstdio> |
| #include <cstdlib> |
| #include <functional> |
| #include <memory> |
| #include <mutex> |
| |
| #include "caffe2/core/common.h" |
| #include <c10/util/typeid.h> |
| |
| namespace caffe2 { |
| |
| /** |
| * A module schema that can be used to store specific information about |
| * different modules. Currently, we only store the name and a simple |
| * description of what this module does. |
| */ |
| class TORCH_API ModuleSchema { |
| public: |
| ModuleSchema(const char* name, const char* description); |
| }; |
| |
| |
| /** |
| * @brief Current Modules present in the Caffe2 runtime. |
| * Returns: |
| * map: a map of modules and (optionally) their description. The key is the |
| * module name, and the value is the description for that module. The |
| * module name is recommended to be the part that constitutes the trunk |
| * of the dynamic library: for example, a module called |
| * libcaffe2_db_rocksdb.so should have the name "caffe2_db_rocksdb". The |
| * reason we do not use "lib" is because it's somewhat redundant, and |
| * the reason we do not include ".so" is for cross-platform compatibility |
| * on platforms like mac os. |
| */ |
| TORCH_API const CaffeMap<string, const ModuleSchema*>& CurrentModules(); |
| |
| /** |
| * @brief Checks whether a module is already present in the current binary. |
| */ |
| TORCH_API bool HasModule(const string& name); |
| |
| /** |
| * @brief Load a module. |
| * Inputs: |
| * name: a module name or a path name. |
| * It is recommended that you use the name of the module, and leave the |
| * full path option to only experimental modules. |
| * filename: (optional) a filename that serves as a hint to load the module. |
| */ |
| TORCH_API void LoadModule(const string& name, const string& filename=""); |
| |
| |
| #define CAFFE2_MODULE(name, description) \ |
| extern "C" { \ |
| bool gCaffe2ModuleSanityCheck##name() { return true; } \ |
| } \ |
| namespace { \ |
| static ::caffe2::ModuleSchema module_schema_##name(#name, description); \ |
| } |
| |
| } // namespace caffe2 |
| #endif // CAFFE2_CORE_MODULE_H_ |