/* * Copyright (c) 2021, Idan Horowitz * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include namespace GC { class WeakContainer { public: explicit WeakContainer(Heap&); virtual ~WeakContainer(); virtual void remove_dead_cells(Badge) = 0; protected: void deregister(); private: bool m_registered { true }; Heap& m_heap; IntrusiveListNode m_list_node; public: using List = IntrusiveList<&WeakContainer::m_list_node>; }; }