public unsafe T this[int index] { get { AtomicSafetyHandleVersionMask *ptr = (AtomicSafetyHandleVersionMask *)((void *)this.m_Safety.versionNode); if ((this.m_Safety.version & AtomicSafetyHandleVersionMask.Read) == (AtomicSafetyHandleVersionMask)0 && this.m_Safety.version != (*ptr & AtomicSafetyHandleVersionMask.ReadInv)) { AtomicSafetyHandle.CheckReadAndThrowNoEarlyOut(this.m_Safety); } if (index < this.m_MinIndex || index > this.m_MaxIndex) { this.FailOutOfRangeError(index); } return(UnsafeUtility.ReadArrayElement <T>(this.m_Buffer, index * this.m_Stride)); } set { AtomicSafetyHandleVersionMask *ptr = (AtomicSafetyHandleVersionMask *)((void *)this.m_Safety.versionNode); if ((this.m_Safety.version & AtomicSafetyHandleVersionMask.Write) == (AtomicSafetyHandleVersionMask)0 && this.m_Safety.version != (*ptr & AtomicSafetyHandleVersionMask.WriteInv)) { AtomicSafetyHandle.CheckWriteAndThrowNoEarlyOut(this.m_Safety); } if (index < this.m_MinIndex || index > this.m_MaxIndex) { this.FailOutOfRangeError(index); } UnsafeUtility.WriteArrayElement <T>(this.m_Buffer, index * this.m_Stride, value); } }
void CheckElementWriteAccess(int index) { if (index < m_MinIndex || index > m_MaxIndex) { FailOutOfRangeError(index); } var versionPtr = (int *)m_Safety.versionNode; if (m_Safety.version != ((*versionPtr) & AtomicSafetyHandle.WriteCheck)) { AtomicSafetyHandle.CheckWriteAndThrowNoEarlyOut(m_Safety); } }
void CheckElementWriteAccess(int index) { if (index < m_MinIndex || index > m_MaxIndex) { FailOutOfRangeError(index); } var versionPtr = (AtomicSafetyHandleVersionMask *)m_Safety.versionNode; if ((m_Safety.version & AtomicSafetyHandleVersionMask.Write) == 0 && m_Safety.version != ((*versionPtr) & AtomicSafetyHandleVersionMask.ReadInv)) { AtomicSafetyHandle.CheckWriteAndThrowNoEarlyOut(m_Safety); } }
public static AsyncRequestNativeArrayData CreateAndCheckAccess <T>(NativeArray <T> array) where T : struct { var nativeArrayData = new AsyncRequestNativeArrayData(); nativeArrayData.nativeArrayBuffer = array.GetUnsafePtr(); nativeArrayData.lengthInBytes = array.Length * UnsafeUtility.SizeOf <T>(); var handle = NativeArrayUnsafeUtility.GetAtomicSafetyHandle(array); var versionPtr = (int *)handle.versionNode; if (handle.version != ((*versionPtr) & AtomicSafetyHandle.WriteCheck)) { AtomicSafetyHandle.CheckWriteAndThrowNoEarlyOut(handle); } nativeArrayData.safetyHandle = handle; return(nativeArrayData); }
private unsafe void CheckWriteIndex(int index) { #if COLLECTIONS_CHECKS if (index < this.m_MinIndex || index > this.m_MaxIndex) { this.FailOutOfRangeError(index); } if (this.m_Safety.version == (*(int *)(void *)this.m_Safety.versionNode & -6)) { return; } AtomicSafetyHandle.CheckWriteAndThrowNoEarlyOut(this.m_Safety); #endif }
private unsafe void CheckWriteIndex(int index) { bool flag = index <this.m_MinIndex || index> this.m_MaxIndex; if (flag) { this.FailOutOfRangeError(index); } int *ptr = (int *)((void *)this.m_Safety.versionNode); bool flag2 = this.m_Safety.version != (*ptr & -6); if (flag2) { AtomicSafetyHandle.CheckWriteAndThrowNoEarlyOut(this.m_Safety); } }
public unsafe static AsyncRequestNativeArrayData CreateAndCheckAccess <T>(NativeSlice <T> array) where T : struct { AsyncRequestNativeArrayData result = default(AsyncRequestNativeArrayData); result.nativeArrayBuffer = array.GetUnsafePtr <T>(); result.lengthInBytes = (long)array.Length * (long)UnsafeUtility.SizeOf <T>(); AtomicSafetyHandle atomicSafetyHandle = NativeSliceUnsafeUtility.GetAtomicSafetyHandle <T>(array); int *ptr = (int *)((void *)atomicSafetyHandle.versionNode); bool flag = atomicSafetyHandle.version != (*ptr & -6); if (flag) { AtomicSafetyHandle.CheckWriteAndThrowNoEarlyOut(atomicSafetyHandle); } result.safetyHandle = atomicSafetyHandle; return(result); }
public static AsyncRequestNativeArrayData CreateAndCheckAccess <T>(NativeArray <T> array) where T : struct { if (array.m_AllocatorLabel == Allocator.Temp || array.m_AllocatorLabel == Allocator.TempJob) { throw new ArgumentException("AsyncGPUReadback cannot use Temp memory as input since the result may only become available at an unspecified point in the future."); } var nativeArrayData = new AsyncRequestNativeArrayData(); nativeArrayData.nativeArrayBuffer = array.GetUnsafePtr(); nativeArrayData.lengthInBytes = (long)array.Length * UnsafeUtility.SizeOf <T>(); var handle = NativeArrayUnsafeUtility.GetAtomicSafetyHandle(array); var versionPtr = (int *)handle.versionNode; if (handle.version != ((*versionPtr) & AtomicSafetyHandle.WriteCheck)) { AtomicSafetyHandle.CheckWriteAndThrowNoEarlyOut(handle); } nativeArrayData.safetyHandle = handle; return(nativeArrayData); }
public unsafe T this[int index] { get { if (this.m_Buffer == IntPtr.Zero) { throw new InvalidOperationException("NativeSlice not properly initialized"); } AtomicSafetyHandleVersionMask *ptr = (AtomicSafetyHandleVersionMask *)((void *)this.m_Safety.versionNode); if ((this.m_Safety.version & AtomicSafetyHandleVersionMask.Read) == (AtomicSafetyHandleVersionMask)0 && this.m_Safety.version != (*ptr & AtomicSafetyHandleVersionMask.WriteInv)) { AtomicSafetyHandle.CheckReadAndThrowNoEarlyOut(this.m_Safety); } if (index < this.m_MinIndex || index > this.m_MaxIndex) { this.FailOutOfRangeError(index); } return(UnsafeUtility.ReadArrayElementWithStride <T>(this.m_Buffer, index, this.m_Stride)); } set { if (this.m_Buffer == IntPtr.Zero) { throw new InvalidOperationException("NativeSlice not properly initialized"); } AtomicSafetyHandleVersionMask *ptr = (AtomicSafetyHandleVersionMask *)((void *)this.m_Safety.versionNode); if ((this.m_Safety.version & AtomicSafetyHandleVersionMask.Write) == (AtomicSafetyHandleVersionMask)0 && this.m_Safety.version != (*ptr & AtomicSafetyHandleVersionMask.ReadInv)) { AtomicSafetyHandle.CheckWriteAndThrowNoEarlyOut(this.m_Safety); } if (index < this.m_MinIndex || index > this.m_MaxIndex) { this.FailOutOfRangeError(index); } UnsafeUtility.WriteArrayElementWithStride <T>(this.m_Buffer, index, this.m_Stride, value); } }