public static DynamicBuffer<T> GetChunkBufferData<T>(this ArchetypeChunk chunk, ref BufferTypeHandle<T> typeHandle)
where T : unmanaged, IBufferElementData
{
#if ENABLE_UNITY_COLLECTIONS_CHECKS
AtomicSafetyHandle.CheckReadAndThrow(typeHandle.m_Safety0);
#endif
chunk.m_EntityComponentStore->AssertEntityHasComponent(chunk.m_Chunk->metaChunkEntity, typeHandle.m_TypeIndex);
BufferHeader* header;
if (typeHandle.IsReadOnly)
{
header = (BufferHeader*)chunk.m_EntityComponentStore->GetComponentDataWithTypeRO(chunk.m_Chunk->metaChunkEntity, typeHandle.m_TypeIndex);
}
else
{
header = (BufferHeader*)chunk.m_EntityComponentStore->GetComponentDataWithTypeRW(
chunk.m_Chunk->metaChunkEntity, typeHandle.m_TypeIndex, chunk.m_EntityComponentStore->GlobalSystemVersion);
}
int internalCapacity = TypeManager.GetTypeInfo(typeHandle.m_TypeIndex).BufferCapacity;
#if ENABLE_UNITY_COLLECTIONS_CHECKS
var useMemoryInit = chunk.m_EntityComponentStore->useMemoryInitPattern != 0;
var memoryInitPattern = chunk.m_EntityComponentStore->memoryInitPattern;
return new DynamicBuffer<T>(header, typeHandle.m_Safety0, typeHandle.m_Safety1, typeHandle.IsReadOnly, useMemoryInit, memoryInitPattern, internalCapacity);
#else
return new DynamicBuffer<T>(header, internalCapacity);
#endif
}```