Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

75 lines
2.4 KiB

//==========================================================================
//
// 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_