56 lines
1.6 KiB
C
56 lines
1.6 KiB
C
|
/*
|
||
|
|
||
|
Copyright (c) 1997-1999 Microsoft Corporation
|
||
|
|
||
|
*/
|
||
|
|
||
|
#ifndef __SDP_STATE_TRANSITIONS__
|
||
|
#define __SDP_STATE_TRANSITIONS__
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
#define STATE_TRANSITION_ENTRY(State, TransitionsArray) \
|
||
|
{State, sizeof(TransitionsArray)/sizeof(STATE_TRANSITION), TransitionsArray }
|
||
|
|
||
|
|
||
|
|
||
|
struct STATE_TRANSITION
|
||
|
{
|
||
|
CHAR m_Type;
|
||
|
PARSE_STATE m_NewParseState;
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
struct TRANSITION_INFO
|
||
|
{
|
||
|
PARSE_STATE m_ParseState;
|
||
|
BYTE m_NumTransitions;
|
||
|
const STATE_TRANSITION *m_Transitions; // array of state transitions
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
// macro for parsing a line into a member field of a list element
|
||
|
// this cannot be done using a template because several members of the
|
||
|
// list element may have the same type
|
||
|
/* get the current element in the list */
|
||
|
/* get the member in the element */
|
||
|
/* parse the line into the member */
|
||
|
#define ParseMember(ELEMENT_TYPE, List, MEMBER_TYPE, MemberFunction, Line, Result) \
|
||
|
{ \
|
||
|
ELEMENT_TYPE *Element = (ELEMENT_TYPE *)List.GetCurrentElement(); \
|
||
|
\
|
||
|
MEMBER_TYPE &Member = Element->MemberFunction(); \
|
||
|
\
|
||
|
Result = Member.ParseLine(Line); \
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
#endif // __SDP_STATE_TRANSITIONS__
|
||
|
|
||
|
|
||
|
|