internal void GetSharedComponentDataArray <T>(ref ComponentChunkIterator iterator, int indexInComponentGroup, int length, out SharedComponentDataArray <T> output) where T : struct, ISharedComponentData { iterator.IndexInComponentGroup = indexInComponentGroup; #if ENABLE_UNITY_COLLECTIONS_CHECKS var typeIndex = m_ComponentGroupData.ComponentTypeIndex(indexInComponentGroup); output = new SharedComponentDataArray <T>(m_TypeManager.GetSharedComponentDataManager(), indexInComponentGroup, iterator, length, m_SafetyManager.GetSafetyHandle(typeIndex, true)); #else output = new SharedComponentDataArray <T>(m_TypeManager.GetSharedComponentDataManager(), indexInComponentGroup, iterator, length); #endif }
internal ComponentGroupData GetVariation <SharedComponent1, SharedComponent2>(ArchetypeManager typeManager, SharedComponent1 sharedComponent1, SharedComponent2 sharedComponent2) where SharedComponent1 : struct, ISharedComponentData where SharedComponent2 : struct, ISharedComponentData { var componentIndex1 = GetIndexInComponentGroup(TypeManager.GetTypeIndex <SharedComponent1>()); var componentIndex2 = GetIndexInComponentGroup(TypeManager.GetTypeIndex <SharedComponent2>()); const int filteredCount = 2; var filtered = (int *)UnsafeUtility.Malloc((filteredCount * 2 + 1) * sizeof(int), sizeof(int), Allocator.Temp); filtered[0] = filteredCount; filtered[1] = componentIndex1; filtered[2] = typeManager.GetSharedComponentDataManager().InsertSharedComponent(sharedComponent1); filtered[3] = componentIndex2; filtered[4] = typeManager.GetSharedComponentDataManager().InsertSharedComponent(sharedComponent2); return(new ComponentGroupData(this, filtered)); }
public void Dispose() { for (var i = 0; i < SharedComponentIndex.Length; ++i) { TypeManager.GetSharedComponentDataManager().RemoveReference(SharedComponentIndex[i]); } ItemIterator.Dispose(); ItemLength.Dispose(); SharedComponentIndex.Dispose(); }
internal void ResetFilter(ArchetypeManager typeManager) { var filteredCount = m_Filter.FilterCount; fixed(int *sharedComponentIndexPtr = m_Filter.SharedComponentIndex) { for (var i = 0; i < filteredCount; ++i) { typeManager.GetSharedComponentDataManager().RemoveReference(sharedComponentIndexPtr[i]); } } }
internal void RemoveFiterReferences(ArchetypeManager typeManager) { if (m_FilteredSharedComponents == null) { return; } var filteredCount = m_FilteredSharedComponents[0]; var filtered = m_FilteredSharedComponents + 1; for (var i = 0; i < filteredCount; ++i) { var sharedComponentIndex = filtered[i * 2 + 1]; typeManager.GetSharedComponentDataManager().RemoveReference(sharedComponentIndex); } UnsafeUtility.Free(m_FilteredSharedComponents, Allocator.Temp); }