38 lines
847 B
C++
38 lines
847 B
C++
#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
|