public static NativeArray <T> CreateMaskedBuffer <T>(NativeArray <T> data, NativeArray <byte> mask, Allocator allocator) where T : struct { var result = NativeArrayUtility.CreateCopy(data, allocator); ApplyMask(result, mask); return(result); }
public static NativeView GetReadView <T>(NativeArray <T> data) where T : struct { unsafe { return(new NativeView((byte *)data.GetUnsafeReadOnlyPtr(), NativeArrayUtility.LengthInBytes(data))); } }
internal static uint GetMaskedHash(NativeView data, NativeView mask, uint seed) { var copy = NativeArrayUtility.CreateOwningCopy(data, Allocator.Temp); MaskedMemCopy.ApplyMask(NativeViewUtility.GetWriteView(copy), mask); var hash = GetDenseHash(copy, seed); copy.Dispose(); return(hash); }
// use the native implementation from dots (not burstable) public static Hash128 Hash <T>(NativeArray <T> data) where T : struct { if (NativeArrayUtility.IsInvalidOrEmpty(data)) { return(new Hash128()); } var sizeOfT = UnsafeUtility.SizeOf <T>(); var sizeInBytes = sizeOfT * data.Length; var hash = new Hash128(); unsafe { var ptr = data.GetUnsafeReadOnlyPtr(); var resultPtr = (UnityEngine.Hash128 *)UnsafeUtility.AddressOf(ref hash); HashUnsafeUtilities.ComputeHash128(ptr, (ulong)sizeInBytes, resultPtr); } return(hash); }