Beispiel #1
0
        public void Push(IEnumerable <T> chunk, int count, long chunkSize)
        {
            EnsureStakSize(chunkSize);

            IChunkReference <T> chunkReference;

            if (chunkSize > _bufferSize)
            {
                chunkReference = CreateFileChunkReference(chunk, count);
            }
            else
            {
                chunkReference = new MemoryChunkReference(chunk.ToArray(), chunkSize);
            }

            _stack.Push(chunkReference);

            _currentSize += chunkReference.MemorySize;
        }
Beispiel #2
0
        private IChunkWriter <T> CreateChunkForMerge(long totalSize, int totalCount)
        {
            IChunkWriter <T>    chunkWriter;
            IChunkReference <T> chunkReference;

            if (_currentSize + totalSize > _bufferSize)
            {
                var fileChunk = new FileChunkReference(totalSize, totalCount, _chunkStorage, true);
                chunkWriter    = fileChunk;
                chunkReference = fileChunk;
            }
            else
            {
                var memoryChunk = new MemoryChunkReference(totalCount, totalSize);
                chunkWriter    = memoryChunk;
                chunkReference = memoryChunk;
                _currentSize  += totalSize;
            }

            _stack.Push(chunkReference);

            return(chunkWriter);
        }