Merge pull request #409 from Alkarex/patch-1
[mono.git] / mcs / tools / monkeydoc / Lucene.Net / Lucene.Net / Search / DocIdSet.cs
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 Mono.Lucene.Net.Search
21 {
22         
23         /// <summary> A DocIdSet contains a set of doc ids. Implementing classes must
24         /// only implement {@link #iterator} to provide access to the set. 
25         /// </summary>
26         [Serializable]
27         public abstract class DocIdSet
28         {
29                 public class AnonymousClassDocIdSet:DocIdSet
30                 {
31                         public AnonymousClassDocIdSet()
32                         {
33                                 InitBlock();
34                         }
35                         public class AnonymousClassDocIdSetIterator:DocIdSetIterator
36                         {
37                                 public AnonymousClassDocIdSetIterator(AnonymousClassDocIdSet enclosingInstance)
38                                 {
39                                         InitBlock(enclosingInstance);
40                                 }
41                                 private void  InitBlock(AnonymousClassDocIdSet enclosingInstance)
42                                 {
43                                         this.enclosingInstance = enclosingInstance;
44                                 }
45                                 private AnonymousClassDocIdSet enclosingInstance;
46                                 public AnonymousClassDocIdSet Enclosing_Instance
47                                 {
48                                         get
49                                         {
50                                                 return enclosingInstance;
51                                         }
52                                         
53                                 }
54                                 public override int Advance(int target)
55                                 {
56                                         return NO_MORE_DOCS;
57                                 }
58                                 public override int DocID()
59                                 {
60                                         return NO_MORE_DOCS;
61                                 }
62                                 public override int NextDoc()
63                                 {
64                                         return NO_MORE_DOCS;
65                                 }
66                         }
67                         private void  InitBlock()
68                         {
69                                 iterator = new AnonymousClassDocIdSetIterator(this);
70                         }
71                         
72                         private DocIdSetIterator iterator;
73                         
74                         public override DocIdSetIterator Iterator()
75                         {
76                                 return iterator;
77                         }
78
79                         public override bool IsCacheable()
80                         {
81                                 return true;
82                         }
83                 }
84                 
85                 /// <summary>An empty {@code DocIdSet} instance for easy use, e.g. in Filters that hit no documents. </summary>
86                 [NonSerialized]
87                 public static readonly DocIdSet EMPTY_DOCIDSET;
88                 
89                 /// <summary>Provides a {@link DocIdSetIterator} to access the set.
90                 /// This implementation can return <code>null</code> or
91                 /// <code>{@linkplain #EMPTY_DOCIDSET}.iterator()</code> if there
92                 /// are no docs that match. 
93                 /// </summary>
94                 public abstract DocIdSetIterator Iterator();
95
96                 /// <summary>This method is a hint for {@link CachingWrapperFilter}, if this <code>DocIdSet</code>
97                 /// should be cached without copying it into a BitSet. The default is to return
98                 /// <code>false</code>. If you have an own <code>DocIdSet</code> implementation
99                 /// that does its iteration very effective and fast without doing disk I/O,
100                 /// override this method and return true.
101                 /// </summary>
102                 public virtual bool IsCacheable()
103                 {
104                         return false;
105                 }
106                 static DocIdSet()
107                 {
108                         EMPTY_DOCIDSET = new AnonymousClassDocIdSet();
109                 }
110         }
111 }