You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucene.apache.org by ot...@apache.org on 2003/09/10 12:04:47 UTC

cvs commit: jakarta-lucene/src/java/org/apache/lucene/search WildcardTermEnum.java

otis        2003/09/10 03:04:47

  Modified:    src/java/org/apache/lucene/search WildcardTermEnum.java
  Log:
  - Minor javadoc improvement, but primarily reindented weird indentation and
    replaces tabs with four spaces.
  
  Revision  Changes    Path
  1.6       +119 -118  jakarta-lucene/src/java/org/apache/lucene/search/WildcardTermEnum.java
  
  Index: WildcardTermEnum.java
  ===================================================================
  RCS file: /home/cvs/jakarta-lucene/src/java/org/apache/lucene/search/WildcardTermEnum.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- WildcardTermEnum.java	16 Apr 2003 04:22:38 -0000	1.5
  +++ WildcardTermEnum.java	10 Sep 2003 10:04:47 -0000	1.6
  @@ -65,6 +65,8 @@
    * <p>
    * Term enumerations are always ordered by Term.compareTo().  Each term in
    * the enumeration is greater than all that precede it.
  + *
  + * @version $Id$
    */
   public class WildcardTermEnum extends FilteredTermEnum {
     Term searchTerm;
  @@ -77,40 +79,40 @@
   
     /**
      * Creates a new <code>WildcardTermEnum</code>.  Passing in a
  -   * {@link org.apache.lucene.index.Term} that does not contain a
  +   * {@link org.apache.lucene.index.Term Term} that does not contain a
      * <code>WILDCARD_CHAR</code> will cause an exception to be thrown.
      */
     public WildcardTermEnum(IndexReader reader, Term term) throws IOException {
  -      super(reader, term);
  -      searchTerm = term;
  -      field = searchTerm.field();
  -      text = searchTerm.text();
  -
  -      int sidx = text.indexOf(WILDCARD_STRING);
  -      int cidx = text.indexOf(WILDCARD_CHAR);
  -      int idx = sidx;
  -      if (idx == -1) {
  -        idx = cidx;
  -      }
  -      else if (cidx >= 0) {
  -        idx = Math.min(idx, cidx);
  -      }
  +    super(reader, term);
  +    searchTerm = term;
  +    field = searchTerm.field();
  +    text = searchTerm.text();
  +
  +    int sidx = text.indexOf(WILDCARD_STRING);
  +    int cidx = text.indexOf(WILDCARD_CHAR);
  +    int idx = sidx;
  +    if (idx == -1) {
  +      idx = cidx;
  +    }
  +    else if (cidx >= 0) {
  +      idx = Math.min(idx, cidx);
  +    }
   
  -      pre = searchTerm.text().substring(0,idx);
  -      preLen = pre.length();
  -      text = text.substring(preLen);
  -      setEnum(reader.terms(new Term(searchTerm.field(), pre)));
  +    pre = searchTerm.text().substring(0,idx);
  +    preLen = pre.length();
  +    text = text.substring(preLen);
  +    setEnum(reader.terms(new Term(searchTerm.field(), pre)));
     }
   
     protected final boolean termCompare(Term term) {
  -      if (field == term.field()) {
  -          String searchText = term.text();
  -          if (searchText.startsWith(pre)) {
  -            return wildcardEquals(text, 0, searchText, preLen);
  -          }
  +    if (field == term.field()) {
  +      String searchText = term.text();
  +      if (searchText.startsWith(pre)) {
  +        return wildcardEquals(text, 0, searchText, preLen);
         }
  -      endEnum = true;
  -      return false;
  +    }
  +    endEnum = true;
  +    return false;
     }
   
     public final float difference() {
  @@ -128,102 +130,101 @@
     public static final char WILDCARD_STRING = '*';
     public static final char WILDCARD_CHAR = '?';
   
  -    /**
  -     * Determines if a word matches a wildcard pattern.
  -     * <small>Work released by Granta Design Ltd after originally being done on
  -     * company time.</small>
  -     */
  -    public static final boolean wildcardEquals(String pattern, int patternIdx,
  -	String string, int stringIdx)
  +  /**
  +   * Determines if a word matches a wildcard pattern.
  +   * <small>Work released by Granta Design Ltd after originally being done on
  +   * company time.</small>
  +   */
  +  public static final boolean wildcardEquals(String pattern, int patternIdx,
  +    String string, int stringIdx)
  +  {
  +    for (int p = patternIdx; ; ++p)
       {
  -        for (int p = patternIdx; ; ++p)
  +      for (int s = stringIdx; ; ++p, ++s)
  +      {
  +        // End of string yet?
  +        boolean sEnd = (s >= string.length());
  +        // End of pattern yet?
  +        boolean pEnd = (p >= pattern.length());
  +
  +        // If we're looking at the end of the string...
  +        if (sEnd)
           {
  -            for (int s = stringIdx; ; ++p, ++s)
  +          // Assume the only thing left on the pattern is/are wildcards
  +          boolean justWildcardsLeft = true;
  +
  +          // Current wildcard position
  +          int wildcardSearchPos = p;
  +          // While we haven't found the end of the pattern,
  +          // and haven't encountered any non-wildcard characters
  +          while (wildcardSearchPos < pattern.length() && justWildcardsLeft)
  +          {
  +            // Check the character at the current position
  +            char wildchar = pattern.charAt(wildcardSearchPos);
  +            // If it's not a wildcard character, then there is more
  +            // pattern information after this/these wildcards.
  +
  +            if (wildchar != WILDCARD_CHAR && wildchar != WILDCARD_STRING)
               {
  -                // End of string yet?
  -                boolean sEnd = (s >= string.length());
  -                // End of pattern yet?
  -                boolean pEnd = (p >= pattern.length());
  -
  -                // If we're looking at the end of the string...
  -                if (sEnd)
  -                {
  -                    // Assume the only thing left on the pattern is/are wildcards
  -                    boolean justWildcardsLeft = true;
  -
  -                    // Current wildcard position
  -                    int wildcardSearchPos = p;
  -                    // While we haven't found the end of the pattern,
  -		    // and haven't encountered any non-wildcard characters
  -                    while (wildcardSearchPos < pattern.length() && justWildcardsLeft)
  -                    {
  -                        // Check the character at the current position
  -                        char wildchar = pattern.charAt(wildcardSearchPos);
  -                        // If it's not a wildcard character, then there is more
  -			// pattern information after this/these wildcards.
  -
  -                        if (wildchar != WILDCARD_CHAR &&
  -			    wildchar != WILDCARD_STRING)
  -                        {
  -                            justWildcardsLeft = false;
  -                        }
  -                        else
  -                        {
  -                            // Look at the next character
  -                            wildcardSearchPos++;
  -                        }
  -                    }
  -
  -                    // This was a prefix wildcard search, and we've matched, so
  -		    // return true.
  -                    if (justWildcardsLeft)
  -		    {
  -                        return true;
  -		    }
  -                }
  -
  -                // If we've gone past the end of the string, or the pattern,
  -		// return false.
  -                if (sEnd || pEnd)
  -		{
  -		    break;
  -		}
  -
  -                // Match a single character, so continue.
  -                if (pattern.charAt(p) == WILDCARD_CHAR)
  -		{
  -		    continue;
  -		}
  -
  -                //
  -                if (pattern.charAt(p) == WILDCARD_STRING)
  -                {
  -                    // Look at the character beyond the '*'.
  -                    ++p;
  -                    // Examine the string, starting at the last character.
  -                    for (int i = string.length(); i >= s; --i)
  -                    {
  -                        if (wildcardEquals(pattern, p, string, i))
  -			{
  -                            return true;
  -			}
  -                    }
  -                    break;
  -                }
  -                if (pattern.charAt(p) != string.charAt(s))
  -		{
  -		    break;
  -		}
  +              justWildcardsLeft = false;
               }
  -            return false;
  -	}
  -    }
  +            else
  +            {
  +              // Look at the next character
  +              wildcardSearchPos++;
  +            }
  +          }
   
  -    public void close() throws IOException
  -    {
  -	super.close();
  -	searchTerm = null;
  -	field = null;
  -	text = null;
  +          // This was a prefix wildcard search, and we've matched, so
  +          // return true.
  +          if (justWildcardsLeft)
  +          {
  +            return true;
  +          }
  +        }
  +
  +        // If we've gone past the end of the string, or the pattern,
  +        // return false.
  +        if (sEnd || pEnd)
  +        {
  +          break;
  +        }
  +
  +        // Match a single character, so continue.
  +        if (pattern.charAt(p) == WILDCARD_CHAR)
  +        {
  +          continue;
  +        }
  +
  +        //
  +        if (pattern.charAt(p) == WILDCARD_STRING)
  +        {
  +          // Look at the character beyond the '*'.
  +          ++p;
  +          // Examine the string, starting at the last character.
  +          for (int i = string.length(); i >= s; --i)
  +          {
  +            if (wildcardEquals(pattern, p, string, i))
  +            {
  +              return true;
  +            }
  +          }
  +          break;
  +        }
  +        if (pattern.charAt(p) != string.charAt(s))
  +        {
  +          break;
  +        }
  +      }
  +      return false;
       }
  +  }
  +
  +  public void close() throws IOException
  +  {
  +    super.close();
  +    searchTerm = null;
  +    field = null;
  +    text = null;
  +  }
   }