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.
188 lines
3.9 KiB
188 lines
3.9 KiB
//+---------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1992 - 1995.
|
|
//
|
|
// File: sinklist.hxx
|
|
//
|
|
// Contents: Linked list class
|
|
//
|
|
// Classes: CSinkList
|
|
// CConnectionPoint
|
|
//
|
|
// Functions:
|
|
//
|
|
// History: 24-Dec-95 SusiA Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#ifndef __SINKLIST_HXX__
|
|
#define __SINKLIST_HXX__
|
|
|
|
class CSafeSem;
|
|
|
|
#include <iconn.h>
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Class: CSinkList
|
|
//
|
|
// Purpose: Generic linked list class for use by async docfiles
|
|
//
|
|
// Interface:
|
|
//
|
|
// History: 24-Dec-95 SusiA Created
|
|
//
|
|
// Notes:
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
class CSinkList
|
|
{
|
|
public:
|
|
inline CSinkList();
|
|
|
|
inline CSinkList *GetNext(void);
|
|
inline void SetNext(CSinkList *psl);
|
|
|
|
inline DWORD GetCookie(void);
|
|
inline void SetCookie(DWORD dwCookie);
|
|
|
|
inline IProgressNotify *GetProgressNotify(void);
|
|
inline void SetProgressNotify(IProgressNotify *ppn);
|
|
|
|
private:
|
|
IProgressNotify *_ppn;
|
|
DWORD _dwCookie;
|
|
CSinkList *_pslNext;
|
|
};
|
|
|
|
|
|
inline CSinkList::CSinkList()
|
|
{
|
|
_ppn = NULL;
|
|
_dwCookie = 0;
|
|
_pslNext = NULL;
|
|
}
|
|
|
|
|
|
inline CSinkList * CSinkList::GetNext(void)
|
|
{
|
|
return _pslNext;
|
|
}
|
|
|
|
|
|
inline void CSinkList::SetNext(CSinkList *psl)
|
|
{
|
|
_pslNext = psl;
|
|
}
|
|
|
|
|
|
inline DWORD CSinkList::GetCookie(void)
|
|
{
|
|
return _dwCookie;
|
|
}
|
|
|
|
|
|
inline void CSinkList::SetCookie(DWORD dwCookie)
|
|
{
|
|
_dwCookie = dwCookie;
|
|
}
|
|
|
|
|
|
inline IProgressNotify *CSinkList::GetProgressNotify(void)
|
|
{
|
|
return _ppn;
|
|
}
|
|
|
|
|
|
inline void CSinkList::SetProgressNotify(IProgressNotify *ppn)
|
|
{
|
|
_ppn = ppn;
|
|
}
|
|
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Class: CConnectionPoint
|
|
//
|
|
// Purpose:
|
|
//
|
|
// Interface:
|
|
//
|
|
// History: 28-Dec-95 SusiA Created
|
|
//
|
|
// Notes:
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
class CConnectionPoint: public IDocfileAsyncConnectionPoint
|
|
{
|
|
public:
|
|
CConnectionPoint();
|
|
~CConnectionPoint();
|
|
|
|
inline CSinkList *GetHead(void);
|
|
void TakeCS(void);
|
|
void ReleaseCS(void);
|
|
|
|
//From IUnknown
|
|
STDMETHOD(QueryInterface)(REFIID iid, void **ppvObj);
|
|
STDMETHOD_(ULONG,AddRef)(void);
|
|
STDMETHOD_(ULONG,Release)(void);
|
|
|
|
#ifdef ASYNC
|
|
#else
|
|
SCODE Notify(SCODE scFailure,
|
|
IFillLockBytes *piflb,
|
|
BOOL fDefaultLockBytes);
|
|
#endif
|
|
|
|
//From IDocfileAsyncConnectionPoint
|
|
STDMETHOD(AddConnection)(IProgressNotify *pUnkSink,
|
|
DWORD *pdwCookie);
|
|
STDMETHOD(RemoveConnection)(DWORD dwCookie);
|
|
STDMETHOD(NotifySinks)(ULONG ulProgressCurrent,
|
|
ULONG ulProgressMaximum,
|
|
BOOL fAccurate,
|
|
SCODE sc);
|
|
STDMETHOD(GetParent)(IDocfileAsyncConnectionPoint **ppParent);
|
|
|
|
SCODE Clone (CConnectionPoint *pcp);
|
|
inline DWORD GetCookie(void);
|
|
inline void SetParent(IDocfileAsyncConnectionPoint *pParentCP);
|
|
SCODE Init();
|
|
|
|
private:
|
|
DWORD _dwCookie;
|
|
LONG _cReferences;
|
|
CSinkList *_pSinkHead;
|
|
IDocfileAsyncConnectionPoint *_pParentCP;
|
|
BOOL _fCSInitialized;
|
|
CRITICAL_SECTION _csSinkList;
|
|
};
|
|
|
|
|
|
inline CSinkList * CConnectionPoint::GetHead(void)
|
|
{
|
|
return _pSinkHead;
|
|
}
|
|
|
|
|
|
inline DWORD CConnectionPoint::GetCookie(void)
|
|
{
|
|
return _dwCookie;
|
|
}
|
|
|
|
|
|
inline void CConnectionPoint::SetParent(
|
|
IDocfileAsyncConnectionPoint *pParentCP)
|
|
{
|
|
_pParentCP = pParentCP;
|
|
if (_pParentCP != NULL)
|
|
_pParentCP->AddRef();
|
|
}
|
|
|
|
|
|
#endif // #ifndef __SINKLIST_HXX__
|
|
|
|
|