protected internal override DirectoryIndexReader DoReopen(SegmentInfos infos)
{
lock (this)
{
DirectoryIndexReader newReader;
if (infos.Count == 1)
{
SegmentInfo si = infos.Info(0);
if (segment.Equals(si.name) && si.GetUseCompoundFile() == this.si.GetUseCompoundFile())
{
newReader = ReopenSegment(si);
}
else
{
// segment not referenced anymore, reopen not possible
// or segment format changed
newReader = SegmentReader.Get(readOnly, infos, infos.Info(0), false);
}
}
else
{
if (readOnly)
{
return(new ReadOnlyMultiSegmentReader(directory, infos, closeDirectory, new SegmentReader[] { this }, null, null));
}
else
{
return(new MultiSegmentReader(directory, infos, closeDirectory, new SegmentReader[] { this }, null, null, false));
}
}
return(newReader);
}
}