1   package gate.creole.morph;
2   
3   import java.util.Arrays;
4   
5   /**
6    * <p>Title: </p>
7    * <p>Description: </p>
8    * <p>Copyright: Copyright (c) 2003</p>
9    * <p>Company: </p>
10   * @author not attributable
11   * @version 1.0
12   */
13  
14  public class CharacterSet extends Variable {
15  
16    private char [] varChars;
17    /**
18     * Constructor
19     */
20    public CharacterSet() {
21  
22    }
23  
24    /**
25     * Tells if any value available which can be retrieved
26     * @return true if value available, false otherwise
27     */
28    public boolean hasNext() {
29      if(pointer<varChars.length) {
30        return true;
31      } else {
32        return false;
33      }
34    }
35  
36    /**
37     * Returns the next available value for this variable
38     * @return value of the variable in the String format
39     */
40    public String next() {
41      if(pointer<varChars.length) {
42        pointer++;
43        return ""+varChars[pointer-1];
44      } else {
45        return null;
46      }
47    }
48  
49    /**
50     * Process the provided value and stores in the underlying data structure
51     * @param varName name of the variable
52     * @param varValue String that contains possible different values
53     * @return true if successfully stored, false otherwise
54     */
55    public boolean set(String varName, String varValue) {
56      this.varName = varName;
57      this.varValue = varValue;
58      // here the varValue would be in the following format
59      // [abcdefg] // we need to sort it, so that while searching it will be
60      // easier and faster to perform the binary search
61      varValue = varValue.substring(1,varValue.length()-1);
62      this.varChars = varValue.toCharArray();
63      Arrays.sort(this.varChars);
64      return true;
65    }
66  
67    /**
68     * A method that tells if the characters of the provided value are
69     * from the characterSet only
70     * @param value String of which the characters to be searched in the
71     * characterSet
72     * @return true if all characters of value string are from the
73     * specified characterSet, false otherwise
74     */
75    public boolean contains(String value) {
76      for(int i=0;i<value.length();i++) {
77        if(Arrays.binarySearch(this.varChars,value.charAt(i))<0) {
78          return false;
79        }
80      }
81      return true;
82    }
83  }