FilteredTermEnum.cs
上传用户:zhangkuixh
上传日期:2013-09-30
资源大小:5473k
文件大小:3k
源码类别:

搜索引擎

开发平台:

C#

  1. /*
  2.  * Copyright 2004 The Apache Software Foundation
  3.  * 
  4.  * Licensed under the Apache License, Version 2.0 (the "License");
  5.  * you may not use this file except in compliance with the License.
  6.  * You may obtain a copy of the License at
  7.  * 
  8.  * http://www.apache.org/licenses/LICENSE-2.0
  9.  * 
  10.  * Unless required by applicable law or agreed to in writing, software
  11.  * distributed under the License is distributed on an "AS IS" BASIS,
  12.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13.  * See the License for the specific language governing permissions and
  14.  * limitations under the License.
  15.  */
  16. using System;
  17. using Term = Lucene.Net.Index.Term;
  18. using TermEnum = Lucene.Net.Index.TermEnum;
  19. namespace Lucene.Net.Search
  20. {
  21. /// <summary>Abstract class for enumerating a subset of all terms. 
  22. /// <p>Term enumerations are always ordered by Term.compareTo().  Each term in
  23. /// the enumeration is greater than all that precede it.  
  24. /// </summary>
  25. public abstract class FilteredTermEnum:TermEnum
  26. {
  27. private Term currentTerm = null;
  28. private TermEnum actualEnum = null;
  29. public FilteredTermEnum()
  30. {
  31. }
  32. /// <summary>Equality compare on the term </summary>
  33. protected internal abstract bool TermCompare(Term term);
  34. /// <summary>Equality measure on the term </summary>
  35. public abstract float Difference();
  36. /// <summary>Indiciates the end of the enumeration has been reached </summary>
  37. public abstract bool EndEnum();
  38. protected internal virtual void  SetEnum(TermEnum actualEnum)
  39. {
  40. this.actualEnum = actualEnum;
  41. // Find the first term that matches
  42. Term term = actualEnum.Term();
  43. if (term != null && TermCompare(term))
  44. currentTerm = term;
  45. else
  46. Next();
  47. }
  48. /// <summary> Returns the docFreq of the current Term in the enumeration.
  49. /// Returns -1 if no Term matches or all terms have been enumerated.
  50. /// </summary>
  51. public override int DocFreq()
  52. {
  53. if (actualEnum == null)
  54. return - 1;
  55. return actualEnum.DocFreq();
  56. }
  57. /// <summary>Increments the enumeration to the next element.  True if one exists. </summary>
  58. public override bool Next()
  59. {
  60. if (actualEnum == null)
  61. return false; // the actual enumerator is not initialized!
  62. currentTerm = null;
  63. while (currentTerm == null)
  64. {
  65. if (EndEnum())
  66. return false;
  67. if (actualEnum.Next())
  68. {
  69. Term term = actualEnum.Term();
  70. if (TermCompare(term))
  71. {
  72. currentTerm = term;
  73. return true;
  74. }
  75. }
  76. else
  77. return false;
  78. }
  79. currentTerm = null;
  80. return false;
  81. }
  82. /// <summary>Returns the current Term in the enumeration.
  83. /// Returns null if no Term matches or all terms have been enumerated. 
  84. /// </summary>
  85. public override Term Term()
  86. {
  87. return currentTerm;
  88. }
  89. /// <summary>Closes the enumeration to further activity, freeing resources.  </summary>
  90. public override void  Close()
  91. {
  92. actualEnum.Close();
  93. currentTerm = null;
  94. actualEnum = null;
  95. }
  96. }
  97. }