private CompositeReaderContext(CompositeReaderContext parent, CompositeReader reader, int ordInParent, int docbaseInParent, IList <IndexReaderContext> children, IList <AtomicReaderContext> leaves)
     : base(parent, ordInParent, docbaseInParent)
 {
     this.children = Collections.UnmodifiableList(children);
     this.leaves   = leaves;
     this.reader   = reader;
 }
Esempio n. 2
0
 private CompositeReaderContext(CompositeReaderContext parent, CompositeReader reader, int ordInParent, int docbaseInParent, IList <IndexReaderContext> children, IList <AtomicReaderContext> leaves)
     : base(parent, ordInParent, docbaseInParent)
 {
     this.children = children.AsReadOnly();
     this.leaves   = leaves;
     this.reader   = reader;
 }
Esempio n. 3
0
 /// <summary>
 /// Creates a new <see cref="AtomicReaderContext"/>
 /// </summary>
 internal AtomicReaderContext(CompositeReaderContext parent, AtomicReader reader, int ord, int docBase, int leafOrd, int leafDocBase)
     : base(parent, ord, docBase)
 {
     this.Ord     = leafOrd;
     this.DocBase = leafDocBase;
     this.reader  = reader;
     this.leaves  = IsTopLevel ? new[] { this } : null;
 }
Esempio n. 4
0
 internal IndexReaderContext(CompositeReaderContext parent, int ordInParent, int docBaseInParent)
 {
     if (!(this is CompositeReaderContext || this is AtomicReaderContext))
     {
         throw new Exception("this class should never be extended by custom code!");
     }
     this.Parent          = parent;
     this.DocBaseInParent = docBaseInParent;
     this.OrdInParent     = ordInParent;
     this.IsTopLevel      = parent == null;
 }
            internal IndexReaderContext Build(CompositeReaderContext parent, IndexReader reader, int ord, int docBase)
            {
                var ar = reader as AtomicReader;

                if (ar != null)
                {
                    var atomic = new AtomicReaderContext(parent, ar, ord, docBase, leaves.Count, leafDocBase);
                    leaves.Add(atomic);
                    leafDocBase += reader.MaxDoc;
                    return(atomic);
                }
                else
                {
                    CompositeReader        cr = (CompositeReader)reader;
                    var                    sequentialSubReaders = cr.GetSequentialSubReaders();
                    var                    children             = new IndexReaderContext[sequentialSubReaders.Count];
                    CompositeReaderContext newParent;
                    if (parent == null)
                    {
                        newParent = new CompositeReaderContext(cr, children, leaves);
                    }
                    else
                    {
                        newParent = new CompositeReaderContext(parent, cr, ord, docBase, children);
                    }
                    int newDocBase = 0;
                    for (int i = 0, c = sequentialSubReaders.Count; i < c; i++)
                    {
                        IndexReader r = sequentialSubReaders[i];
                        children[i] = Build(newParent, r, i, newDocBase);
                        newDocBase += r.MaxDoc;
                    }
                    if (Debugging.AssertsEnabled)
                    {
                        Debugging.Assert(newDocBase == cr.MaxDoc);
                    }
                    return(newParent);
                }
            }
 /// <summary>
 /// Creates a <see cref="CompositeReaderContext"/> for intermediate readers that aren't
 /// not top-level readers in the current context
 /// </summary>
 internal CompositeReaderContext(CompositeReaderContext parent, CompositeReader reader, int ordInParent, int docbaseInParent, IList <IndexReaderContext> children)
     : this(parent, reader, ordInParent, docbaseInParent, children, null)
 {
 }