|
|
//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1991 - 2000.
//
// File: WrapStor.cxx
//
// Contents: Persistent property store (external to docfile)
//
// Classes: CPropertyIterWrapper
//
// History: 09-Apr-97 KrishnaN Created
// 22-Apr-97 KrishnaN Modified to work with propstoremgr.
//
//----------------------------------------------------------------------------
#include <pch.cxx>
#pragma hdrstop
#include <wrapiter.hxx>
//+---------------------------------------------------------------------------
//
// Member: CPropertyIterWrapper::CPropertyIterWrapper, public
//
// Arguments: [propstore] - Reference to the property store to iterate.
//
// Returns: Nothing.
//
// History: 09-Apr-97 KrishnaN Created.
//
//----------------------------------------------------------------------------
CPropertyIterWrapper::CPropertyIterWrapper ( CPropStoreManager & propstoremgr ) : _lRefCount( 1 ), _pPropStoreWids( 0 ) { _pPropStoreWids = new CPropertyStoreWids( propstoremgr ); }
//+---------------------------------------------------------------------------
//
// Member: CPropertyIterWrapper::~CPropertyIterWrapper, public
//
// Arguments: None
//
// Returns: Nothing
//
// History: 09-Apr-97 KrishnaN Created.
//
//----------------------------------------------------------------------------
CPropertyIterWrapper::~CPropertyIterWrapper () { delete _pPropStoreWids; }
//+---------------------------------------------------------------------------
//
// Member: CPropertyIterWrapper::Reset, public
//
// Arguments: None
//
// Returns:
//
// History: 09-Apr-97 KrishnaN Created.
//
// To implement this, go to propiter.cxx and do the following
// in a new method, Reset()
// get a lock; release the buffer; set the _wid to 1
//----------------------------------------------------------------------------
//+---------------------------------------------------------------------------
//
// Member: CPropertyIterWrapper::AddRef, public
//
// Returns: Reference count on object.
//
// History: 09-Apr-97 KrishnaN Created.
//
//----------------------------------------------------------------------------
ULONG CPropertyIterWrapper::AddRef() { return InterlockedIncrement(&_lRefCount); }
//+---------------------------------------------------------------------------
//
// Member: CPropertyIterWrapper::Release, public
//
// Returns: Reference count on object.
//
// History: 09-Apr-97 KrishnaN Created.
//
//----------------------------------------------------------------------------
ULONG CPropertyIterWrapper::Release() { LONG lRef;
lRef = InterlockedDecrement(&_lRefCount);
if ( lRef <= 0 ) delete this;
return lRef; }
//+---------------------------------------------------------------------------
//
// Member: CPropertyIterWrapper::WorkId, public
//
// Returns: Current workid, or widInvalid if at end.
//
// History: 08-Apr-97 KrishnaN Created.
//
//----------------------------------------------------------------------------
SCODE CPropertyIterWrapper::GetWorkId(WORKID &wid) { SCODE sc = S_OK;
TRY { wid = _pPropStoreWids->WorkId(); } CATCH(CException, e) { sc = e.GetErrorCode(); wid = widInvalid; ciDebugOut((DEB_ERROR, "CPropertyIterWrapper::GetNextWorkId caught exception 0x%X\n", sc)); } END_CATCH
return sc; }
//+---------------------------------------------------------------------------
//
// Member: CPropertyIterWrapper::GetNextWorkId, public
//
// Arguments:
//
// Returns: Next work id.
//
// History: 09-Apr-97 KrishnaN Created.
//
//----------------------------------------------------------------------------
SCODE CPropertyIterWrapper::GetNextWorkId (WORKID &wid) { SCODE sc = S_OK;
TRY { wid = _pPropStoreWids->NextWorkId(); } CATCH(CException, e) { sc = e.GetErrorCode(); ciDebugOut((DEB_ERROR, "CPropertyIterWrapper::GetNextWorkId caught exception 0x%X\n", sc)); wid = widInvalid; } END_CATCH
return sc; }
//+---------------------------------------------------------------------------
//
// Member: CreateWrapStor, public
//
// Arguments: [pPropStore] is the property store to iterate
// [ppPropStoreIter] receives the created iterator
//
// Returns: PPropertyStorage object
//
// History: 08-Apr-97 KrishnaN Created.
//
//----------------------------------------------------------------------------
SCODE CreatePropertyStoreIter( PPropertyStore * pPropStore, PPropertyStoreIter ** ppPropStoreIter ) { if (0 == pPropStore || 0 == ppPropStoreIter) return E_INVALIDARG;
*ppPropStoreIter = 0;
SCODE sc = S_OK;
TRY { CPropStoreManager *pcps = ((CPropertyStoreWrapper *)pPropStore)->_GetCPropertyStore(); *ppPropStoreIter = new CPropertyIterWrapper (*pcps); } CATCH( CException, e) { sc = e.GetErrorCode(); ciDebugOut((DEB_ERROR, "CreatePropertyStoreIter caught exception 0x%X\n", sc)); } END_CATCH
return sc; }
|