in src/plugins/equality.ts [916:958]
function hashInstanceMethod(
generatedTypeEqualityInformation: GeneratedTypeEqualityInformation[],
): ObjC.Method {
const hashEqualityValues: TypeEqualityValue[] =
generatedTypeEqualityInformation.reduce(buildHashValues, []);
const hashValues: string[] = hashEqualityValues.map(selectValue);
const hashValuesGroup: string = hashValues.join(', ');
return {
preprocessors: [],
belongsToProtocol: 'NSObject',
keywords: [
{
name: 'hash',
argument: null,
},
],
code: [
'NSUInteger subhashes[] = {' + hashValuesGroup + '};',
'NSUInteger result = subhashes[0];',
'for (int ii = 1; ii < ' + hashValues.length + '; ++ii) {',
' unsigned long long base = (((unsigned long long)result) << 32 | subhashes[ii]);',
' base = (~base) + (base << 18);',
' base ^= (base >> 31);',
' base *= 21;',
' base ^= (base >> 11);',
' base += (base << 6);',
' base ^= (base >> 22);',
' result = base;',
'}',
'return result;',
],
comments: [],
compilerAttributes: [],
returnType: {
type: {
name: 'NSUInteger',
reference: 'NSUInteger',
},
modifiers: [],
},
};
}