private static TextStreamPosition FindBound(BoundFinder finder, Stream stm, Encoding encoding, string boundName,
                                                    TextStreamPositioningParams textStreamPositioningParams)
        {
            TextStreamPosition?pos = finder.Find(stm, encoding, textStreamPositioningParams);

            if (!pos.HasValue)
            {
                throw new Exception(string.Format("Cannot detect the {0} of the log", boundName));
            }
            return(pos.Value);
        }
 internal MediaBasedPositionedMessagesReader(
     ILogMedia media,
     BoundFinder beginFinder,
     BoundFinder endFinder,
     MessagesReaderExtensions.XmlInitializationParams extensionsInitData,
     TextStreamPositioningParams textStreamPositioningParams,
     MessagesReaderFlags flags,
     Settings.IGlobalSettingsAccessor settingsAccessor
     )
 {
     this.beginFinder = beginFinder;
     this.endFinder   = endFinder;
     this.media       = media;
     this.textStreamPositioningParams = textStreamPositioningParams;
     this.singleThreadedStrategy      = new Lazy <BaseStrategy>(CreateSingleThreadedStrategy);
     this.multiThreadedStrategy       = new Lazy <BaseStrategy>(CreateMultiThreadedStrategy);
     this.extensions       = new MessagesReaderExtensions(this, extensionsInitData);
     this.flags            = flags;
     this.settingsAccessor = settingsAccessor;
 }