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); } }
public unsafe static void CheckExistsAndThrow(AtomicSafetyHandle handle) { AtomicSafetyHandleVersionMask *ptr = (AtomicSafetyHandleVersionMask *)((void *)handle.versionNode); if ((handle.version & AtomicSafetyHandleVersionMask.ReadWriteAndDisposeInv) != (*ptr & AtomicSafetyHandleVersionMask.ReadWriteAndDisposeInv)) { throw new InvalidOperationException("The NativeArray has been deallocated, it is not allowed to access it"); } }
public unsafe static void CheckWriteAndThrow(AtomicSafetyHandle handle) { AtomicSafetyHandleVersionMask *ptr = (AtomicSafetyHandleVersionMask *)((void *)handle.versionNode); if ((handle.version & AtomicSafetyHandleVersionMask.Write) == (AtomicSafetyHandleVersionMask)0 && handle.version != (*ptr & AtomicSafetyHandleVersionMask.ReadInv)) { AtomicSafetyHandle.CheckWriteAndThrowNoEarlyOut(handle); } }
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); } }