MCPcopy Create free account
hub / github.com/Tripwire/tripwire-open-source / DeleteEntry

Method DeleteEntry

src/db/hierdatabase.cpp:636–677  ·  view source on GitHub ↗

////////////////////////////////////////////////////////////////////////// DeleteEntry //////////////////////////////////////////////////////////////////////////

Source from the content-addressed store, hash-verified

634// DeleteEntry
635///////////////////////////////////////////////////////////////////////////////
636void cHierDatabaseIter::DeleteEntry() //throw (eArchive, eHierDatabase)
637{
638 ASSERT(!Done());
639 ASSERT(!CanDescend()); // this node can't have any children.
640 cDebug d("cHierDatabaseIter::DeleteEntry");
641
642 if (Done())
643 {
644 d.TraceDetail("Attempt to DeleteEntry() when Done() == true; returning\n");
645 return;
646 }
647 if (CanDescend())
648 {
649 throw eHierDatabase(_T("Attempt to delete an entry that still has children.\n"));
650 }
651
652 //
653 // first, we should set the previous node's next pointer...
654 //
655 cHierAddr curAddr = GetCurrentAddr();
656 if (mIter == mEntries.begin())
657 {
658 // we are changing the info's mArray pointer
659 //
660 mInfo.mArray = mIter->mNext;
661 util_RewriteObject(mpDb, &mInfo, mInfoAddr);
662 }
663 else
664 {
665 // altering the previous node...
666 //
667 --mIter;
668 mIter->mNext = (mIter + 1)->mNext;
669 util_RewriteObject(mpDb, &(*mIter), GetCurrentAddr());
670 ++mIter;
671 }
672 //
673 // now, delete the node from the file and from our array...
674 //
675 mpDb->RemoveItem(cBlockRecordFile::tAddr(curAddr.mBlockNum, curAddr.mIndex));
676 mIter = mEntries.erase(mIter);
677}
678
679///////////////////////////////////////////////////////////////////////////////
680// CanDeleteChildArray

Callers 3

RemoveFCOMethod · 0.80
RemoveDirectoryFunction · 0.80
RemoveFileFunction · 0.80

Calls 5

util_RewriteObjectFunction · 0.85
tAddrClass · 0.85
beginMethod · 0.80
TraceDetailMethod · 0.60
RemoveItemMethod · 0.45

Tested by

no test coverage detected