Go to the documentation of this file.
6 #ifndef DMLC_REGISTRY_H_
7 #define DMLC_REGISTRY_H_
13 #include "./logging.h"
26 template<
typename EntryType>
30 inline static const std::vector<const EntryType*>&
List() {
31 return Get()->const_list_;
35 const std::map<std::string, EntryType*> &fmap =
Get()->fmap_;
36 typename std::map<std::string, EntryType*>::const_iterator p;
37 std::vector<std::string> names;
38 for (p = fmap.begin(); p !=fmap.end(); ++p) {
39 names.push_back(p->first);
48 inline static const EntryType *
Find(
const std::string &name) {
49 const std::map<std::string, EntryType*> &fmap =
Get()->fmap_;
50 typename std::map<std::string, EntryType*>::const_iterator p = fmap.find(name);
51 if (p != fmap.end()) {
62 inline void AddAlias(
const std::string& key_name,
63 const std::string& alias) {
64 EntryType* e = fmap_.at(key_name);
65 if (fmap_.count(alias)) {
66 CHECK_EQ(e, fmap_.at(alias))
67 <<
"Trying to register alias " << alias <<
" for key " << key_name
68 <<
" but " << alias <<
" is already taken";
79 std::lock_guard<std::mutex> guard(registering_mutex);
80 if (fmap_.count(name) > 0) {
83 EntryType *e =
new EntryType();
86 const_list_.push_back(e);
87 entry_list_.push_back(e);
96 if (fmap_.count(name) == 0) {
99 return *fmap_.at(name);
111 std::vector<EntryType*> entry_list_;
113 std::vector<const EntryType*> const_list_;
115 std::map<std::string, EntryType*> fmap_;
117 std::mutex registering_mutex;
122 for (
size_t i = 0; i < entry_list_.size(); ++i) {
123 delete entry_list_[i];
150 template<
typename EntryType,
typename FunctionType>
190 const std::string &type,
195 info.type_info_str = info.type;
223 inline EntryType &
self() {
224 return *(
static_cast<EntryType*
>(
this));
234 #define DMLC_REGISTRY_ENABLE(EntryType) \
236 Registry<EntryType > *Registry<EntryType >::Get() { \
237 static Registry<EntryType > inst; \
250 #define DMLC_REGISTRY_REGISTER(EntryType, EntryTypeName, Name) \
251 static DMLC_ATTRIBUTE_UNUSED EntryType & __make_ ## EntryTypeName ## _ ## Name ## __ = \
252 ::dmlc::Registry<EntryType>::Get()->__REGISTER__(#Name) \
263 #define DMLC_REGISTRY_FILE_TAG(UniqueTag) \
264 int __dmlc_registry_file_tag_ ## UniqueTag ## __() { return 0; }
305 #define DMLC_REGISTRY_LINK_TAG(UniqueTag) \
306 int __dmlc_registry_file_tag_ ## UniqueTag ## __(); \
307 static int DMLC_ATTRIBUTE_UNUSED __reg_file_tag_ ## UniqueTag ## __ = \
308 __dmlc_registry_file_tag_ ## UniqueTag ## __();
310 #endif // DMLC_REGISTRY_H_
std::vector< ParamFieldInfo > arguments
additional arguments to the factory function
Definition: registry.h:158
EntryType & add_argument(const std::string &name, const std::string &type, const std::string &description)
Add argument information to the function.
Definition: registry.h:189
EntryType & __REGISTER__(const std::string &name)
Internal function to register a name function under name.
Definition: registry.h:78
Common base class for function registry.
Definition: registry.h:151
namespace for dmlc
Definition: array_view.h:12
static Registry * Get()
get a singleton of the Registry. This function can be defined by DMLC_REGISTRY_ENABLE.
EntryType & set_return_type(const std::string &type)
Set the return type.
Definition: registry.h:214
Provide lightweight util to do parameter setup and checking.
defines configuration macros
static const std::vector< const EntryType * > & List()
Definition: registry.h:30
static std::vector< std::string > ListAllNames()
Definition: registry.h:34
void AddAlias(const std::string &key_name, const std::string &alias)
Add alias to the key_name.
Definition: registry.h:62
EntryType & __REGISTER_OR_GET__(const std::string &name)
Internal function to either register or get registered entry.
Definition: registry.h:95
EntryType & set_body(FunctionType body)
Set the function body.
Definition: registry.h:169
EntryType & add_arguments(const std::vector< ParamFieldInfo > &args)
Append list if arguments to the end.
Definition: registry.h:205
Registry class. Registry can be used to register global singletons. The most commonly use case are fa...
Definition: registry.h:27
EntryType & describe(const std::string &description)
Describe the function.
Definition: registry.h:178
std::string return_type
Return type of the function.
Definition: registry.h:162
type traits information header
FunctionType body
Function body to create ProductType.
Definition: registry.h:160
std::string description
description of the entry
Definition: registry.h:156
static const EntryType * Find(const std::string &name)
Find the entry with corresponding name.
Definition: registry.h:48
std::string name
name of the entry
Definition: registry.h:154