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() && (arrayId() != kInvalidArrayId)) { return folly::hash::hash_128_to_64(iTag, arrayId()); } return iTag; }
xmlNode* AddSourceIDRef(xmlNode* parent, const char* id, const StringList& values, const char* parameter) { xmlNode* sourceNode = AddChild(parent, DAE_SOURCE_ELEMENT); AddAttribute(sourceNode, DAE_ID_ATTRIBUTE, id); FUSStringBuilder arrayId(id); arrayId.append("-array"); AddArray(sourceNode, arrayId.ToCharPtr(), values, DAE_IDREF_ARRAY_ELEMENT); xmlNode* techniqueCommonNode = AddChild(sourceNode, DAE_TECHNIQUE_COMMON_ELEMENT); AddAccessor(techniqueCommonNode, arrayId.ToCharPtr(), values.size(), 1, ¶meter, DAE_IDREF_TYPE); return sourceNode; }
xmlNode* AddSourceTangent(xmlNode* parent, const char* id, const FMVector2List& values) { xmlNode* sourceNode = AddChild(parent, DAE_SOURCE_ELEMENT); AddAttribute(sourceNode, DAE_ID_ATTRIBUTE, id); FUSStringBuilder arrayId(id); arrayId.append("-array"); AddArray(sourceNode, arrayId.ToCharPtr(), values, 1.0f); xmlNode* techniqueCommonNode = AddChild(sourceNode, DAE_TECHNIQUE_COMMON_ELEMENT); AddAccessor(techniqueCommonNode, arrayId.ToCharPtr(), values.size(), 2, FUDaeAccessor::XY, DAE_FLOAT_TYPE); return sourceNode; }
xmlNode* AddSourceMatrix(xmlNode* parent, const char* id, const FMMatrix44List& values, float lengthFactor) { xmlNode* sourceNode = AddChild(parent, DAE_SOURCE_ELEMENT); AddAttribute(sourceNode, DAE_ID_ATTRIBUTE, id); FUSStringBuilder arrayId(id); arrayId.append("-array"); AddArray(sourceNode, arrayId.ToCharPtr(), values, lengthFactor); xmlNode* techniqueCommonNode = AddChild(sourceNode, DAE_TECHNIQUE_COMMON_ELEMENT); AddAccessor(techniqueCommonNode, arrayId.ToCharPtr(), values.size(), 16, NULL, DAE_MATRIX_TYPE); return sourceNode; }
xmlNode* AddSourceFloat(xmlNode* parent, const char* id, const FloatList& values, size_t stride, const char** parameters, float lengthFactor) { xmlNode* sourceNode = AddChild(parent, DAE_SOURCE_ELEMENT); AddAttribute(sourceNode, DAE_ID_ATTRIBUTE, id); FUSStringBuilder arrayId(id); arrayId.append("-array"); AddArray(sourceNode, arrayId.ToCharPtr(), values, lengthFactor); xmlNode* techniqueCommonNode = AddChild(sourceNode, DAE_TECHNIQUE_COMMON_ELEMENT); if (stride == 0) stride = 1; AddAccessor(techniqueCommonNode, arrayId.ToCharPtr(), values.size() / stride, stride, parameters, (stride != 16) ? DAE_FLOAT_TYPE : DAE_MATRIX_TYPE); return sourceNode; }
xmlNode* AddSourceInterpolation(xmlNode* parent, const char* id, const FUDaeInterpolationList& interpolations) { xmlNode* sourceNode = AddChild(parent, DAE_SOURCE_ELEMENT); AddAttribute(sourceNode, DAE_ID_ATTRIBUTE, id); FUSStringBuilder arrayId(id); arrayId.append("-array"); globalSBuilder.clear(); size_t valueCount = interpolations.size(); if (valueCount > 0) { FUDaeInterpolationList::const_iterator itI = interpolations.begin(); globalSBuilder.append(FUDaeInterpolation::ToString(*itI)); for (++itI; itI != interpolations.end(); ++itI) { globalSBuilder.append(' '); globalSBuilder.append(FUDaeInterpolation::ToString(*itI)); } } AddArray(sourceNode, arrayId.ToCharPtr(), DAE_NAME_ARRAY_ELEMENT, globalSBuilder.ToCharPtr(), valueCount); xmlNode* techniqueCommonNode = AddChild(sourceNode, DAE_TECHNIQUE_COMMON_ELEMENT); const char* parameter = "INTERPOLATION"; AddAccessor(techniqueCommonNode, arrayId.ToCharPtr(), valueCount, 1, ¶meter, DAE_NAME_TYPE); return sourceNode; }
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(); }