size_t RepoAuthType::hash() const { auto const iTag = static_cast<size_t>(tag()); if (hasClassName()) { return folly::hash::hash_128_to_64(iTag, clsName()->hash()); } if (mayHaveArrData() && array()) { return folly::hash::hash_128_to_64(iTag, array()->id()); } return iTag; }
bool RepoAuthType::operator==(RepoAuthType o) const { using T = Tag; if (tag() != o.tag()) return false; switch (tag()) { case T::OptBool: case T::OptInt: case T::OptSStr: case T::OptStr: case T::OptDbl: case T::OptRes: case T::OptObj: case T::Null: case T::Cell: case T::Ref: case T::InitUnc: case T::Unc: case T::InitCell: case T::InitGen: case T::Gen: case T::Uninit: case T::InitNull: case T::Bool: case T::Int: case T::Dbl: case T::Res: case T::SStr: case T::Str: case T::Obj: return true; case T::OptSArr: case T::OptArr: // Can't currently have array() info. return true; case T::SArr: case T::Arr: if (array() == nullptr && o.array() == nullptr) { return true; } if ((array() == nullptr) != (o.array() == nullptr)) { return false; } return array()->id() == o.array()->id(); case T::SubObj: case T::ExactObj: case T::OptSubObj: case T::OptExactObj: return clsName() == o.clsName(); } not_reached(); }
std::string PythonProxyHandle::getClassName(void) const { PyGilStateLock lock; PyObjectRef cls(PyObject_GetAttrString(obj, "__class__"), REF_NEW); PyObjectRef clsName(PyObject_GetAttrString(cls.obj, "__name__"), REF_NEW); PyObjectRef modName(PyObject_GetAttrString(cls.obj, "__module__"), REF_NEW); const auto clsNameStr = PyObjToStdString(clsName.obj); const auto modNameStr = PyObjToStdString(modName.obj); #if PY_MAJOR_VERSION >= 3 if (modNameStr == "builtins") return clsNameStr; #else if (modNameStr == "__builtin__") return clsNameStr; #endif return modNameStr + "." + clsNameStr; }
Class* ClassLoader::FindClass(const char* name) { util::ClassName clsName(name); Class* cls = DefineClass(clsName.Get()); return cls; }
bool RepoAuthType::operator==(RepoAuthType o) const { using T = Tag; if (tag() != o.tag()) return false; switch (tag()) { case T::OptBool: case T::OptInt: case T::OptSStr: case T::OptStr: case T::OptDbl: case T::OptRes: case T::OptObj: case T::OptArrKey: case T::OptUncArrKey: case T::Null: case T::Cell: case T::Ref: case T::InitUnc: case T::Unc: case T::ArrKey: case T::UncArrKey: case T::InitCell: case T::InitGen: case T::Gen: case T::Uninit: case T::InitNull: case T::Bool: case T::Int: case T::Dbl: case T::Res: case T::SStr: case T::Str: case T::Obj: return true; case T::SVec: case T::Vec: case T::OptSVec: case T::OptVec: case T::SDict: case T::Dict: case T::OptSDict: case T::OptDict: case T::SKeyset: case T::Keyset: case T::OptSKeyset: case T::OptKeyset: return true; case T::OptSArr: case T::OptArr: case T::OptSVArr: case T::OptVArr: case T::OptSDArr: case T::OptDArr: // Can't currently have array() info. return true; case T::SArr: case T::Arr: case T::SVArr: case T::VArr: case T::SDArr: case T::DArr: // array id equals to either kInvalidArrayId for null array info, or a // regular id. in each case, we just need to compare their id. return arrayId() == o.arrayId(); case T::SubObj: case T::ExactObj: case T::OptSubObj: case T::OptExactObj: return clsName() == o.clsName(); } not_reached(); }