コード例 #1
0
        public static Worker <Block, Block> CreateDestinationWorker(BinaryWriter writer, int blocksNumber, int blockLength,
                                                                    PackerMode packerMode, IGettableConveyer <Block> gettableConveyer, ILoggable logger)
        {
            IPuttableConveyer <Block> puttableConveyer;

            if (packerMode == PackerMode.Pack)
            {
                BinaryBlockWriter.WriteInfo(writer, blocksNumber, blockLength);
                puttableConveyer = new PutOnlyConveyer <Block>((Block block) => {
                    BinaryBlockWriter.WritePackedBlock(writer, block);
                });
            }
            else
            {
                puttableConveyer = new PutOnlyConveyer <Block>((Block block) => {
                    BinaryBlockWriter.WriteBlock(writer, block, blockLength);
                });
            }
            return(new Worker <Block, Block>("Destination", gettableConveyer, puttableConveyer, logger, block => block));
        }
コード例 #2
0
        public static Worker <Block, Block> CreateSourceWorker(BinaryReader reader, int blocksNumber, int blockLength,
                                                               PackerMode packerMode, IPuttableConveyer <Block> puttableConveyer, ILoggable logger)
        {
            IEnumerator <Block> enumerator;

            if (packerMode == PackerMode.Pack)
            {
                enumerator = BinaryBlockReader.CreateRawBlocksEnumerator(reader, blockLength);
            }
            else
            {
                enumerator = BinaryBlockReader.CreatePackedBlocksEnumerator(reader, blocksNumber);
            }
            IGettableConveyer <Block> gettableConveyer = new GetOnlyConveyer <Block>((out bool stopped) => {
                stopped = !enumerator.MoveNext();
                return(stopped ? null : enumerator.Current);
            });

            return(new Worker <Block, Block>("Source", gettableConveyer, puttableConveyer, logger, block => block));
        }
コード例 #3
0
 public PackedChangedEventArgs(PackerMode mode, int count)
 {
     Mode  = mode;
     Count = count;
 }
コード例 #4
0
 protected virtual void RaisePackedChangedEvent(PackerMode mode, int count)
 {
     PackedChanged?.Invoke(this, new PackedChangedEventArgs(mode, count));
 }
コード例 #5
0
ファイル: Packer.cs プロジェクト: PoltP/ParallelPacker
 public static ExitStatus Run(Stream source, Stream destination, IPackerEngine packer, PackerMode packerMode,
                              int blockLength, int parallelismDegree, CancellationTokenSource token, ILoggable logger)
 {
     using (BinaryReader sourceReader = new BinaryReader(source)) {
         using (BinaryWriter destinationWriter = new BinaryWriter(destination)) {
             return(Run(sourceReader, destinationWriter, packer, packerMode,
                        blockLength, parallelismDegree, token, logger));
         }
     }
 }
コード例 #6
0
 public static CompressionMode ToCompressionMode(this PackerMode engineMode)
 {
     return(engineMode == PackerMode.Compress ? CompressionMode.Compress : CompressionMode.Decompress);
 }