76 lines
2.4 KiB
C++
76 lines
2.4 KiB
C++
//==========================================================================
|
|
//
|
|
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
|
|
// KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
|
|
// IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
|
|
// PURPOSE.
|
|
//
|
|
// Copyright 1998 - 1999 Microsoft Corporation. All Rights Reserved.
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
// header file for handler specific items
|
|
|
|
#ifndef _ENUMERATOR_CLASS_
|
|
#define _ENUMERATOR_CLASS_
|
|
|
|
// structure for keeping track of items as a whole
|
|
|
|
typedef struct _tagGENERICITEM
|
|
{
|
|
DWORD cbSize; // total size of item (this structure + whatever caller needs for data)
|
|
_tagGENERICITEM *pNextGenericItem;
|
|
|
|
} GENERICITEM;
|
|
|
|
typedef GENERICITEM *LPGENERICITEM;
|
|
|
|
typedef struct _tagGENERICITEMLIST
|
|
{
|
|
DWORD _cRefs; // reference count on this structure
|
|
DWORD dwNumItems; // number of items in array.
|
|
LPGENERICITEM pFirstGenericItem; // ptr to first Item in linked list
|
|
} GENERICITEMLIST;
|
|
|
|
typedef GENERICITEMLIST *LPGENERICITEMLIST;
|
|
|
|
|
|
class CGenericEnum
|
|
{
|
|
public:
|
|
DWORD m_cRef;
|
|
DWORD m_cOffset;
|
|
LPGENERICITEMLIST m_pGenericItemList; // array of items
|
|
LPGENERICITEM m_pNextItem;
|
|
|
|
public:
|
|
CGenericEnum(LPGENERICITEMLIST pGenericItemList,DWORD cOffset);
|
|
~CGenericEnum();
|
|
virtual void DeleteThisObject() = 0;
|
|
|
|
//IUnknown members
|
|
STDMETHODIMP QueryInterface(REFIID, LPVOID FAR *);
|
|
STDMETHODIMP_(ULONG) AddRef();
|
|
STDMETHODIMP_(ULONG) Release();
|
|
|
|
STDMETHODIMP Next(ULONG celt,LPGENERICITEM rgelt,ULONG *pceltFetched);
|
|
STDMETHODIMP Clone(CGenericEnum **ppenum);
|
|
|
|
STDMETHODIMP Skip(ULONG celt);
|
|
STDMETHODIMP Reset();
|
|
};
|
|
|
|
|
|
// helper functions for managing list.
|
|
DWORD AddRef_ItemList(LPGENERICITEMLIST pGenericItemList);
|
|
DWORD Release_ItemList(LPGENERICITEMLIST pGenericItemList);
|
|
LPGENERICITEMLIST CreateItemList();
|
|
LPGENERICITEMLIST DuplicateItemList(LPGENERICITEMLIST pItemList);
|
|
LPGENERICITEM AddNewItemToList(LPGENERICITEMLIST lpGenericList,ULONG cbSize);
|
|
BOOL AddItemToList(LPGENERICITEMLIST lpGenericList,LPGENERICITEM pGenericItem);
|
|
BOOL DeleteItemFromList(LPGENERICITEMLIST lpGenericList,LPGENERICITEM pGenericItem);
|
|
LPGENERICITEM CreateNewListItem(ULONG cbSize);
|
|
|
|
|
|
#endif // #define _ENUMERATOR_CLASS_
|