예제 #1
0
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;
}
예제 #2
0
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();
}
예제 #3
0
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;
}
예제 #4
0
 Class* ClassLoader::FindClass(const char* name) {
     util::ClassName clsName(name);
     Class* cls = DefineClass(clsName.Get());
     return cls;
 }
예제 #5
0
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();
}