mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-10-19 07:33:20 +00:00

This is a weak pointer that integrates with the garbage collector. It has a number of differences compared to AK::WeakPtr, including: - The "control block" is allocated from a well-packed WeakBlock owned by the GC heap, not just a generic malloc allocation. - Pointers to dead cells are nulled out by the garbage collector immediately before running destructors. - It works on any GC::Cell derived type, meaning you don't have to inherit from AK::Weakable for the ability to be weakly referenced. - The Weak always points to a control block, even when "null" (it then points to a null WeakImpl), which means one less null check when chasing pointers.
37 lines
573 B
C++
37 lines
573 B
C++
/*
|
|
* Copyright (c) 2024, Shannon Booth <shannon@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <AK/Types.h>
|
|
#include <LibGC/Export.h>
|
|
|
|
namespace GC {
|
|
|
|
class Cell;
|
|
class CellAllocator;
|
|
class DeferGC;
|
|
class ForeignCell;
|
|
class RootImpl;
|
|
class Heap;
|
|
class HeapBlock;
|
|
class NanBoxedValue;
|
|
class WeakContainer;
|
|
class WeakImpl;
|
|
|
|
template<typename T>
|
|
class Function;
|
|
|
|
template<class T>
|
|
class Root;
|
|
|
|
template<class T, size_t inline_capacity = 0>
|
|
class ConservativeVector;
|
|
|
|
template<class T, size_t inline_capacity = 0>
|
|
class RootVector;
|
|
|
|
}
|