void encodeRAT(UnitEmitter& ue, RepoAuthType rat) { using T = RepoAuthType::Tag; switch (rat.tag()) { case T::Uninit: case T::InitNull: case T::Null: case T::Int: case T::OptInt: case T::Dbl: case T::OptDbl: case T::Res: case T::OptRes: case T::Bool: case T::OptBool: case T::SStr: case T::OptSStr: case T::Str: case T::OptStr: case T::SVec: case T::OptSVec: case T::Vec: case T::OptVec: case T::SDict: case T::OptSDict: case T::Dict: case T::OptDict: case T::SKeyset: case T::OptSKeyset: case T::Keyset: case T::OptKeyset: case T::Obj: case T::OptObj: case T::UncArrKey: case T::ArrKey: case T::OptUncArrKey: case T::OptArrKey: case T::InitUnc: case T::Unc: case T::InitCell: case T::Cell: case T::Ref: case T::InitGen: case T::Gen: ue.emitByte(static_cast<uint8_t>(rat.tag())); break; case T::SArr: case T::OptSArr: case T::Arr: case T::OptArr: case T::SVArr: case T::OptSVArr: case T::VArr: case T::OptVArr: case T::SDArr: case T::OptSDArr: case T::DArr: case T::OptDArr: { auto tagByte = static_cast<uint8_t>(rat.tag()); if (rat.hasArrData()) tagByte |= kRATArrayDataBit; ue.emitByte(tagByte); if (rat.hasArrData()) { ue.emitInt32(rat.arrayId()); } break; } case T::ExactObj: case T::SubObj: case T::OptExactObj: case T::OptSubObj: ue.emitByte(static_cast<uint8_t>(rat.tag())); ue.emitInt32(ue.mergeLitstr(rat.clsName())); break; } }
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(); }