コード例 #1
0
        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);
        }