示例#1
0
        //cm
        internal void AddBufferRaw(Entity entity, int componentTypeIndex, BufferHeader *tempBuffer)
        {
            EntityComponentStore->AssertEntityHasComponent(entity, componentTypeIndex);

            ComponentJobSafetyManager->CompleteReadAndWriteDependency(componentTypeIndex);

            var bufferHeader = (BufferHeader *)EntityComponentStore->GetComponentDataWithTypeRW(entity, componentTypeIndex,
                                                                                                EntityComponentStore->GlobalSystemVersion);

            var typeInfo    = TypeManager.GetTypeInfo(componentTypeIndex);
            var elementSize = typeInfo.ElementSize;
            var alignment   = typeInfo.AlignmentInBytes;

            var total = bufferHeader->Length + tempBuffer->Length;

            if (total > bufferHeader->Capacity)
            {
                BufferHeader.EnsureCapacity(bufferHeader, total, elementSize, alignment, BufferHeader.TrashMode.RetainOldData);
            }

            UnsafeUtility.MemCpy(
                BufferHeader.GetElementPointer(bufferHeader) + bufferHeader->Length * elementSize,
                BufferHeader.GetElementPointer(tempBuffer),
                tempBuffer->Length * elementSize);

            bufferHeader->Length = total;
        }
        public void Reserve(int length)
        {
            CheckWriteAccessAndInvalidateArrayAliases();
#if ENABLE_UNITY_COLLECTIONS_CHECKS
            BufferHeader.EnsureCapacity(m_Buffer, length, UnsafeUtility.SizeOf <T>(), UnsafeUtility.AlignOf <T>(), BufferHeader.TrashMode.RetainOldData, m_useMemoryInitPattern, m_memoryInitPattern);
#else
            BufferHeader.EnsureCapacity(m_Buffer, length, UnsafeUtility.SizeOf <T>(), UnsafeUtility.AlignOf <T>(), BufferHeader.TrashMode.RetainOldData, false, 0);
#endif
        }
示例#3
0
 public void ResizeUninitialized(int length)
 {
     BufferHeader.EnsureCapacity(m_Buffer, length, UnsafeUtility.SizeOf <T>(), UnsafeUtility.AlignOf <T>(), BufferHeader.TrashMode.RetainOldData);
     m_Buffer->Length = length;
 }
示例#4
0
 /// <summary>
 /// Increases the buffer capacity without increasing its length.
 /// </summary>
 /// <param name="length">The new buffer capacity.</param>
 public void Reserve(int length)
 {
     CheckWriteAccessAndInvalidateArrayAliases();
     BufferHeader.EnsureCapacity(m_Buffer, length, UnsafeUtility.SizeOf <T>(), UnsafeUtility.AlignOf <T>(), BufferHeader.TrashMode.RetainOldData);
 }
示例#5
0
 public unsafe void ResizeUninitialized(int length)
 {
     this.InvalidateArrayAliases();
     BufferHeader.EnsureCapacity(this.m_Buffer, length, UnsafeUtility.SizeOf <T>(), UnsafeUtility.AlignOf <T>(), BufferHeader.TrashMode.RetainOldData);
     this.m_Buffer.Length = length;
 }