MCPcopy Create free account
hub / github.com/MegEngine/MegEngine / add

Method add

src/serialization/impl/opr_registry.cpp:84–129  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

82} // anonymous namespace
83
84void OprRegistry::add(const OprRegistry& record) {
85 auto&& sd = static_data();
86 auto persist_id = record.persist_type_id;
87 auto registry_ins = sd.id2reg.emplace(persist_id, record);
88 mgb_assert(
89 registry_ins.second || persist_id == dynamic_registry()->persist_type_id,
90 "duplicated operator name : %s", record.name.c_str());
91
92 OprRegistry* persis_record_ptr;
93 if (registry_ins.second) {
94 persis_record_ptr = &registry_ins.first->second;
95 } else {
96 static std::vector<std::unique_ptr<OprRegistry>> dynamic_opr_reg;
97 mgb_assert(!record.loader);
98 dynamic_opr_reg.emplace_back(new OprRegistry{record});
99 persis_record_ptr = dynamic_opr_reg.back().get();
100 }
101
102 if (!record.type) {
103 // loader only for compatibility
104 mgb_assert(!record.dumper);
105 mgb_assert(!record.shallow_copy);
106 } else {
107 auto&& res = sd.type2reg.insert({record.type, persis_record_ptr});
108 mgb_assert(res.second, "duplicated OprRegistry type: %s", record.type->name);
109 if (!record.shallow_copy) {
110 res.first->second->shallow_copy = intl::copy_opr_shallow_default_impl;
111 }
112 }
113
114 if (!record.name.empty()) {
115 auto&& n2r = sd.name2reg[record.name];
116 mgb_assert(!n2r, "duplicated OprRegistry name: %s", record.name.c_str());
117 n2r = persis_record_ptr;
118 }
119
120 if (record.unversioned_type_id) {
121 auto&& res = sd.unversioned_id2reg.emplace(
122 record.unversioned_type_id, persis_record_ptr);
123 mgb_assert(
124 res.second || record.unversioned_type_id ==
125 dynamic_registry()->unversioned_type_id,
126 "duplicated OprRegistry unversioned id: %s",
127 std::to_string(record.unversioned_type_id).c_str());
128 }
129}
130
131const OprRegistry* OprRegistry::find_by_name(const std::string& name) {
132 auto&& name2reg = static_data().name2reg;

Callers 3

init_oprs_to_dumpMethod · 0.45
init_oprs_to_dumpMethod · 0.45
makeMethod · 0.45

Calls 8

dynamic_registryFunction · 0.85
to_stringFunction · 0.85
emplace_backMethod · 0.80
backMethod · 0.80
emplaceMethod · 0.45
getMethod · 0.45
insertMethod · 0.45
emptyMethod · 0.45

Tested by

no test coverage detected