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
CSharpRegexCapabilities.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 Contrib.Regex
21 {
22  /// <summary>
23  /// C# Regex based implementation of <see cref="IRegexCapabilities"/>.
24  /// </summary>
25  /// <remarks>http://www.java2s.com/Open-Source/Java-Document/Net/lucene-connector/org/apache/lucene/search/regex/JavaUtilRegexCapabilities.java.htm</remarks>
26  public class CSharpRegexCapabilities : IRegexCapabilities, IEquatable<CSharpRegexCapabilities>
27  {
28  private System.Text.RegularExpressions.Regex _rPattern;
29 
30  /// <summary>
31  /// Called by the constructor of <see cref="RegexTermEnum"/> allowing implementations to cache
32  /// a compiled version of the regular expression pattern.
33  /// </summary>
34  /// <param name="pattern">regular expression pattern</param>
35  public void Compile(string pattern)
36  {
37  _rPattern = new System.Text.RegularExpressions.Regex(pattern,
38  System.Text.RegularExpressions.RegexOptions.Compiled);
39  }
40 
41  /// <summary>
42  /// True on match.
43  /// </summary>
44  /// <param name="s">text to match</param>
45  /// <returns>true on match</returns>
46  public bool Match(string s)
47  {
48  return _rPattern.IsMatch(s);
49  }
50 
51  /// <summary>
52  /// A wise prefix implementation can reduce the term enumeration (and thus performance)
53  /// of RegexQuery dramatically.
54  /// </summary>
55  /// <returns>static non-regex prefix of the pattern last passed to <see cref="IRegexCapabilities.Compile"/>.
56  /// May return null</returns>
57  public string Prefix()
58  {
59  return null;
60  }
61 
62  /// <summary>
63  /// Indicates whether the current object is equal to another object of the same type.
64  /// </summary>
65  /// <returns>
66  /// true if the current object is equal to the <paramref name="other"/> parameter; otherwise, false.
67  /// </returns>
68  /// <param name="other">An object to compare with this object</param>
69  public bool Equals(CSharpRegexCapabilities other)
70  {
71  if (other == null) return false;
72  if (this == other) return true;
73 
74  if (_rPattern != null ? !_rPattern.Equals(other._rPattern) : other._rPattern != null)
75  return false;
76 
77  return true;
78  }
79 
80  public override bool Equals(object obj)
81  {
82  if (obj as CSharpRegexCapabilities == null) return false;
83  return Equals((CSharpRegexCapabilities) obj);
84  }
85 
86  public override int GetHashCode()
87  {
88  return (_rPattern != null ? _rPattern.GetHashCode() : 0);
89  }
90  }
91 }