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