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__
|
|
|
|
|
|
|