mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 06:07:34 +00:00
LibJS: Use IntrusiveList for keeping track of WeakContainers
This commit is contained in:
parent
3fe1be20b7
commit
cdc1315dc8
5 changed files with 49 additions and 24 deletions
|
@ -6,36 +6,28 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include <LibJS/Heap/Heap.h>
|
||||
#include <AK/IntrusiveList.h>
|
||||
|
||||
namespace JS {
|
||||
|
||||
class WeakContainer {
|
||||
public:
|
||||
explicit WeakContainer(Heap& heap)
|
||||
: m_heap(heap)
|
||||
{
|
||||
m_heap.did_create_weak_container({}, *this);
|
||||
}
|
||||
virtual ~WeakContainer()
|
||||
{
|
||||
deregister();
|
||||
}
|
||||
explicit WeakContainer(Heap&);
|
||||
virtual ~WeakContainer();
|
||||
|
||||
virtual void remove_swept_cells(Badge<Heap>, Vector<Cell*>&) = 0;
|
||||
|
||||
protected:
|
||||
void deregister()
|
||||
{
|
||||
if (!m_registered)
|
||||
return;
|
||||
m_heap.did_destroy_weak_container({}, *this);
|
||||
m_registered = false;
|
||||
}
|
||||
void deregister();
|
||||
|
||||
private:
|
||||
bool m_registered { true };
|
||||
Heap& m_heap;
|
||||
|
||||
IntrusiveListNode<WeakContainer> m_list_node;
|
||||
|
||||
public:
|
||||
using List = IntrusiveList<WeakContainer, RawPtr<WeakContainer>, &WeakContainer::m_list_node>;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue