Lucene.Net  3.0.3
Lucene.Net is a port of the Lucene search engine library, written in C# and targeted at .NET runtime users.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Properties Pages
DocIdBitSet.cs
Go to the documentation of this file.
1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one or more
3  * contributor license agreements. See the NOTICE file distributed with
4  * this work for additional information regarding copyright ownership.
5  * The ASF licenses this file to You under the Apache License, Version 2.0
6  * (the "License"); you may not use this file except in compliance with
7  * the License. You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 using System;
19 using System.Collections;
20 using Lucene.Net.Support;
21 using DocIdSet = Lucene.Net.Search.DocIdSet;
22 using DocIdSetIterator = Lucene.Net.Search.DocIdSetIterator;
23 
24 namespace Lucene.Net.Util
25 {
26  /// <summary>Simple DocIdSet and DocIdSetIterator backed by a BitSet </summary>
27  public class DocIdBitSet:DocIdSet
28  {
29  private System.Collections.BitArray bitSet;
30 
31  public DocIdBitSet(System.Collections.BitArray bitSet)
32  {
33  this.bitSet = bitSet;
34  }
35 
36  public override DocIdSetIterator Iterator()
37  {
38  return new DocIdBitSetIterator(bitSet);
39  }
40 
41  /// <summary>This DocIdSet implementation is cacheable.</summary>
42  public override bool IsCacheable
43  {
44  get { return true; }
45  }
46 
47  /// <summary> Returns the underlying BitSet. </summary>
48  public virtual BitArray BitSet
49  {
50  get { return this.bitSet; }
51  }
52 
53  private class DocIdBitSetIterator:DocIdSetIterator
54  {
55  private int docId;
56  private System.Collections.BitArray bitSet;
57 
58  internal DocIdBitSetIterator(System.Collections.BitArray bitSet)
59  {
60  this.bitSet = bitSet;
61  this.docId = - 1;
62  }
63 
64  public override int DocID()
65  {
66  return docId;
67  }
68 
69  public override int NextDoc()
70  {
71  // (docId + 1) on next line requires -1 initial value for docNr:
72  int d = BitSetSupport.NextSetBit(bitSet, docId + 1);
73  // -1 returned by BitSet.nextSetBit() when exhausted
74  docId = d == - 1?NO_MORE_DOCS:d;
75  return docId;
76  }
77 
78  public override int Advance(int target)
79  {
80  int d = BitSetSupport.NextSetBit(bitSet, target);
81  // -1 returned by BitSet.nextSetBit() when exhausted
82  docId = d == - 1?NO_MORE_DOCS:d;
83  return docId;
84  }
85  }
86  }
87 }