Example #1
0
        /// <summary>
        /// Optimized implementation. </summary>
        public virtual bool SkipTo(int target)
        {
            // don't skip if the target is close (within skipInterval docs away)
            if ((target - SkipInterval) >= Doc_Renamed && Df >= SkipInterval) // optimized case
            {
                if (SkipListReader == null)
                {
                    SkipListReader = new Lucene3xSkipListReader((IndexInput)FreqStream.Clone(), MaxSkipLevels, SkipInterval); // lazily clone
                }

                if (!HaveSkipped) // lazily initialize skip stream
                {
                    SkipListReader.Init(SkipPointer, FreqBasePointer, ProxBasePointer, Df, CurrentFieldStoresPayloads);
                    HaveSkipped = true;
                }

                int newCount = SkipListReader.SkipTo(target);
                if (newCount > Count)
                {
                    FreqStream.Seek(SkipListReader.FreqPointer);
                    SkipProx(SkipListReader.ProxPointer, SkipListReader.PayloadLength);

                    Doc_Renamed = SkipListReader.Doc;
                    Count       = newCount;
                }
            }

            // done skipping, now just scan
            do
            {
                if (!Next())
                {
                    return(false);
                }
            } while (target > Doc_Renamed);
            return(true);
        }
Example #2
0
        /// <summary>
        /// Optimized implementation. </summary>
        public virtual bool SkipTo(int target)
        {
            // don't skip if the target is close (within skipInterval docs away)
            if ((target - skipInterval) >= doc && m_df >= skipInterval) // optimized case
            {
                if (skipListReader == null)
                {
                    skipListReader = new Lucene3xSkipListReader((IndexInput)m_freqStream.Clone(), maxSkipLevels, skipInterval); // lazily clone
                }

                if (!haveSkipped) // lazily initialize skip stream
                {
                    skipListReader.Init(skipPointer, freqBasePointer, proxBasePointer, m_df, m_currentFieldStoresPayloads);
                    haveSkipped = true;
                }

                int newCount = skipListReader.SkipTo(target);
                if (newCount > m_count)
                {
                    m_freqStream.Seek(skipListReader.FreqPointer);
                    SkipProx(skipListReader.ProxPointer, skipListReader.PayloadLength);

                    doc     = skipListReader.Doc;
                    m_count = newCount;
                }
            }

            // done skipping, now just scan
            do
            {
                if (!Next())
                {
                    return(false);
                }
            } while (target > doc);
            return(true);
        }
Example #3
0
        /// <summary>
        /// Optimized implementation. </summary>
        public virtual bool SkipTo(int target)
        {
            // don't skip if the target is close (within skipInterval docs away)
            if ((target - SkipInterval) >= Doc_Renamed && Df >= SkipInterval) // optimized case
            {
                if (SkipListReader == null)
                {
                    SkipListReader = new Lucene3xSkipListReader((IndexInput)FreqStream.Clone(), MaxSkipLevels, SkipInterval); // lazily clone
                }

                if (!HaveSkipped) // lazily initialize skip stream
                {
                    SkipListReader.Init(SkipPointer, FreqBasePointer, ProxBasePointer, Df, CurrentFieldStoresPayloads);
                    HaveSkipped = true;
                }

                int newCount = SkipListReader.SkipTo(target);
                if (newCount > Count)
                {
                    FreqStream.Seek(SkipListReader.FreqPointer);
                    SkipProx(SkipListReader.ProxPointer, SkipListReader.PayloadLength);

                    Doc_Renamed = SkipListReader.Doc;
                    Count = newCount;
                }
            }

            // done skipping, now just scan
            do
            {
                if (!Next())
                {
                    return false;
                }
            } while (target > Doc_Renamed);
            return true;
        }