2025-04-27 07:49:33 -04:00

110 lines
2.3 KiB
C++

/*
- WMCOMM.H
-
*
*/
// Default Codepage
/*
- CAcceptHeaderIterator
-
* Purpose:
* Iterator for any Accept-* header.
*
* The class should be initialized with an accept-* header
* (the format of the accept-* string is specified in HTTP 1.1 RFC.)
*
* This class sorts the tokens based the quality factors specified
* in the header.
*
* The caller can call ScGetNextToken() to get the next token. The class
* returns ERROR_NO_DATA when there is no data to return.
*
*
*/
class CAcceptHeaderIterator
{
protected:
// Defn. of the Structure that contains pointer to each token in
// the accept-* header
//
typedef struct _TokenInfo
{
LPSTR pszToken;
double dbQuality;
}
TOKENINFO;
// Pointer to a copy of the given accept header
//
CHAR *m_pszAcceptHeader;
// Array of token info structures
//
TOKENINFO *m_pti;
DWORD m_ctiMax;
DWORD m_ctiUsed;
// Flag to indicate if wild card is specified in accept header
//
BOOL m_fWildCardPresent;
// Current token index. (-1 is invalid/uninitialized value)
//
DWORD m_itiCurrent;
// Flag to indicate if we exhausted the list.
//
BOOL m_fIterationCompleted;
// Helper routines
//
HRESULT ScInsert(
TOKENINFO *pti);
HRESULT ScGetTokenQFactor(
LPSTR pszToken,
BOOL * pfWildCard,
TOKENINFO * pti);
// Advance the iterator to the next token. Override this function
// if the derived class needs to advance the iterator differently.
//
virtual HRESULT ScAdvance();
// NOT IMPLEMENTED
//
CAcceptHeaderIterator (const CAcceptHeaderIterator&);
CAcceptHeaderIterator& operator= (const CAcceptHeaderIterator&);
public:
CAcceptHeaderIterator()
{
m_ctiMax = 0;
m_ctiUsed = 0;
m_fWildCardPresent = FALSE;
m_fIterationCompleted = FALSE;
m_itiCurrent = 0; // -1 indicates it is unitialized
}
~CAcceptHeaderIterator()
{}
// Initialize the object with a Accept-* header. This class doesnt take
// ownership of the string.
//
HRESULT ScInit(LPCSTR pszAcceptHeader);
// Get the next accept token
//
HRESULT ScGetNextAcceptToken(LPCSTR * ppszToken,
double * pdbQuality);
};