hostile-takeover/base/deletetracker.cpp
2014-07-06 17:47:28 -07:00

49 lines
892 B
C++

#include "base/deletetracker.h"
namespace base {
// DeleteRecord methods
DeleteRecord::DeleteRecord(DeleteTracker *tracker) {
tracker_ = tracker;
pdrNext_ = NULL;
deleted_ = false;
tracker_->Register(this);
}
DeleteRecord::~DeleteRecord() {
if (!deleted_) {
tracker_->Unregister(this);
}
}
// DeleteTracker methods
DeleteTracker::DeleteTracker() {
pdrFirst_ = NULL;
}
DeleteTracker::~DeleteTracker() {
for (DeleteRecord *pdr = pdrFirst_; pdr != NULL; pdr = pdr->pdrNext_) {
pdr->deleted_ = true;
}
}
void DeleteTracker::Register(DeleteRecord *pdr) {
pdr->pdrNext_ = pdrFirst_;
pdrFirst_ = pdr;
}
void DeleteTracker::Unregister(DeleteRecord *pdr) {
#ifdef LOGGING
if (pdr != pdrFirst_) {
LOG() << "Error!";
}
#endif
if (pdr == pdrFirst_) {
pdrFirst_ = pdr->pdrNext_;
}
}
} // namespace base