public static unsafe int GetHashCode(void *dataPtr, TypeInfo typeInfo) { if (typeInfo.GetHashFn != null) { TypeInfo.GetHashCodeDelegate fn = (TypeInfo.GetHashCodeDelegate)typeInfo.GetHashFn; return(fn(dataPtr)); } return(Hash32((byte *)dataPtr, typeInfo.TypeSize)); }
public static unsafe int GetHashCode(void *dataPtr, TypeInfo typeInfo) { #if !NET_DOTS if (typeInfo.GetHashFn != null) { TypeInfo.GetHashCodeDelegate fn = (TypeInfo.GetHashCodeDelegate)typeInfo.GetHashFn; return(fn(dataPtr)); } #endif var layout = typeInfo.Layouts; var data = (byte *)dataPtr; uint hash = 0; for (var k = 0; k != layout.Length; k++) { if (layout[k].Aligned4) { var dataInt = (uint *)(data + layout[k].offset); var count = layout[k].count; for (var i = 0; i != count; i++) { hash *= FNV_32_PRIME; hash ^= dataInt[i]; } } else { var dataByte = data + layout[k].offset; var count = layout[k].count; for (var i = 0; i != count; i++) { hash *= FNV_32_PRIME; hash ^= dataByte[i]; } } } return((int)hash); }