69 lines
1.6 KiB
C++
69 lines
1.6 KiB
C++
/***************************************************************************/
|
|
//
|
|
// Copyright (c) 2000-2001 Microsoft Corporation
|
|
//
|
|
// enum.h
|
|
//
|
|
// ramrao 9th Dec 2001
|
|
//
|
|
//
|
|
// Declaration for a util class for enumerator
|
|
//
|
|
//***************************************************************************/
|
|
|
|
#include "hash.h"
|
|
|
|
typedef enum _enumState
|
|
{
|
|
ENUM_NOTACTIVE = -1,
|
|
ENUM_ACTIVE,
|
|
ENUM_END
|
|
}ENUMSTATE;
|
|
|
|
typedef enum __enumType
|
|
{
|
|
PROPERTY_ENUM,
|
|
QUALIFIERS_ENUM,
|
|
METHOD_ENUM
|
|
}ENUMTYPE;
|
|
|
|
class CEnumObject
|
|
{
|
|
private:
|
|
ENUMTYPE m_lEnumType;
|
|
CPtrArray m_Names;
|
|
LONG m_Position;
|
|
CStringToPtrHTable m_HashTbl;
|
|
LONG m_lFlags;
|
|
ENUMSTATE m_EnumState;
|
|
|
|
HRESULT IsValidFlags(LONG lFlags);
|
|
HRESULT IsValidFlavor(LONG lFlavor);
|
|
void RemoveNameFromList(LPCWSTR pStrName);
|
|
HRESULT CleanLinkedList();
|
|
HRESULT IsValidPropForEnumFlags(CHashElement *pElement,LONG lFlags = -1);
|
|
|
|
public:
|
|
CEnumObject(ENUMTYPE eType = QUALIFIERS_ENUM);
|
|
~CEnumObject();
|
|
|
|
HRESULT BeginEnumeration(long lFlags);
|
|
HRESULT EndEnumeration(void);
|
|
HRESULT Get(LPCWSTR wszName,
|
|
long lFlags,
|
|
CHashElement *& pElement);
|
|
HRESULT Next(long lFlags,
|
|
BSTR *pstrName,
|
|
CHashElement *& pElement);
|
|
HRESULT RemoveItem(WCHAR * pwsName);
|
|
HRESULT AddItem(WCHAR * pwsName,CHashElement * pItem);
|
|
HRESULT GetNames(long lFlags,SAFEARRAY ** pNames);
|
|
LONG GetEnumPos() { return m_Position; }
|
|
void SetEnumPos(LONG lPos)
|
|
{
|
|
m_Position = lPos;
|
|
}
|
|
ENUMSTATE GetEnumState() { return m_EnumState; }
|
|
void SetEnumState(ENUMSTATE eState) { m_EnumState = eState; }
|
|
|
|
}; |