示例#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 ArrayTypeTable::check(const RepoAuthType::Array* arr) const {
  if (!arr) return true;

  switch (arr->tag()) {
    case RepoAuthType::Array::Tag::Packed: {
      for (uint32_t idx = 0; idx < arr->size(); ++idx) {
        auto rat = arr->packedElem(idx);
        assertx(rat.resolved());
        if (rat.mayHaveArrData()) check(rat.array());
      }
      break;
    }
    case RepoAuthType::Array::Tag::PackedN: {
      auto rat = arr->elemType();
      assertx(rat.resolved());
      if (rat.mayHaveArrData()) check(rat.array());
      break;
    }
  }

  return true;
}
示例#3
0
const uint32_t RepoAuthType::arrayId() const {
  assert(mayHaveArrData());
  if (resolved()) return m_data.ptr() ? array()->id() : kInvalidArrayId;

  return reinterpret_cast<uintptr_t>(m_data.ptr());
}