Esempio n. 1
0
        public ISortMethod <T> CreateSortMethod <T>(ChunkStack <T> chunkStack, IChunkStackFactory <T> chunkStackFactory) where T : IComparable
        {
            switch (_sortMethod)
            {
            case SortMethod.MergeSort:
            {
                return(new OppositeMergeSort <T>(
                           chunkStack,
                           chunkStackFactory.CreateChunkStack(),
                           _onlyMemoryMerge));
            }

            case SortMethod.MergeQuickSort:
            {
                if (_quickSortSize != null)
                {
                    return(new OppositeMergeQuickSort <T>(
                               chunkStack,
                               chunkStackFactory.CreateChunkStack(),
                               _quickSortSize.Value,
                               _onlyMemoryMerge));
                }

                return(new OppositeMergeQuickSort <T>(
                           chunkStack,
                           chunkStackFactory.CreateChunkStack(),
                           onlyMemoryMerge: _onlyMemoryMerge));
            }

            case SortMethod.ConcurrentMergeQuickSort:
            {
                if (_quickSortSize != null)
                {
                    return(new ConcurrentOppositeMergeQuickSort <T>(
                               chunkStack,
                               chunkStackFactory,
                               _channelCapacity,
                               _sortConcurrency,
                               _mergeConcurrency,
                               _quickSortSize.Value,
                               _onlyMemoryMerge));
                }

                return(new ConcurrentOppositeMergeQuickSort <T>(
                           chunkStack,
                           chunkStackFactory,
                           _channelCapacity,
                           _sortConcurrency,
                           _mergeConcurrency,
                           onlyMemoryMerge: _onlyMemoryMerge));
            }

            default:
                throw new NotSupportedException();
            }
        }
Esempio n. 2
0
 public ConcurrentOppositeMergeQuickSort(
     ChunkStack <T> chunkStack,
     IChunkStackFactory <T> chunkStackFactory,
     int channelCapacity  = 2,
     int sortConcurrency  = 10,
     int mergeConcurrency = 4,
     int chunkSize        = 1000000,
     bool onlyMemoryMerge = false)
     : base(chunkStack, null, onlyMemoryMerge)
 {
     _chunkSize         = chunkSize;
     _chunkStackFactory = chunkStackFactory;
     _channelCapacity   = channelCapacity;
     _sortConcurrency   = sortConcurrency;
     _mergeConcurrency  = mergeConcurrency;
     _onlyMemoryMerge   = onlyMemoryMerge;
 }