コード例 #1
0
ファイル: Worker.cs プロジェクト: PoltP/ParallelPacker
 public Worker(string name, IGettableConveyer <TSource> sourceConveyer,
               IPuttableConveyer <TDestination> destinationConveyer, ILoggable logger,
               Convert <TSource, TDestination> convert)
 {
     this.name                = name;
     this.sourceConveyer      = sourceConveyer;
     this.destinationConveyer = destinationConveyer;
     this.logger              = logger;
     this.convert             = convert;
 }
コード例 #2
0
        public static Worker <Block, Block> CreatePackerWorker(int index, PackerMode packerMode, IPackerEngine packerEngine,
                                                               IGettableConveyer <Block> gettableConveyer, IPuttableConveyer <Block> puttableConveyer, ILoggable logger)
        {
            Convert <Block, Block> convert;

            if (packerMode == PackerMode.Pack)
            {
                convert = sourceBlock => new Block(sourceBlock.Index, packerEngine.Pack(sourceBlock.Data));
            }
            else
            {
                convert = sourceBlock => new Block(sourceBlock.Index, packerEngine.Unpack(sourceBlock.Data));
            }
            return(new Worker <Block, Block>($"{packerMode.ToString()}ing #{index}", gettableConveyer, puttableConveyer, logger, convert));
        }
コード例 #3
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));
        }