00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00031 #ifndef _RTEXIAUTOMATON_H_
00032 #define _RTEXIAUTOMATON_H_
00033
00034 #include "rtexisrc/rtEXIEvent.h"
00035 #include "rtexisrc/rtEXIEventCodeGroup.h"
00036 #include "rtxmlsrc/osrtxml.h"
00037 #include "rtxsrc/rtxArrayList.h"
00038
00039 #ifdef __cplusplus
00040 extern "C" {
00041 #endif
00042
00043 typedef OSINT16 OSEXIState;
00044
00045 typedef enum { OSEXIEncAtm, OSEXIDecAtm } OSEXIAtmType;
00046
00050 typedef struct {
00051 OSEXIState fromState;
00052 OSEXIState toState;
00053 const OSEXIEvent* pEvent;
00054 OSEXIEventCode* pEventCode;
00055 OSUINT32 valueChannel;
00056 } OSEXIStateEvent;
00057
00061 typedef struct {
00065 OSEXIState numberOfStates;
00066
00070 OSEXIState currentState;
00071
00075 OSEXIState acceptingState;
00076
00081 const OSXMLFullQName* elementName;
00082
00088 OSRTArrayList eventCodeGroups;
00089
00095 OSBOOL isClosed;
00096
00102 OSBOOL matchedBaseEvent;
00103
00110 OSRTArrayList eventStates;
00111
00120 OSEXIEvent* pDynEvent;
00121
00125 OSUINT32 valueChannel;
00126
00130 OSEXIStateEvent* pAttrEventState;
00131
00135 OSEXIState prevState;
00136
00137 } OSEXIAutomaton;
00138
00143 typedef struct {
00147 OSEXIState currentState;
00148
00149 } OSEXIAtmState;
00150
00154 typedef int(*OSEXIAtmAddTransFunc)(OSCTXT* pctxt, OSEXIAutomaton* pAutomaton,
00155 OSEXIState fromState, OSEXIState toState,
00156 const OSEXIEvent* pEvent,
00157 const OSEXIEventCode* pEventCode);
00158
00167 EXTERNEXI void rtEXIAutomatonInit
00168 (OSCTXT* pctxt, OSEXIAutomaton* pAutomaton, const OSXMLFullQName* pElemName,
00169 OSEXIState numStates);
00170
00181 EXTERNEXI OSEXIAutomaton* rtEXINewAutomaton
00182 (OSCTXT* pctxt, const OSXMLFullQName* pElemName, OSEXIState numStates);
00183
00192 EXTERNEXI OSEXIAutomaton* rtEXIAutomatonCopy
00193 (OSCTXT* pctxt, OSEXIAutomaton* pAutomaton);
00194
00203 EXTERNEXI void rtEXIAutomatonFreeMem
00204 (OSCTXT* pctxt, OSEXIAutomaton* pAutomaton, OSBOOL dynamic);
00205
00216 EXTERNEXI OSEXIAutomaton* rtEXIAutomatonAddTransition
00217 (OSCTXT* pctxt, OSEXIAutomaton* pAutomaton, OSEXIState fromState,
00218 OSEXIState toState, const OSEXIEventCode* pEventCode);
00219
00237 EXTERNEXI int rtEXIAtmAddUndeclaredItems
00238 (OSCTXT* pctxt, OSEXIAutomaton* pAutomaton, OSEXIState fromState,
00239 OSEXIState toState, OSEXIEventCode* pEventCode,
00240 size_t numDeclAttrs, const OSXMLFullQName* declAttrs,
00241 OSEXIAtmAddTransFunc addTransFunc);
00242
00260 EXTERNEXI int rtEXIAtmAddUndeclaredStartTagItems
00261 (OSCTXT* pctxt, OSEXIAutomaton* pAutomaton, OSEXIState fromState,
00262 OSEXIState toState, OSEXIEventCode* pEventCode,
00263 size_t numDeclAttrs, const OSXMLFullQName* declAttrs,
00264 OSEXIAtmAddTransFunc addTransFunc);
00265
00279 EXTERNEXI int rtEXIAtmAddUndeclaredContentItems
00280 (OSCTXT* pctxt, OSEXIAutomaton* pAutomaton, OSEXIState fromState,
00281 OSEXIState toState, OSEXIEventCode* pEventCode,
00282 OSEXIAtmAddTransFunc addTransFunc);
00283
00293 EXTERNEXI OSEXIAutomaton* rtEXIAutomatonInitCopy
00294 (OSCTXT* pctxt, OSEXIAutomaton* pDestAtm, OSEXIAutomaton* pSrcAtm);
00295
00303 EXTERNEXI int rtEXIAutomatonPush (OSCTXT* pctxt, OSEXIAutomaton* pAutomaton);
00304
00312 EXTERNEXI OSEXIAutomaton* rtEXIAutomatonPop (OSCTXT* pctxt);
00313
00321 EXTERNEXI OSEXIEventCodeGroup*
00322 rtEXIAtmGetCurrentEventCodeGroup (OSEXIAutomaton* pAutomaton);
00323
00335 EXTERNEXI OSEXIAutomaton* rtEXIGetDocAutomaton
00336 (OSCTXT* pctxt, size_t numGblElems, const OSXMLFullQName* gblElems,
00337 OSEXIAtmAddTransFunc addTransFunc);
00338
00349 EXTERNEXI OSEXIAutomaton* rtEXIGetElemAutomaton
00350 (OSCTXT* pctxt, OSXMLFullQName* pqname,
00351 int (*addTransFunc)(OSCTXT* pctxt, OSEXIAutomaton* pAutomaton,
00352 OSEXIState fromState, OSEXIState toState,
00353 const OSEXIEvent* pEvent,
00354 const OSEXIEventCode* pEventCode));
00355
00356 #ifdef _TRACE
00357
00364 EXTERNEXI void rtEXIAutomatonPrint
00365 (OSCTXT* pctxt, const OSEXIAutomaton* pAutomaton);
00366 #endif
00367
00368 #ifdef __cplusplus
00369 }
00370 #endif
00371
00374 #endif