//+-------------------------------------------------------------- // // 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 #include #include // 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