windows-nt/Source/XPSP1/NT/net/tapi/skywalker/parser/sdpltran.h
2020-09-26 16:20:57 +08:00

103 lines
2.2 KiB
C++

/*
Copyright (c) 1997-1999 Microsoft Corporation
*/
#ifndef __SDP_LINE_TRANSITION__
#define __SDP_LINE_TRANSITION__
#include "sdpdef.h"
// this value indicates that line transitions have reached an end state
// this value needs to be different from the value of any of the line states
const DWORD LINE_END = 10000;
struct LINE_TRANSITION
{
CHAR m_SeparatorChar;
DWORD m_NewLineState;
};
struct LINE_TRANSITION_INFO
{
DWORD m_LineState;
CHAR *m_SeparatorChars;
BYTE m_NumTransitions;
const LINE_TRANSITION *m_Transitions; // array of state transitions
};
#define LINE_TRANSITION_ENTRY(State, TransitionsArray) \
{ \
State, \
NULL, \
(BYTE)((NULL == TransitionsArray)? 0 : sizeof(TransitionsArray)/sizeof(LINE_TRANSITION)), \
TransitionsArray \
}
class SDP_LINE_TRANSITION
{
public:
SDP_LINE_TRANSITION(
IN LINE_TRANSITION_INFO *LineTransitionInfo,
IN DWORD NumStates
);
inline BOOL IsValid() const;
inline DWORD GetNumStates() const;
inline const LINE_TRANSITION_INFO *GetAt(IN DWORD LineState) const;
~SDP_LINE_TRANSITION();
protected:
BOOL m_IsValid;
LINE_TRANSITION_INFO * const m_LineTransitionInfo;
DWORD m_NumStates;
};
inline BOOL
SDP_LINE_TRANSITION::IsValid(
) const
{
return m_IsValid;
}
inline DWORD
SDP_LINE_TRANSITION::GetNumStates(
) const
{
return m_NumStates;
}
inline const LINE_TRANSITION_INFO *
SDP_LINE_TRANSITION::GetAt(
IN DWORD LineState
) const
{
ASSERT(LineState < m_NumStates);
if ( LineState >= m_NumStates )
{
SetLastError(SDP_INTERNAL_ERROR);
return NULL;
}
return &m_LineTransitionInfo[LineState];
}
#endif // __SDP_LINE_TRANSITION__