#include <FSM.hpp>
Public Methods | |
FSMState () | |
FSMState (unsigned mystateid, char myisfinal=0) | |
FSMState (unsigned mystateid, FSMStateSetItem *myorigdataset) | |
void * | operator new (size_t size, MemStreamer *mem) |
void | operator delete (void *ptr) |
void * | operator new[] (size_t size, MemStreamer *mem) |
void | operator delete[] (void *ptr) |
FSMEdge * | GetOutEdges () |
FSMStateSetItem * | GetOrigStateSet () |
void | SetFinal (char myisfinal=1) |
char | IsFinal () |
char | IsOutComplete () |
char | IsAccepting () |
char | HasPoundsAhead () |
int | GetStateID () |
FSMState * | GetNextStateInList () |
FSMEdge * | FindNegEdge () |
FSMState * | GetNextState (TLabelID labelid, char *overpoundedge=NULL) |
|
Definition at line 132 of file FSM.hpp. 00132 {} |
|
Definition at line 143 of file FSM.cpp. 00144 { 00145 stateid=mystateid; 00146 isfinal=myisfinal; 00147 outedges=NULL; 00148 next=NULL; 00149 origstateset=NULL; 00150 } |
|
|
|
Definition at line 152 of file FSM.cpp. Referenced by ConsiderLabelIDAtState().
00155 { 00156 FSMEdge *edge=outedges; 00157 00158 while(edge!=NULL) 00159 { 00160 if(edge->GetType()==EDGETYPE_NEGLABELLIST) 00161 return edge; 00162 edge=edge->next; 00163 } 00164 return NULL; 00165 } |
|
Definition at line 167 of file FSM.cpp. Referenced by PathTreeNode::ComputeNextStateList(), and pathtreemem().
00172 { 00173 FSMEdge *edge=outedges; 00174 FSMEdge *defaultedge=NULL; 00175 char isattrib=ISATTRIB(labelid); 00176 00177 if(overpoundedge!=NULL) 00178 *overpoundedge=0; 00179 00180 while(edge!=NULL) 00181 { 00182 switch(edge->GetType()) 00183 { 00184 case EDGETYPE_LABEL: 00185 // If a label edge matches the label exactly, then we can return immediately 00186 if(edge->labelid==labelid) 00187 return edge->GetNextState(); 00188 00189 // If we have a pound-edge, we save its pointer 00190 // (if we don't have a default edge already) 00191 if((((edge->labelid==elementpoundlabelid)&&(isattrib==0))|| 00192 ((edge->labelid==attribpoundlabelid)&&(isattrib==1)))&& 00193 (defaultedge==NULL)) 00194 { 00195 defaultedge=edge; 00196 if(overpoundedge!=NULL) 00197 *overpoundedge=1; 00198 } 00199 break; 00200 00201 case EDGETYPE_NEGLABELLIST: 00202 { 00203 // A negative edge automatically becomes the default edge, 00204 // (And we overwrite any previous pound-edge!) 00205 // if 'labelid' is not contained in the negative list 00206 00207 if(!IsInLabelList(edge->labellist,labelid)) 00208 // 'labelid' is not in the negative list? 00209 { 00210 defaultedge=edge; 00211 if(overpoundedge!=NULL) 00212 *overpoundedge=0; 00213 } 00214 break; 00215 } 00216 // case EDGETYPE_EMPTY: 00217 // return NULL; // This should never happen ! 00218 } 00219 edge=edge->next; 00220 } 00221 // If we didn't find any exactly matching label edge, then we choose 00222 // the default edge. If there is no default edge, then there is no match 00223 if(defaultedge!=NULL) 00224 return defaultedge->GetNextState(); 00225 else 00226 return NULL; 00227 } |
|
Definition at line 154 of file FSM.hpp. 00154 { return next; } |
|
Definition at line 146 of file FSM.hpp. Referenced by ConsiderLabelIDAtState(), and ConsiderNegEdgeAtState().
00146 { return origstateset; } |
|
Definition at line 145 of file FSM.hpp. Referenced by CreateStateSet().
00145 { return outedges; } |
|
Definition at line 153 of file FSM.hpp. Referenced by CheckEqual().
00153 { return stateid; } |
|
Definition at line 152 of file FSM.hpp. Referenced by pathtreemem().
00152 { return haspoundsahead; } |
|
Definition at line 151 of file FSM.hpp. 00151 { return isaccepting; } |
|
Definition at line 149 of file FSM.hpp. Referenced by FSM::AddFSM(), and FSMState().
00149 { return isfinal; } |
|
Definition at line 150 of file FSM.hpp. 00150 { return isoutcomplete; } |
|
Definition at line 148 of file FSM.hpp. 00148 { isfinal=myisfinal; } |
|
Definition at line 137 of file FSM.hpp. 00137 {} |
|
Definition at line 139 of file FSM.hpp. 00139 {} |
|
Definition at line 136 of file FSM.hpp. 00136 { return mem->GetByteBlock(size);} |
|
Definition at line 138 of file FSM.hpp. 00138 { return mem->GetByteBlock(size);} |