FSMState.java |
1 /* 2 * FSMState.java 3 * 4 * Copyright (c) 1998-2004, The University of Sheffield. 5 * 6 * This file is part of GATE (see http://gate.ac.uk/), and is free 7 * software, licenced under the GNU Library General Public License, 8 * Version 2, June 1991 (in the distribution as file licence.html, 9 * and also available at http://gate.ac.uk/gate/licence.html). 10 * 11 * Valentin Tablan, 11/07/2000 12 * 13 * $Id: FSMState.java,v 1.9 2004/07/21 17:10:04 akshay Exp $ 14 */ 15 16 package gate.creole.gazetteer; 17 18 import java.io.Serializable; 19 import java.util.HashSet; 20 import java.util.Set; 21 22 /** Implements a state of the deterministic finite state machine of the 23 * gazetter. 24 * 25 */ 26 class FSMState implements Serializable { 27 28 /** Debug flag 29 */ 30 private static final boolean DEBUG = false; 31 32 /** Constructs a new FSMState object and adds it to the list of 33 * states of the {@link DefaultGazetteer} provided as owner. 34 * 35 * @param owner a {@link DefaultGazetteer} object 36 */ 37 public FSMState(DefaultGazetteer owner) { 38 myIndex = index++; 39 owner.fsmStates.add(this); 40 } 41 42 /** Adds a new value to the transition function 43 */ 44 // >>> DAM: was - to use charMap 45 /* 46 void put(Character chr, FSMState state) { 47 transitionFunction.put(chr,state); 48 } 49 */ 50 // >>> DAM: TransArray optimization 51 void put(char chr, FSMState state) { 52 transitionFunction.put(chr,state); 53 } 54 // >>> DAM: end 55 56 /** This method is used to access the transition function of this state. 57 */ 58 // >>> DAM: was 59 /* 60 FSMState next(Character chr) {//UnicodeType type){ 61 return (FSMState)transitionFunction.get(chr); 62 } 63 */ 64 // >>> DAM: TransArray optimization 65 FSMState next(char chr) {//UnicodeType type){ 66 return (FSMState)transitionFunction.get(chr); 67 } 68 // >>> DAM: end 69 70 /** Returns a GML (Graph Modelling Language) representation of the edges 71 * emerging from this state. 72 */ 73 //<<< DAM: was - to use new char Iter returned by the charMap iteratior 74 /* 75 String getEdgesGML() { 76 String res = ""; 77 Iterator charsIter = transitionFunction.keySet().iterator(); 78 Character currentChar; 79 FSMState nextState; 80 81 while(charsIter.hasNext()){ 82 currentChar = (Character)charsIter.next(); 83 nextState = next(currentChar); 84 res += "edge [ source " + myIndex + 85 " target " + nextState.getIndex() + 86 " label \"'" + currentChar + "'\" ]\n"; 87 } 88 */ 89 // DAM, TransArray optimization 90 String getEdgesGML() { 91 String res = ""; 92 char currentChar; 93 FSMState nextState; 94 95 for (int i = 0; i < transitionFunction.itemsKeys.length; i++) 96 { 97 currentChar = transitionFunction.itemsKeys[i]; 98 nextState = next(currentChar); 99 res += "edge [ source " + myIndex + 100 " target " + nextState.getIndex() + 101 " label \"'" + currentChar + "'\" ]\n"; 102 } 103 // >>> DAM, end 104 return res; 105 } 106 107 /** Checks whether this state is a final one 108 */ 109 boolean isFinal() { 110 // >>> was 111 // return !lookupSet.isEmpty(); 112 // >>> BOBI, Lookup opitimization 113 if (lookupSet==null) 114 return false; 115 return !lookupSet.isEmpty(); 116 // >>> end 117 } 118 119 /** Returns a set of {@link Lookup} objects describing the types of lookups 120 * the phrase for which this state is the final one belongs to 121 */ 122 Set getLookupSet(){return lookupSet;} 123 124 /** Adds a new looup description to this state's lookup descriptions set 125 */ 126 void addLookup(Lookup lookup) { 127 // >>> was nothing 128 // >>> BOBI, Lookup opitimization 129 if (lookupSet == null) 130 lookupSet = new HashSet(4); 131 // >>> end 132 133 lookupSet.add(lookup); 134 } // addLookup 135 136 /** Removes a looup description from this state's lookup descriptions set 137 */ 138 void removeLookup(Lookup lookup) { 139 lookupSet.remove(lookup); 140 } // removeLookup 141 142 /** Returns the unique ID of this state. 143 */ 144 int getIndex(){ return myIndex; } 145 146 147 /** The transition function of this state. 148 */ 149 // >>> was 150 // Map transitionFunction = new HashMap(); 151 // >>> NASO, hash4 optimization 152 // Map transitionFunction = new HashMap(4); 153 // >>> DAM, TransArray 154 charMap transitionFunction = new charMap(); 155 // >>> end 156 157 /** * 158 */ 159 // >>> was 160 // Set lookupSet = new HashSet(); 161 // >>> NASO, hash4 optimization 162 // Set lookupSet = new HashSet(4); 163 // >>> BOBI, Lookup opitimization 164 Set lookupSet; 165 // >>> end 166 167 /** 168 * The unique id of this state. This value is never used by the algorithms but 169 * it can be useful for graphical representations. 170 */ 171 int myIndex; 172 173 /** 174 * Class memebre used to generate unique ids for the instances 175 * 176 */ 177 static int index; 178 179 static{ 180 index = 0; 181 } 182 183 } // class FSMState 184