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.
|
|
#ifndef __VARMAPINDEX_H__
#define __VARMAPINDEX_H__
/*---------------------------------------------------------------------------
File: VarMapIndex.h
Comments: Helper class for CMapStringToVar.
CIndexTree implements a sorted, balanced binary tree. This is used by CMapStringToVar to provide enumeration in sorted order by key.
(c) Copyright 1995-1998, Mission Critical Software, Inc., All Rights Reserved Proprietary and confidential to Mission Critical Software, Inc.
REVISION LOG ENTRY Revision By: Christy Boles Revised on 11/19/98 18:01:34
--------------------------------------------------------------------------- */
#include "VarData.h"
class CHashItem; class CIndexTree;
class CIndexItem { friend class CIndexTree; CHashItem * pData; CIndexItem * pLeft; CIndexItem * pRight; CIndexItem * pParent; BOOL red; public: CVarData* GetValue(); CString GetKey();
protected: CIndexItem(CHashItem*pd) { pData = pd; pLeft = NULL; pRight = NULL; pParent = NULL; red = FALSE;} CHashItem* Data() { return pData; } CIndexItem* Left() { return pLeft; } CIndexItem* Right() { return pRight; } CIndexItem* Parent() { return pParent; } BOOL IsRed() { return red; } void Left(CIndexItem* l) { pLeft = l; } void Right(CIndexItem* r) { pRight = r; } void Parent(CIndexItem* par) { pParent = par; } void Data(CHashItem* p) { pData=p; } void Red(BOOL rd = TRUE) { red = rd; } void Black(BOOL blk = TRUE) { red = !blk; } void McLogInternalDiagnostics(CString keyName,int depth); };
typedef int CompareFunction(CIndexItem* i1,CIndexItem* i2);
typedef int CompareKeyFunction(CString s, CIndexItem* i);
extern CompareFunction CompareItems; extern CompareKeyFunction CompareStringToItem;
extern CompareFunction CompareItemsNoCase; extern CompareKeyFunction CompareStringToItemNoCase;
class CIndexTree { friend class CMapStringToVar;
CIndexItem* m_root; CompareFunction* m_Compare; CompareKeyFunction* m_CompareKey; BOOL m_CaseSensitive;
protected: CIndexTree(CompareFunction * comp = &CompareItems, CompareKeyFunction * kc = &CompareStringToItem) { m_root = NULL; m_Compare = comp; m_CompareKey = kc; m_CaseSensitive = TRUE; } ~CIndexTree() { RemoveAll(); } public: CIndexItem* GetFirstItem() const { CIndexItem * curr = m_root; while ( curr && curr->Left() ) curr = curr->Left(); return curr; } CIndexItem* GetPrevItem(CIndexItem*curr) const; CIndexItem* GetNextItem(CIndexItem*curr) const; CIndexItem* GetFirstAfter(CString value) const;
void McLogInternalDiagnostics(CString keyName); #ifdef _DEBUG
BOOL AssertValid(int nItems) const; #endif
protected: // functions called by CMapStringToVar to add/remove items from the tree
void RemoveAll(); CIndexItem * Insert(CHashItem* data); void SetCompareFunctions(CompareFunction * f, CompareKeyFunction * kc) { m_Compare = f; m_CompareKey = kc; } // Helper functions to maintain tree structure
void LeftRotate(CIndexItem* item); void RightRotate(CIndexItem* item); void RemoveHelper(CIndexItem* item); };
#endif //__VARMAPINDEX_H__
|