NT4/private/ole32/stg/h/ulist.hxx

493 lines
11 KiB
C++
Raw Normal View History

2001-01-01 00:00:00 +01:00
//+--------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1992.
//
// File: ulist.hxx
//
// Contents: Update list definitions
//
// Classes: CUpdate
// CUpdateList
//
// History: 15-Jan-92 DrewB Created
//
//---------------------------------------------------------------
#ifndef __ULIST_HXX__
#define __ULIST_HXX__
#include <dfmsp.hxx>
#include <wchar.h>
#include <tset.hxx>
// Update list flags
// STGTY_* are used for types
#define ULF_TYPEFLAGS (STGTY_STORAGE | STGTY_STREAM)
class CUpdate;
SAFE_DFBASED_PTR(CBasedUpdatePtr, CUpdate);
//+--------------------------------------------------------------
//
// Class: CUpdate (ud)
//
// Purpose: Tracks renames and deletions
//
// Interface: See below
//
// History: 15-Jan-92 DrewB Created
//
//---------------------------------------------------------------
class CUpdate : CMallocBased
{
public:
CUpdate(CDfName const *pdfnCurrentName,
CDfName const *pdfnOriginalName,
DFLUID dlLUID,
DWORD dwFlags,
PTSetMember *ptsm);
~CUpdate(void);
inline CDfName *GetCurrentName(void);
inline CDfName *GetOriginalName(void);
inline DFLUID GetLUID(void) const;
inline DWORD GetFlags(void) const;
inline PTSetMember *GetXSM(void) const;
inline CUpdate *GetNext(void) const;
inline CUpdate *GetPrev(void) const;
inline BOOL IsDelete(void) const;
inline BOOL IsRename(void) const;
inline BOOL IsCreate(void) const;
inline void SetCurrentName(CDfName const *pdfn);
inline void SetOriginalName(CDfName const *pdfn);
inline void SetLUID(DFLUID dl);
inline void SetFlags(DWORD dwFlags);
inline void SetXSM(PTSetMember *ptsm);
inline void SetNext(CUpdate *pud);
inline void SetPrev(CUpdate *pud);
private:
friend class CUpdateList;
CDfName _dfnCurrent;
CDfName _dfnOriginal;
DFLUID _dl;
DWORD _dwFlags;
CBasedTSetMemberPtr _ptsm;
CBasedUpdatePtr _pudNext, _pudPrev;
};
//+--------------------------------------------------------------
//
// Member: CUpdate::GetCurrentName, public
//
// Synopsis: Returns the current name
// Returns NULL for a zero length name
//
// History: 15-Jan-92 DrewB Created
//
//---------------------------------------------------------------
inline CDfName *CUpdate::GetCurrentName(void)
{
return &_dfnCurrent;
}
//+--------------------------------------------------------------
//
// Member: CUpdate::GetOriginalName, public
//
// Synopsis: Returns the original name
//
// History: 15-Jan-92 DrewB Created
//
//---------------------------------------------------------------
inline CDfName *CUpdate::GetOriginalName(void)
{
return &_dfnOriginal;
}
//+--------------------------------------------------------------
//
// Member: CUpdate::GetLUID, public
//
// Synopsis: Returns _dl
//
// History: 15-Jan-92 DrewB Created
//
//---------------------------------------------------------------
inline DFLUID CUpdate::GetLUID(void) const
{
return _dl;
}
//+--------------------------------------------------------------
//
// Member: CUpdate::GetFlags, public
//
// Synopsis: Returns _dwFlags
//
// History: 15-Jan-92 DrewB Created
//
//---------------------------------------------------------------
inline DWORD CUpdate::GetFlags(void) const
{
return _dwFlags;
}
//+--------------------------------------------------------------
//
// Member: CUpdate::GetXSM, public
//
// Synopsis: Returns the XSM
//
// History: 15-Jan-92 DrewB Created
//
//---------------------------------------------------------------
inline PTSetMember *CUpdate::GetXSM(void) const
{
return BP_TO_P(PTSetMember *, _ptsm);
}
//+--------------------------------------------------------------
//
// Member: CUpdate::GetNext, public
//
// Synopsis: Returns _pudNext
//
// History: 15-Jan-92 DrewB Created
//
//---------------------------------------------------------------
inline CUpdate *CUpdate::GetNext(void) const
{
return BP_TO_P(CUpdate *, _pudNext);
}
//+--------------------------------------------------------------
//
// Member: CUpdate::GetPrev, public
//
// Synopsis: Returns _pudPrev
//
// History: 15-Jan-92 DrewB Created
//
//---------------------------------------------------------------
inline CUpdate *CUpdate::GetPrev(void) const
{
return BP_TO_P(CUpdate *, _pudPrev);
}
//+--------------------------------------------------------------
//
// Member: CUpdate::IsDelete, public
//
// Synopsis: Returns whether this is a delete entry or not
//
// History: 15-Jan-92 DrewB Created
//
//---------------------------------------------------------------
inline BOOL CUpdate::IsDelete(void) const
{
return _dfnCurrent.GetLength() == 0;
}
//+--------------------------------------------------------------
//
// Member: CUpdate::IsRename, public
//
// Synopsis: Returns whether this is a rename or not
//
// History: 15-Jan-92 DrewB Created
//
//---------------------------------------------------------------
inline BOOL CUpdate::IsRename(void) const
{
return _dfnCurrent.GetLength() != 0 && _dfnOriginal.GetLength() != 0;
}
//+--------------------------------------------------------------
//
// Member: CUpdate::IsCreate, public
//
// Synopsis: Returns whether this is a create or not
//
// History: 15-Jan-92 DrewB Created
//
//---------------------------------------------------------------
inline BOOL CUpdate::IsCreate(void) const
{
return _dfnOriginal.GetLength() == 0;
}
//+--------------------------------------------------------------
//
// Member: CUpdate::SetCurrentName, public
//
// Synopsis: Sets the current name
//
// History: 15-Jan-92 DrewB Created
//
//---------------------------------------------------------------
inline void CUpdate::SetCurrentName(CDfName const *pdfn)
{
if (pdfn)
_dfnCurrent = *pdfn;
else
_dfnCurrent.Set((WORD)0, (BYTE *)NULL);
}
//+--------------------------------------------------------------
//
// Member: CUpdate::SetOriginalName, public
//
// Synopsis: Sets the original name
//
// History: 15-Jan-92 DrewB Created
//
//---------------------------------------------------------------
inline void CUpdate::SetOriginalName(CDfName const *pdfn)
{
if (pdfn)
_dfnOriginal = *pdfn;
else
_dfnOriginal.Set((WORD)0, (BYTE *)NULL);
}
//+--------------------------------------------------------------
//
// Member: CUpdate::SetLUID, public
//
// Synopsis: Assigns _dl
//
// History: 15-Jan-92 DrewB Created
//
//---------------------------------------------------------------
inline void CUpdate::SetLUID(DFLUID dl)
{
_dl = dl;
}
//+--------------------------------------------------------------
//
// Member: CUpdate::SetFlags, public
//
// Synopsis: Assigns _dwFlags
//
// History: 15-Jan-92 DrewB Created
//
//---------------------------------------------------------------
inline void CUpdate::SetFlags(DWORD dwFlags)
{
_dwFlags = dwFlags;
}
//+--------------------------------------------------------------
//
// Member: CUpdate::SetXSM, public
//
// Synopsis: Sets the XSM
//
// History: 15-Jan-92 DrewB Created
//
//---------------------------------------------------------------
inline void CUpdate::SetXSM(PTSetMember *ptsm)
{
if (_ptsm)
_ptsm->Release();
_ptsm = P_TO_BP(CBasedTSetMemberPtr, ptsm);
if (_ptsm)
_ptsm->AddRef();
}
//+--------------------------------------------------------------
//
// Member: CUpdate::SetNext, public
//
// Synopsis: Assigns _pudNext
//
// History: 15-Jan-92 DrewB Created
//
//---------------------------------------------------------------
inline void CUpdate::SetNext(CUpdate *pud)
{
_pudNext = P_TO_BP(CBasedUpdatePtr, pud);
}
//+--------------------------------------------------------------
//
// Member: CUpdate::SetPrev, public
//
// Synopsis: Assigns _pudPrev
//
// History: 15-Jan-92 DrewB Created
//
//---------------------------------------------------------------
inline void CUpdate::SetPrev(CUpdate *pud)
{
_pudPrev = P_TO_BP(CBasedUpdatePtr, pud);
}
// Return codes for IsEntry
enum UlIsEntry
{
UIE_CURRENT, UIE_ORIGINAL, UIE_NOTFOUND
};
//+--------------------------------------------------------------
//
// Class: CUpdateList (ul)
//
// Purpose: Maintains a list of update elements
//
// Interface: See below
//
// History: 22-Jun-92 DrewB Created
//
//---------------------------------------------------------------
class CUpdateList
{
public:
CUpdateList(void);
~CUpdateList(void);
CUpdate *Add(IMalloc * const pMalloc,
CDfName const *pdfnCurrent,
CDfName const *pdfnOriginal,
DFLUID dlLUID,
DWORD dwFlags,
PTSetMember *ptsm);
void Append(CUpdate *pud);
void Remove(CUpdate *pud);
inline void Delete(CUpdate *pud);
void Empty(void);
inline void Unlink(void);
inline CUpdate *GetHead(void) const;
inline CUpdate *GetTail(void) const;
UlIsEntry IsEntry(CDfName const *pdfn, CUpdate **ppud);
static BOOL Exists(CUpdate *pud, CDfName const **ppdfn, BOOL fRename);
static CUpdate *FindBase(CUpdate *pud, CDfName const **ppdfn);
private:
CBasedUpdatePtr _pudHead, _pudTail;
};
//+--------------------------------------------------------------
//
// Member: CUpdateList::CUpdateList, public
//
// Synopsis: ctor
//
// History: 22-Jun-92 DrewB Created
//
//---------------------------------------------------------------
inline CUpdateList::CUpdateList(void)
{
_pudHead = _pudTail = NULL;
}
//+--------------------------------------------------------------
//
// Member: CUpdateList::~CUpdateList, public
//
// Synopsis: dtor
//
// History: 22-Jun-92 DrewB Created
//
//---------------------------------------------------------------
inline CUpdateList::~CUpdateList(void)
{
olAssert(_pudHead == NULL && _pudTail == NULL);
}
//+--------------------------------------------------------------
//
// Member: CUpdateList::GetHead, public
//
// Synopsis: Returns _pudHead
//
// History: 22-Jun-92 DrewB Created
//
//---------------------------------------------------------------
CUpdate *CUpdateList::GetHead(void) const
{
return BP_TO_P(CUpdate *, _pudHead);
}
//+--------------------------------------------------------------
//
// Member: CUpdateList::GetTail, public
//
// Synopsis: Returns list tail
//
// History: 22-Jun-92 DrewB Created
//
//---------------------------------------------------------------
CUpdate *CUpdateList::GetTail(void) const
{
return BP_TO_P(CUpdate *, _pudTail);
}
//+--------------------------------------------------------------
//
// Member: CUpdateList::Unlink, public
//
// Synopsis: Unlinks the list
//
// History: 04-Aug-92 DrewB Created
//
// Notes: Used for ownership transfer
//
//---------------------------------------------------------------
inline void CUpdateList::Unlink(void)
{
_pudHead = _pudTail = NULL;
}
//+--------------------------------------------------------------
//
// Member: CUpdateList::Delete, public
//
// Synopsis: Removes the given entry from the list and frees it
//
// Arguments: [pud] - Element to remove
//
// History: 20-Jan-92 DrewB Created
//
//---------------------------------------------------------------
inline void CUpdateList::Delete(CUpdate *pud)
{
Remove(pud);
delete pud;
}
#endif