internal Iterator(byte[] data, int cardinality, int indexInterval, MonotonicAppendingInt64Buffer docIDs, MonotonicAppendingInt64Buffer offsets)
 {
     this.data          = data;
     this.cardinality   = cardinality;
     this.indexInterval = indexInterval;
     this.docIDs        = docIDs;
     this.offsets       = offsets;
     offset             = 0;
     nextDocs           = new int[BLOCK_SIZE];
     Arrays.Fill(nextDocs, -1);
     i = BLOCK_SIZE;
     nextExceptions = new int[BLOCK_SIZE];
     blockIdx       = -1;
     docID          = -1;
 }
Beispiel #2
0
            internal static DocMap Build(int maxDoc, IBits liveDocs)
            {
                Debug.Assert(liveDocs != null);
                MonotonicAppendingInt64Buffer docMap = new MonotonicAppendingInt64Buffer();
                int del = 0;

                for (int i = 0; i < maxDoc; ++i)
                {
                    docMap.Add(i - del);
                    if (!liveDocs.Get(i))
                    {
                        ++del;
                    }
                }
                docMap.Freeze();
                int numDeletedDocs = del;

                Debug.Assert(docMap.Count == maxDoc);
                return(new DocMapAnonymousInnerClassHelper(maxDoc, liveDocs, docMap, numDeletedDocs));
            }
Beispiel #3
0
            internal virtual MonotonicAppendingInt64Buffer GetDeletes(IList <AtomicReader> readers)
            {
                MonotonicAppendingInt64Buffer deletes = new MonotonicAppendingInt64Buffer();
                int deleteCount = 0;

                foreach (AtomicReader reader in readers)
                {
                    int   maxDoc   = reader.MaxDoc;
                    IBits liveDocs = reader.LiveDocs;
                    for (int i = 0; i < maxDoc; ++i)
                    {
                        if (liveDocs != null && !liveDocs.Get(i))
                        {
                            ++deleteCount;
                        }
                        else
                        {
                            deletes.Add(deleteCount);
                        }
                    }
                }
                deletes.Freeze();
                return(deletes);
            }
Beispiel #4
0
 internal PForDeltaDocIdSet(byte[] data, int cardinality, int indexInterval, MonotonicAppendingInt64Buffer docIDs, MonotonicAppendingInt64Buffer offsets)
 {
     this.data          = data;
     this.cardinality   = cardinality;
     this.indexInterval = indexInterval;
     this.docIDs        = docIDs;
     this.offsets       = offsets;
 }
Beispiel #5
0
 internal Iterator(byte[] data, int cardinality, int indexInterval, MonotonicAppendingInt64Buffer positions, MonotonicAppendingInt64Buffer wordNums)
 {
     this.@in           = new ByteArrayDataInput(data);
     this.cardinality   = cardinality;
     this.indexInterval = indexInterval;
     this.positions     = positions;
     this.wordNums      = wordNums;
     wordNum            = -1;
     word           = 0;
     bitList        = 0;
     sequenceNum    = -1;
     docID          = -1;
     indexThreshold = IndexThreshold(cardinality, indexInterval);
 }
Beispiel #6
0
        private readonly MonotonicAppendingInt64Buffer positions, wordNums; // wordNums[i] starts at the sequence at positions[i]

        internal WAH8DocIdSet(byte[] data, int cardinality, int indexInterval, MonotonicAppendingInt64Buffer positions, MonotonicAppendingInt64Buffer wordNums)
        {
            this.data          = data;
            this.cardinality   = cardinality;
            this.indexInterval = indexInterval;
            this.positions     = positions;
            this.wordNums      = wordNums;
        }
Beispiel #7
0
            /// <summary>
            /// Build a new <see cref="WAH8DocIdSet"/>. </summary>
            public virtual WAH8DocIdSet Build()
            {
                if (cardinality == 0)
                {
                    if (Debugging.AssertsEnabled)
                    {
                        Debugging.Assert(lastWordNum == -1);
                    }
                    return(EMPTY);
                }
                WriteSequence();
                byte[] data = Arrays.CopyOf(@out.Bytes, @out.Length);

                // Now build the index
                int valueCount = (numSequences - 1) / indexInterval + 1;
                MonotonicAppendingInt64Buffer indexPositions, indexWordNums;

                if (valueCount <= 1)
                {
                    indexPositions = indexWordNums = SINGLE_ZERO_BUFFER;
                }
                else
                {
                    const int pageSize         = 128;
                    int       initialPageCount = (valueCount + pageSize - 1) / pageSize;
                    MonotonicAppendingInt64Buffer positions = new MonotonicAppendingInt64Buffer(initialPageCount, pageSize, PackedInt32s.COMPACT);
                    MonotonicAppendingInt64Buffer wordNums  = new MonotonicAppendingInt64Buffer(initialPageCount, pageSize, PackedInt32s.COMPACT);

                    positions.Add(0L);
                    wordNums.Add(0L);
                    Iterator it = new Iterator(data, cardinality, int.MaxValue, SINGLE_ZERO_BUFFER, SINGLE_ZERO_BUFFER);
                    if (Debugging.AssertsEnabled)
                    {
                        Debugging.Assert([email protected] == 0);
                        Debugging.Assert(it.wordNum == -1);
                    }
                    for (int i = 1; i < valueCount; ++i)
                    {
                        // skip indexInterval sequences
                        for (int j = 0; j < indexInterval; ++j)
                        {
                            bool readSequence = it.ReadSequence();
                            if (Debugging.AssertsEnabled)
                            {
                                Debugging.Assert(readSequence);
                            }
                            it.SkipDirtyBytes();
                        }
                        int position = [email protected];
                        int wordNum  = it.wordNum;
                        positions.Add(position);
                        wordNums.Add(wordNum + 1);
                    }
                    positions.Freeze();
                    wordNums.Freeze();
                    indexPositions = positions;
                    indexWordNums  = wordNums;
                }

                return(new WAH8DocIdSet(data, cardinality, indexInterval, indexPositions, indexWordNums));
            }
Beispiel #8
0
 public DocMapAnonymousInnerClassHelper(SortingOneMerge outerInstance, MergeState mergeState, MonotonicAppendingInt64Buffer deletes)
 {
     this.outerInstance = outerInstance;
     this.mergeState    = mergeState;
     this.deletes       = deletes;
 }
Beispiel #9
0
 public DocMapAnonymousClass(int maxDoc, MonotonicAppendingInt64Buffer newToOld, MonotonicAppendingInt64Buffer oldToNew)
 {
     this.maxDoc   = maxDoc;
     this.newToOld = newToOld;
     this.oldToNew = oldToNew;
 }