Source code of Windows XP (NT5)
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.
|
|
//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1991 - 1992.
//
// File: LIST.HXX
//
// Contents: Parametrized list class
//
// Classes: CList
//
// History: 4-Apr-91 BartoszM Created.
// 22-May-92 BartoszM Replaced with doubly linked list
//
//----------------------------------------------------------------------------
#pragma once
#include "index.hxx"
//+---------------------------------------------------------------------------
//
// Class: CIndexList
//
// Purpose: Linked list of indexes
//
// History: 4-Apr-91 BartoszM Created.
//
//----------------------------------------------------------------------------
const LONGLONG eSigIndexList = 0x5453494c58444e49i64; // "INDXLIST"
class CIndexList: public CDoubleList { friend class CIndexIter;
public:
CIndexList(): _sigIndexList(eSigIndexList), _countWl(0), _count(0), _sizeIndex(0) {}
unsigned Count () const { return _count; }
unsigned CountWlist () const { return _countWl; }
unsigned IndexSize () const { return _sizeIndex; }
CIndex* GetTop() { return (CIndex *) _Top(); }
void Add ( CIndex* p );
CIndex* Remove ( INDEXID iid );
inline CIndex* RemoveTop ( void );
void Push ( CIndex* pIndex ) { _Push ( pIndex ); _count++; _sizeIndex += pIndex->Size(); }
#ifdef CIEXTMODE
void CiExtDump(void *ciExtSelf); #endif
private:
const LONGLONG _sigIndexList; unsigned _count; unsigned _countWl; unsigned _sizeIndex; };
//+---------------------------------------------------------------------------
//
// Class: CForIndexIter
//
// Purpose: Iterator over an index list
//
// History: 4-Apr-91 BartoszM Created.
//
//----------------------------------------------------------------------------
class CForIndexIter : public CForwardIter { public:
CForIndexIter ( CIndexList& list ) : CForwardIter(list) {}
CIndex* operator->() { return (CIndex*) _pLinkCur; } CIndex* GetIndex() { return (CIndex*) _pLinkCur; } };
//+---------------------------------------------------------------------------
//
// Class: CForIndexIter
//
// Purpose: Iterator over an index list
//
// History: 4-Apr-91 BartoszM Created.
//
//----------------------------------------------------------------------------
class CBackIndexIter : public CBackwardIter { public:
CBackIndexIter ( CIndexList& list ) : CBackwardIter(list) {}
CIndex* operator->() { return (CIndex*) _pLinkCur; } CIndex* GetIndex() { return (CIndex*) _pLinkCur; } };
//+---------------------------------------------------------------------------
//
// Member: CIndexList::RemoveTop, public
//
// History: 04-Apr-91 BartoszM Created.
//
//----------------------------------------------------------------------------
inline CIndex* CIndexList::RemoveTop ( void ) { ciDebugOut (( DEB_ITRACE, "IndexList::RemoveTop\n" ));
CIndex* pIndex = (CIndex*) _Pop(); if ( pIndex && pIndex->IsWordlist() ) _countWl--; return pIndex; }
|