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.
75 lines
1.6 KiB
75 lines
1.6 KiB
/*===================================================================
|
|
Microsoft Denali
|
|
|
|
Microsoft Confidential.
|
|
Copyright 1996 Microsoft Corporation. All Rights Reserved.
|
|
|
|
Component: Hash table for Script Manager
|
|
|
|
File: DblList.h
|
|
|
|
Owner: DGottner
|
|
|
|
extremly simple, yet very flexible, linked list manager
|
|
===================================================================*/
|
|
|
|
#ifndef DBLLINK_H
|
|
#define DBLLINK_H
|
|
|
|
#ifdef LINKTEST
|
|
#define _DEBUG
|
|
#include <assert.h>
|
|
#define Assert assert
|
|
|
|
#else
|
|
#include "debug.h"
|
|
#endif
|
|
|
|
|
|
/* C D b l L i n k
|
|
*
|
|
* This structure contains a set of links suitable for a doubly linked list
|
|
* implementation. Here we actually use it as a circularly linked list -
|
|
* the links are extracted into this file because the list headers are also
|
|
* of this type.
|
|
*/
|
|
|
|
class CDblLink
|
|
{
|
|
public:
|
|
CDblLink();
|
|
virtual ~CDblLink();
|
|
|
|
// manipulators
|
|
/////
|
|
void UnLink();
|
|
void AppendTo(CDblLink &);
|
|
void PrependTo(CDblLink &);
|
|
|
|
// accessors
|
|
/////
|
|
CDblLink *PNext() const;
|
|
CDblLink *PPrev() const;
|
|
|
|
// testers
|
|
/////
|
|
bool FIsEmpty() const;
|
|
void AssertValid() const
|
|
{
|
|
#ifdef _DEBUG
|
|
Assert (this == m_pLinkPrev->m_pLinkNext && this == m_pLinkNext->m_pLinkPrev);
|
|
#endif
|
|
}
|
|
|
|
private:
|
|
CDblLink *m_pLinkNext, *m_pLinkPrev;
|
|
};
|
|
|
|
inline CDblLink::CDblLink() { m_pLinkNext = m_pLinkPrev = this; }
|
|
inline CDblLink::~CDblLink() { UnLink(); }
|
|
|
|
inline bool CDblLink::FIsEmpty() const { return this == m_pLinkNext; }
|
|
inline CDblLink *CDblLink::PNext() const { return m_pLinkNext; }
|
|
inline CDblLink *CDblLink::PPrev() const { return m_pLinkPrev; }
|
|
|
|
#endif // DBLLINK_H
|