#pragma once #include #include namespace c10 { struct OperatorName final { std::string name; std::string overload_name; OperatorName(std::string name, const std::string& overload_name) : name(std::move(name)), overload_name(overload_name) {} }; inline bool operator==(const OperatorName& lhs, const OperatorName& rhs) { return lhs.name == rhs.name && lhs.overload_name == rhs.overload_name; } inline bool operator!=(const OperatorName& lhs, const OperatorName& rhs) { return !operator==(lhs, rhs); } inline std::string toString(const OperatorName& opName) { std::string result = opName.name; if (opName.overload_name.size() != 0) { result += "." + opName.overload_name; } return result; } } namespace std { template <> struct hash<::c10::OperatorName> { size_t operator()(const ::c10::OperatorName& x) const { return std::hash()(x.name) ^ (~ std::hash()(x.overload_name)); } }; }