std::size_t FunctionTypeData::hash() const { Hasher hasher; hasher.add(attributes()); hasher.add(returnType()); hasher.add(parameterTypes()); return hasher.get(); }
std::size_t FunctionAttributes::hash() const { Hasher hasher; hasher.add(isVarArg()); hasher.add(isMethod()); hasher.add(isTemplated()); hasher.add(noExceptPredicate()); return hasher.get(); }
size_t hash() const { Hasher hasher; hasher.add(kind()); switch (kind()) { case NULLVAL: break; case BOOLEAN: hasher.add(boolValue()); break; case INTEGER: hasher.add(integerValue()); break; case FLOATINGPOINT: hasher.add(floatValue()); break; case CHARACTER: hasher.add(characterValue()); break; case STRING: hasher.add(stringValue()); break; } return hasher.get(); }
size_t Predicate::hash() const { Hasher hasher; hasher.add(kind()); switch (kind()) { case TRUE: case FALSE: case SELFCONST: { break; } case AND: { hasher.add(andLeft()); hasher.add(andRight()); break; } case OR: { hasher.add(orLeft()); hasher.add(orRight()); break; } case SATISFIES: { hasher.add(satisfiesType()); hasher.add(satisfiesRequirement()); break; } case VARIABLE: { hasher.add(variableTemplateVar()); break; } } return hasher.get(); }
size_t Value::hash() const { Hasher hasher; hasher.add(kind()); hasher.add(type()); switch (kind()) { case Value::SELF: break; case Value::THIS: break; case Value::CONSTANT: hasher.add(constant()); break; case Value::ALIAS: hasher.add(&(alias())); hasher.add(aliasTemplateArguments().size()); for (const auto& argument: aliasTemplateArguments()) { hasher.add(argument); } break; case Value::PREDICATE: hasher.add(predicate()); break; case Value::LOCALVAR: hasher.add(&(localVar())); break; case Value::REINTERPRET: hasher.add(reinterpretOperand()); break; case Value::DEREF_REFERENCE: hasher.add(derefOperand()); break; case Value::TERNARY: hasher.add(ternaryCondition()); hasher.add(ternaryIfTrue()); hasher.add(ternaryIfFalse()); break; case Value::CAST: hasher.add(castTargetType()); hasher.add(castOperand()); break; case Value::POLYCAST: hasher.add(polyCastTargetType()); hasher.add(polyCastOperand()); break; case Value::INTERNALCONSTRUCT: hasher.add(internalConstructParameters().size()); for (const auto& param: internalConstructParameters()) { hasher.add(param); } break; case Value::MEMBERACCESS: hasher.add(memberAccessObject()); hasher.add(&(memberAccessVar())); break; case Value::BIND_REFERENCE: hasher.add(bindReferenceOperand()); break; case Value::TYPEREF: hasher.add(typeRefType()); break; case Value::TEMPLATEVARREF: hasher.add(templateVar()); break; case Value::CALL: hasher.add(callValue()); hasher.add(callParameters().size()); for (const auto& param: callParameters()) { hasher.add(param); } break; case Value::FUNCTIONREF: hasher.add(functionRefParentType()); hasher.add(&(functionRefFunction())); hasher.add(functionRefTemplateArguments().size()); for (const auto& arg: functionRefTemplateArguments()) { hasher.add(arg); } break; case Value::TEMPLATEFUNCTIONREF: hasher.add(templateFunctionRefParentType()); hasher.add(templateFunctionRefName()); hasher.add(templateFunctionRefFunctionType()); break; case Value::METHODOBJECT: hasher.add(methodObject()); hasher.add(methodOwner()); break; case Value::INTERFACEMETHODOBJECT: hasher.add(interfaceMethodObject()); hasher.add(interfaceMethodOwner()); break; case Value::STATICINTERFACEMETHODOBJECT: hasher.add(staticInterfaceMethodObject()); hasher.add(staticInterfaceMethodOwner()); break; case Value::CAPABILITYTEST: hasher.add(capabilityTestCheckType()); hasher.add(capabilityTestCapabilityType()); break; case Value::ARRAYLITERAL: hasher.add(arrayLiteralValues().size()); for (const auto& value: arrayLiteralValues()) { hasher.add(value); } break; case Value::NEW: hasher.add(newPlacementArg()); hasher.add(newOperand()); break; case Value::CASTDUMMYOBJECT: break; } return hasher.get(); }
std::size_t FunctionType::hash() const { Hasher hasher; hasher.add(data_); return hasher.get(); }