001 package org.maltparser.core.feature.value;
002
003 import java.util.HashMap;
004 import java.util.HashSet;
005 import java.util.Map;
006 import java.util.Set;
007 import java.util.SortedMap;
008 import java.util.TreeMap;
009
010 import org.maltparser.core.feature.function.Function;
011 /**
012 *
013 *
014 * @author Johan Hall
015 * @since 1.0
016 **/
017 public class MultipleFeatureValue extends FeatureValue {
018 protected SortedMap<Integer, String> featureValues;
019 protected Map<Integer, Boolean> featureKnown;
020
021 public MultipleFeatureValue(Function function) {
022 super(function);
023 setFeatureValues(new TreeMap<Integer, String>(), new HashMap<Integer, Boolean>());
024 }
025
026 public void reset() {
027 super.reset();
028 featureValues.clear();
029 featureKnown.clear();
030 }
031
032 public void addFeatureValue(int code, String Symbol, boolean known) {
033 featureValues.put(code, Symbol);
034 featureKnown.put(code, known);
035 }
036
037 protected void setFeatureValues(SortedMap<Integer, String> featureValues, Map<Integer, Boolean> featureKnown) {
038 this.featureValues = featureValues;
039 this.featureKnown = featureKnown;
040 }
041
042 public Set<Integer> getCodes() {
043 return (Set<Integer>)featureValues.keySet();
044 }
045
046 public int getFirstCode() {
047 return featureValues.firstKey();
048 }
049
050 public Set<String> getSymbols() {
051 return new HashSet<String>(featureValues.values());
052 }
053
054 public String getFirstSymbol() {
055 return featureValues.get(featureValues.firstKey());
056 }
057
058 public boolean isKnown(int value) {
059 return featureKnown.get(value);
060 }
061
062 public String toString() {
063 final StringBuilder sb = new StringBuilder();
064 sb.append(super.toString()+ "{ ");
065 for (Integer code : featureValues.keySet()) {
066 sb.append("{"+featureValues.get(code) + "->" +code + ", known="+featureKnown.get(code)+"} ");
067 }
068 sb.append("}");
069 return sb.toString();
070 }
071 }