Lucene.Net.Search.FieldCacheImpl.StringIndexCache.CreateValue C# (CSharp) Method

CreateValue() protected method

protected CreateValue ( Lucene.Net.Index.IndexReader reader, Entry entryKey ) : Object
reader Lucene.Net.Index.IndexReader
entryKey Entry
return System.Object
            protected internal override System.Object CreateValue(IndexReader reader, Entry entryKey)
            {
                System.String field = StringHelper.Intern(entryKey.field);
                int[] retArray = new int[reader.MaxDoc];
                System.String[] mterms = new System.String[reader.MaxDoc + 1];
                TermDocs termDocs = reader.TermDocs();
                TermEnum termEnum = reader.Terms(new Term(field));
                int t = 0; // current term number
                
                // an entry for documents that have no terms in this field
                // should a document with no terms be at top or bottom?
                // this puts them at the top - if it is changed, FieldDocSortedHitQueue
                // needs to change as well.
                mterms[t++] = null;
                
                try
                {
                    do 
                    {
                        Term term = termEnum.Term;
                        if (term == null || term.Field != field || t >= mterms.Length) break;
                        
                        // store term text
                        mterms[t] = term.Text;
                        
                        termDocs.Seek(termEnum);
                        while (termDocs.Next())
                        {
                            retArray[termDocs.Doc] = t;
                        }
                        
                        t++;
                    }
                    while (termEnum.Next());
                }
                finally
                {
                    termDocs.Close();
                    termEnum.Close();
                }
                
                if (t == 0)
                {
                    // if there are no terms, make the term array
                    // have a single null entry
                    mterms = new System.String[1];
                }
                else if (t < mterms.Length)
                {
                    // if there are less terms than documents,
                    // trim off the dead array space
                    System.String[] terms = new System.String[t];
                    Array.Copy(mterms, 0, terms, 0, t);
                    mterms = terms;
                }
                
                StringIndex value_Renamed = new StringIndex(retArray, mterms);
                return value_Renamed;
            }
        }
FieldCacheImpl.StringIndexCache