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; }
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); }