#include "cppgc_helpers.h" #include "env-inl.h" namespace node { void CppgcWrapperList::Cleanup() { for (auto node : *this) { CppgcMixin* ptr = node->persistent.Get(); if (ptr != nullptr) { ptr->Finalize(); } } } void CppgcWrapperList::MemoryInfo(MemoryTracker* tracker) const { for (auto node : *this) { CppgcMixin* ptr = node->persistent.Get(); if (ptr != nullptr) { tracker->Track(ptr); } } } void CppgcWrapperList::PurgeEmpty() { for (auto weak_it = begin(); weak_it != end();) { CppgcWrapperListNode* node = *weak_it; auto next_it = ++weak_it; // The underlying cppgc wrapper has already been garbage collected. // Remove it from the list. if (!node->persistent) { node->persistent.Clear(); delete node; } weak_it = next_it; } } } // namespace node