1 #include <ATen/core/ATenOpList.h>
2
3 #include <string>
4 #include <cstring>
5 #include <utility>
6 #include <unordered_set>
7 #include <ATen/core/operator_name.h>
8
9 // ${generated_comment}
10
11 namespace at {
12
13 namespace {
14 struct OpNameEquals final {
operator ()at::__anon3d9327d60111::OpNameEquals15 bool operator()(const std::pair<const char*, const char*>& lhs, const std::pair<const char*, const char*>& rhs) const {
16 return 0 == strcmp(lhs.first, rhs.first) && 0 == strcmp(lhs.second, rhs.second);
17 }
18 };
19
20 struct OpNameHash final {
operator ()at::__anon3d9327d60111::OpNameHash21 size_t operator()(const std::pair<const char*, const char*>& p) const {
22 // use std::hash<std::string> because std::hash<const char*> would hash pointers and not pointed-to strings
23 return std::hash<std::string>()(p.first) ^ (~ std::hash<std::string>()(p.second));
24 }
25 };
26 }
27
is_custom_op(const c10::OperatorName & opName)28 bool is_custom_op(const c10::OperatorName& opName) {
29 static std::unordered_set<std::pair<const char*, const char*>, OpNameHash, OpNameEquals> ops {
30 ${aten_ops}
31 {"", ""}
32 };
33 return ops.count(std::make_pair(
34 opName.name.c_str(), opName.overload_name.c_str())) == 0;
35 }
36 }
37