public JobHandle Sort(NativeArray <TType> sourceArray, int length, int sliceCount, JobHandle inputDeps = default) { sliceCount = math.min(length, math.max(1, sliceCount)); if (sliceCount > 1 && sliceCount % 2 != 0) { sliceCount--; } var totalSliceCount = SortUtility.CalculateTotalSlices(sliceCount); if (m_requiredBuffers.Length != totalSliceCount) { inputDeps.Complete(); foreach (var buffer in m_requiredBuffers) { buffer.Dispose(); } m_requiredBuffers = new NativeList <TType> [totalSliceCount]; for (var i = 0; i < m_requiredBuffers.Length; ++i) { m_requiredBuffers[i] = new NativeList <TType>(Allocator.Persistent); } } inputDeps = SortHelper.PrepareData(sourceArray, length, SortedData, inputDeps); inputDeps = SortHelper.SliceArray(SortedData, length, sliceCount, m_requiredBuffers, inputDeps); inputDeps = SortHelper.SortSlices(m_requiredBuffers, sliceCount, inputDeps); inputDeps = SortHelper.MergeSlices(SortedData, length, sliceCount, m_requiredBuffers, inputDeps); return(inputDeps); }