예제 #1
0
 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);
     }
 }
예제 #2
0
        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");
            }
        }
예제 #3
0
        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);
            }
        }
예제 #4
0
 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);
     }
 }