add --shared
[pylucene.git] / lucene-java-3.4.0 / lucene / src / java / org / apache / lucene / analysis / tokenattributes / PositionIncrementAttributeImpl.java
1 package org.apache.lucene.analysis.tokenattributes;
2
3 /**
4  * Licensed to the Apache Software Foundation (ASF) under one or more
5  * contributor license agreements.  See the NOTICE file distributed with
6  * this work for additional information regarding copyright ownership.
7  * The ASF licenses this file to You under the Apache License, Version 2.0
8  * (the "License"); you may not use this file except in compliance with
9  * the License.  You may obtain a copy of the License at
10  *
11  *     http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  */
19
20 import java.io.Serializable;
21
22 import org.apache.lucene.analysis.TokenStream;
23 import org.apache.lucene.util.AttributeImpl;
24
25 /** The positionIncrement determines the position of this token
26  * relative to the previous Token in a {@link TokenStream}, used in phrase
27  * searching.
28  *
29  * <p>The default value is one.
30  *
31  * <p>Some common uses for this are:<ul>
32  *
33  * <li>Set it to zero to put multiple terms in the same position.  This is
34  * useful if, e.g., a word has multiple stems.  Searches for phrases
35  * including either stem will match.  In this case, all but the first stem's
36  * increment should be set to zero: the increment of the first instance
37  * should be one.  Repeating a token with an increment of zero can also be
38  * used to boost the scores of matches on that token.
39  *
40  * <li>Set it to values greater than one to inhibit exact phrase matches.
41  * If, for example, one does not want phrases to match across removed stop
42  * words, then one could build a stop word filter that removes stop words and
43  * also sets the increment to the number of stop words removed before each
44  * non-stop word.  Then exact phrase queries will only match when the terms
45  * occur with no intervening stop words.
46  *
47  * </ul>
48  */
49 public class PositionIncrementAttributeImpl extends AttributeImpl implements PositionIncrementAttribute, Cloneable, Serializable {
50   private int positionIncrement = 1;
51   
52   /** Set the position increment. The default value is one.
53    *
54    * @param positionIncrement the distance from the prior term
55    */
56   public void setPositionIncrement(int positionIncrement) {
57     if (positionIncrement < 0)
58       throw new IllegalArgumentException
59         ("Increment must be zero or greater: " + positionIncrement);
60     this.positionIncrement = positionIncrement;
61   }
62
63   /** Returns the position increment of this Token.
64    * @see #setPositionIncrement
65    */
66   public int getPositionIncrement() {
67     return positionIncrement;
68   }
69
70   @Override
71   public void clear() {
72     this.positionIncrement = 1;
73   }
74   
75   @Override
76   public boolean equals(Object other) {
77     if (other == this) {
78       return true;
79     }
80     
81     if (other instanceof PositionIncrementAttributeImpl) {
82       return positionIncrement == ((PositionIncrementAttributeImpl) other).positionIncrement;
83     }
84  
85     return false;
86   }
87
88   @Override
89   public int hashCode() {
90     return positionIncrement;
91   }
92   
93   @Override
94   public void copyTo(AttributeImpl target) {
95     PositionIncrementAttribute t = (PositionIncrementAttribute) target;
96     t.setPositionIncrement(positionIncrement);
97   }  
98
99 }