Leaked source code of windows server 2003
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.
|
|
/***
*contain.cpp - RTC support * * Copyright (c) 1998-2001, Microsoft Corporation. All rights reserved. * * *Revision History: * 07-28-98 JWM Module incorporated into CRTs (from KFrei) * 11-03-98 KBF added throw() to eliminate C++ EH code * 05-11-99 KBF Error if RTC support define not enabled * 05-26-99 KBF Added _RTC_ prefix, _RTC_ADVMEM stuff * ****/
#ifndef _RTC
#error RunTime Check support not enabled!
#endif
#include "rtcpriv.h"
#ifdef _RTC_ADVMEM
_RTC_Container * _RTC_Container::AddChild(_RTC_HeapBlock *hb) throw() { if (kids) { _RTC_Container *p = kids->get(hb); if (p) return p->AddChild(hb); kids->add(hb);
} else { kids = new _RTC_BinaryTree(new _RTC_Container(hb)); } return this; }
_RTC_Container * _RTC_Container::DelChild(_RTC_HeapBlock* hb) throw() { if (kids) { _RTC_Container *p = kids->get(hb); if (p) { if (p->inf == hb) { kids->del(hb)->kill(); return this; } else return p->DelChild(hb); } kids->del(hb); return this; } else return 0; }
_RTC_Container * _RTC_Container::FindChild(_RTC_HeapBlock *i) throw() { if (inf == i) return this; else if (kids) { _RTC_Container *res = kids->get(i); if (res) return res->FindChild(i); } return 0; }
void _RTC_Container::kill() throw() { if (kids) { _RTC_BinaryTree::iter i;
for (_RTC_Container *c = kids->FindFirst(&i); c; c = kids->FindNext(&i)) c->kill();
delete kids; kids = 0; } if (inf) { delete inf; inf = 0; } }
#endif // _RTC_ADVMEM
|