Exemplo n.º 1
0
        public GrouperIOs(
            IInputReaderFactory inputReaderFactory,
            IGroupsLinesOutputFactory groupsLinesOutputFactory,
            IIoService ioService,
            IConfig config)
        {
            _implementation = new Lazy <IReadOnlyList <IGrouperIO> >(() =>
            {
                var inputFileLength = ioService.SizeOfFile(config.InputFilePath);
                if (config.GrouperEnginesCount == 1)
                {
                    return new[]
                    {
                        new IO(inputReaderFactory.Create(inputFileLength),
                               groupsLinesOutputFactory.Create())
                    }
                }
                ;

                var implementation = new List <IGrouperIO>();
                var blockLength    = inputFileLength / config.GrouperEnginesCount;

                long offset = 0;
                using (var inputStream = ioService.OpenRead(config.InputFilePath))
                    for (int i = 0; i < config.GrouperEnginesCount; i++)
                    {
                        inputStream.Position = Math.Min(
                            offset + blockLength,
                            inputFileLength - 1);

                        while (inputStream.ReadByte() != Consts.EndLineByte2)
                        {
                            ;
                        }

                        var readingLength = inputStream.Position - offset;

                        implementation.Add(new IO(
                                               inputReaderFactory.Create(offset, readingLength),
                                               groupsLinesOutputFactory.Create(offset)));


                        if (inputStream.Position == inputFileLength)
                        {
                            break;
                        }

                        offset = inputStream.Position;
                    }

                return(implementation);
            });
        }
Exemplo n.º 2
0
 public DrawerFactory(IInputReaderFactory inputReaderFactory)
 {
     this.inputReaderFactory = inputReaderFactory;
 }