ATenOpList.cpp 1.0 KB

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