@@ -36,18 +36,13 @@ sealed class TermInfosReader : IDisposable
3636 {
3737 private readonly Directory directory ;
3838 private readonly String segment ;
39- private readonly FieldInfos fieldInfos ;
4039
4140 private bool isDisposed ;
4241
4342 private readonly LightWeightThreadLocal < ThreadResources > threadResources = new LightWeightThreadLocal < ThreadResources > ( ) ;
4443 private readonly SegmentTermEnum origEnum ;
4544 private readonly long size ;
4645
47- private UnmanagedIndexTerms unmanagedIndexTerms => _termsIndexCache . UnmanagedIndexTerms ;
48- private Span < TermInfo > indexInfos => _termsIndexCache . InfoArray ;
49- private Span < long > indexPointers => _termsIndexCache . LongArray ;
50-
5146 private readonly int totalIndexInterval ;
5247
5348 private const int DEFAULT_CACHE_SIZE = 1024 ;
@@ -101,16 +96,15 @@ internal TermInfosReader(Directory dir, System.String seg, FieldInfos fis, int r
10196 {
10297 directory = dir ;
10398 segment = seg ;
104- fieldInfos = fis ;
10599
106- origEnum = new SegmentTermEnum ( directory . OpenInput ( segment + "." + IndexFileNames . TERMS_EXTENSION , readBufferSize , state ) , fieldInfos , false , state ) ;
100+ origEnum = new SegmentTermEnum ( directory . OpenInput ( segment + "." + IndexFileNames . TERMS_EXTENSION , readBufferSize , state ) , fis , false , state ) ;
107101 size = origEnum . size ;
108102
109103 if ( indexDivisor != - 1 )
110104 {
111105 // Load terms index
112106 totalIndexInterval = origEnum . indexInterval * indexDivisor ;
113- _termsIndexCache = directory . GetCache ( segment + "." + IndexFileNames . TERMS_INDEX_EXTENSION , fieldInfos , readBufferSize , indexDivisor , state ) ;
107+ _termsIndexCache = directory . GetCache ( segment + "." + IndexFileNames . TERMS_INDEX_EXTENSION , fis , readBufferSize , indexDivisor , state ) ;
114108 _termsIndexCache . AddRef ( ) ;
115109 }
116110 else
@@ -197,7 +191,7 @@ private ThreadResources GetThreadResources(IState state)
197191 private unsafe int GetIndexOffset ( Term term )
198192 {
199193 int lo = 0 ; // binary search unmanagedIndexTerms[]
200- int hi = unmanagedIndexTerms . Length - 1 ;
194+ int hi = _termsIndexCache . UnmanagedIndexTerms . Length - 1 ;
201195
202196 byte [ ] arr = null ;
203197 Span < byte > stringAsBytes ;
@@ -223,7 +217,7 @@ private unsafe int GetIndexOffset(Term term)
223217 while ( hi >= lo )
224218 {
225219 int mid = Number . URShift ( ( lo + hi ) , 1 ) ;
226- int delta = CompareTerms ( term . Field , stringAsBytes , stringAsSpan , unmanagedIndexTerms [ mid ] ) ;
220+ int delta = CompareTerms ( term . Field , stringAsBytes , stringAsSpan , _termsIndexCache . UnmanagedIndexTerms [ mid ] ) ;
227221 if ( delta < 0 )
228222 hi = mid - 1 ;
229223 else if ( delta > 0 )
@@ -241,12 +235,12 @@ private unsafe int GetIndexOffset(Term term)
241235 }
242236 }
243237
244- private static int CompareTerms ( string field , Span < byte > stringAsBytes , ReadOnlySpan < char > stringAsChar , UnmanagedTerm unmanagedTerm )
238+ private static int CompareTerms ( string field , Span < byte > stringAsBytes , ReadOnlySpan < char > stringAsChar , ( string Field , UnmanagedString Text ) tuple )
245239 {
246- if ( ReferenceEquals ( field , unmanagedTerm . Field ) )
247- return UnmanagedString . CompareOrdinal ( stringAsBytes , stringAsChar , unmanagedTerm . Text ) ;
240+ if ( ReferenceEquals ( field , tuple . Field ) )
241+ return UnmanagedString . CompareOrdinal ( stringAsBytes , stringAsChar , tuple . Text ) ;
248242
249- return String . CompareOrdinal ( field , unmanagedTerm . Field ) ;
243+ return String . CompareOrdinal ( field , tuple . Field ) ;
250244 }
251245
252246 internal static Term DeepCopyOf ( Term other )
@@ -257,8 +251,8 @@ internal static Term DeepCopyOf(Term other)
257251 }
258252
259253 private void SeekEnum ( SegmentTermEnum enumerator , int indexOffset , IState state )
260- {
261- enumerator . Seek ( indexPointers [ indexOffset ] , ( ( long ) indexOffset * totalIndexInterval ) - 1 , unmanagedIndexTerms [ indexOffset ] . ToTerm ( ) , indexInfos [ indexOffset ] , state ) ;
254+ {
255+ enumerator . Seek ( _termsIndexCache . IndexPointers [ indexOffset ] , ( ( long ) indexOffset * totalIndexInterval ) - 1 , _termsIndexCache . UnmanagedIndexTerms [ indexOffset ] , _termsIndexCache . TermInfos [ indexOffset ] , state ) ;
262256 }
263257
264258 /// <summary>Returns the TermInfo for a Term in the set, or null. </summary>
@@ -295,7 +289,7 @@ private TermInfo Get(Term term, bool useCache, IState state)
295289 if ( enumerator . Term != null && ( ( enumerator . Prev ( ) != null && term . CompareTo ( enumerator . Prev ( ) ) > 0 ) || term . CompareTo ( enumerator . Term ) >= 0 ) )
296290 {
297291 int enumOffset = ( int ) ( enumerator . position / totalIndexInterval ) + 1 ;
298- if ( unmanagedIndexTerms . Length == enumOffset || term . CompareTo ( unmanagedIndexTerms [ enumOffset ] ) < 0 )
292+ if ( _termsIndexCache . UnmanagedIndexTerms . Length == enumOffset || term . CompareTo ( _termsIndexCache . UnmanagedIndexTerms [ enumOffset ] ) < 0 )
299293 {
300294 // no need to seek
301295
@@ -340,9 +334,9 @@ private TermInfo Get(Term term, bool useCache, IState state)
340334 return ti ;
341335 }
342336
343- private void EnsureIndexIsRead ( )
337+ private void EnsureIndexIsRead ( )
344338 {
345- if ( unmanagedIndexTerms == null )
339+ if ( _termsIndexCache . UnmanagedIndexTerms == null )
346340 {
347341 throw new SystemException ( "terms index was not loaded when this reader was created" ) ;
348342 }
0 commit comments