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
AbstractAllTermDocs.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 
20 namespace Lucene.Net.Index
21 {
22  /// <summary>
23  /// Base class for enumerating all but deleted docs.
24  ///
25  /// <p/>NOTE: this class is meant only to be used internally
26  /// by Lucene; it's only public so it can be shared across
27  /// packages. This means the API is freely subject to
28  /// change, and, the class could be removed entirely, in any
29  /// Lucene release. Use directly at your own risk! */
30  /// </summary>
31  public abstract class AbstractAllTermDocs : TermDocs
32  {
33  protected int maxDoc;
34  protected int internalDoc = -1;
35 
36  protected AbstractAllTermDocs(int maxDoc)
37  {
38  this.maxDoc = maxDoc;
39  }
40 
41  public void Seek(Term term)
42  {
43  if (term == null)
44  {
45  internalDoc = -1;
46  }
47  else
48  {
49  throw new NotSupportedException();
50  }
51  }
52 
53  public void Seek(TermEnum termEnum)
54  {
55  throw new NotSupportedException();
56  }
57 
58  public int Doc
59  {
60  get { return internalDoc; }
61  }
62 
63  public int Freq
64  {
65  get { return 1; }
66  }
67 
68  public bool Next()
69  {
70  return SkipTo(internalDoc + 1);
71  }
72 
73  public int Read(int[] docs, int[] freqs)
74  {
75  int length = docs.Length;
76  int i = 0;
77  while (i < length && internalDoc < maxDoc)
78  {
79  if (!IsDeleted(internalDoc))
80  {
81  docs[i] = internalDoc;
82  freqs[i] = 1;
83  ++i;
84  }
85  internalDoc++;
86  }
87  return i;
88  }
89 
90  public bool SkipTo(int target)
91  {
92  internalDoc = target;
93  while (internalDoc < maxDoc)
94  {
95  if (!IsDeleted(internalDoc))
96  {
97  return true;
98  }
99  internalDoc++;
100  }
101  return false;
102  }
103 
104  public void Close()
105  {
106  Dispose();
107  }
108 
109  public void Dispose()
110  {
111  Dispose(true);
112  }
113 
114  protected abstract void Dispose(bool disposing);
115 
116  public abstract bool IsDeleted(int doc);
117  }
118 }