mirror of
https://github.com/RGBCube/serenity
synced 2025-07-28 07:47:34 +00:00
AK: Make IntrusiveRedBlackTree capable of holding non-raw pointers
This is completely based on e4412f1f59
and will allow us to convert some AK::HashMap users in the kernel.
This commit is contained in:
parent
7bb3b2839e
commit
1db9250766
4 changed files with 159 additions and 35 deletions
29
AK/IntrusiveDetails.h
Normal file
29
AK/IntrusiveDetails.h
Normal file
|
@ -0,0 +1,29 @@
|
|||
/*
|
||||
* Copyright (c) 2021, Ali Mohammad Pur <mpfard@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
namespace AK::Detail {
|
||||
|
||||
template<typename T, typename Container>
|
||||
struct SubstituteIntrusiveContainerType {
|
||||
using Type = Container;
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
struct SubstituteIntrusiveContainerType<T, NonnullRefPtr<T>> {
|
||||
using Type = RefPtr<T>;
|
||||
};
|
||||
|
||||
template<typename Container, bool _IsRaw>
|
||||
struct SelfReferenceIfNeeded {
|
||||
Container reference = nullptr;
|
||||
};
|
||||
template<typename Container>
|
||||
struct SelfReferenceIfNeeded<Container, true> {
|
||||
};
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue