|
|
//+-------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1993.
//
// File: psetstg.hxx
//
// Contents: Header for class which provides common implementation of
// IPropertySetStorage.
//
// Classes: CPropertySetStorage
//
// History: 17-Mar-93 BillMo Created.
//
// Notes:
//
//--------------------------------------------------------------------------
#ifndef _PSETSTG_HXX_
#define _PSETSTG_HXX_
#include "h/stgprops.hxx"
#define PROPERTYSETSTORAGE_SIG LONGSIG('P','S','S','T')
#define PROPERTYSETSTORAGE_SIGDEL LONGSIG('P','S','S','t')
#define ENUMSTATPROPSETSTG_SIG LONGSIG('S','P','S','S')
#define ENUMSTATPROPSETSTG_SIGDEL LONGSIG('S','P','S','s')
//+-------------------------------------------------------------------------
//
// Class: CPropertySetStorage
//
// Purpose: Implementation of IPropertySetStorage for native and docfile
// IStorage objects.
//
// Notes:
//
//--------------------------------------------------------------------------
class CPropertySetStorage : public IPropertySetStorage { public: inline CPropertySetStorage(IPrivateStorage *pprivstg); inline ~CPropertySetStorage();
STDMETHOD(QueryInterface)( REFIID riid, void **ppvObject); STDMETHOD_(ULONG, AddRef)(void); STDMETHOD_(ULONG, Release)(void);
STDMETHOD(Create)( REFFMTID rfmtid, const CLSID * pclsid, DWORD grfFlags, DWORD grfMode, IPropertyStorage ** ppprstg); STDMETHOD(Open)( REFFMTID rfmtid, DWORD grfMode, IPropertyStorage ** ppprstg); STDMETHOD(Delete)( REFFMTID rfmtid); STDMETHOD(Enum)( IEnumSTATPROPSETSTG ** ppenum);
private: inline HRESULT Validate();
private: ULONG _ulSig; IPrivateStorage * _pprivstg; };
//+-------------------------------------------------------------------
//
// Member: CPropertySetStorage::CPropertySetStorage
//
// Synopsis: Initialize the generic property storage object.
//
// Arguments: [pstg]
//
// Notes: The passed [pstg] is saved and then passed into
// the CPropertySet object when it is created on
// Open or Create. Open and Create use it to get a
// matching implementation of mapped stream.
//
// The lifetime of pstg is provided by the fact that
// CPropertySetStorage is a base class of the IStorage.
//
//--------------------------------------------------------------------
CPropertySetStorage::CPropertySetStorage(IPrivateStorage *pprivstg) : _pprivstg(pprivstg), _ulSig(PROPERTYSETSTORAGE_SIG) { }
//+-------------------------------------------------------------------
//
// Member: CPropertySetStorage::~CPropertySetStorage
//
// Synopsis: Delete the object and set the deletion signature.
//
//--------------------------------------------------------------------
CPropertySetStorage::~CPropertySetStorage() { _ulSig = PROPERTYSETSTORAGE_SIGDEL; }
//+-------------------------------------------------------------------
//
// Member: CPropertySetStorage::Validate
//
// Synopsis: Validate signature.
//
//--------------------------------------------------------------------
inline HRESULT CPropertySetStorage::Validate() { return _ulSig == PROPERTYSETSTORAGE_SIG ? S_OK : STG_E_INVALIDHANDLE; }
//+-------------------------------------------------------------------------
//
// Class: CEnumSTATPROPSETSTG
//
// Purpose: Implementation of IEnumSTATPROPSETSTG for native and docfile
// IStorage objects.
//
// Notes:
//
//--------------------------------------------------------------------------
class CEnumSTATPROPSETSTG : public IEnumSTATPROPSETSTG { public: // for IPropertySetStorage::Enum
CEnumSTATPROPSETSTG(IStorage *pstg, HRESULT *phr);
// for IEnumSTATPROPSETSTG::Clone
CEnumSTATPROPSETSTG(CEnumSTATPROPSETSTG &Other, HRESULT *phr);
~CEnumSTATPROPSETSTG();
STDMETHOD(QueryInterface)( REFIID riid, void **ppvObject); STDMETHOD_(ULONG, AddRef)(void); STDMETHOD_(ULONG, Release)(void);
STDMETHOD(Next)(ULONG celt, STATPROPSETSTG * rgelt, ULONG * pceltFetched); // We don't need RemoteNext.
STDMETHOD(Skip)(ULONG celt); STDMETHOD(Reset)(); STDMETHOD(Clone)(IEnumSTATPROPSETSTG ** ppenum);
private:
inline HRESULT Validate(); VOID CleanupStatArray();
private: ULONG _ulSig; LONG _cRefs; IEnumSTATSTG * _penumSTATSTG; STATSTG _statarray[8]; ULONG _cstatTotalInArray; ULONG _istatNextToRead; };
//+-------------------------------------------------------------------
//
// Member: CEnumSTATPROPSETSTG::Validate
//
// Synopsis: Validate signature.
//
//--------------------------------------------------------------------
inline HRESULT CEnumSTATPROPSETSTG::Validate() { return _ulSig == ENUMSTATPROPSETSTG_SIG ? S_OK : STG_E_INVALIDHANDLE; }
#endif
|