mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-26 22:38:51 +00:00
AK+Kernel: Make IntrusiveList capable of holding non-raw pointers
This should allow creating intrusive lists that have smart pointers, while remaining free (compared to the impl before this commit) when holding raw pointers :^) As a sidenote, this also adds a `RawPtr<T>` type, which is just equivalent to `T*`. Note that this does not actually use such functionality, but is only expected to pave the way for #6369, to replace NonnullRefPtrVector<T> with intrusive lists. As it is with zero-cost things, this makes the interface a bit less nice by requiring the type name of what an `IntrusiveListNode` holds (and optionally its container, if not RawPtr), and also requiring the type of the container (normally `RawPtr`) on the `IntrusiveList` instance.
This commit is contained in:
parent
fb814ee720
commit
e4412f1f59
Notes:
sideshowbarker
2024-07-18 20:14:51 +09:00
Author: https://github.com/alimpfard
Commit: e4412f1f59
Pull-request: https://github.com/SerenityOS/serenity/pull/6376
Reviewed-by: https://github.com/bgianfo ✅
11 changed files with 143 additions and 80 deletions
|
@ -32,7 +32,7 @@
|
|||
namespace Kernel {
|
||||
|
||||
struct CacheEntry {
|
||||
IntrusiveListNode list_node;
|
||||
IntrusiveListNode<CacheEntry> list_node;
|
||||
BlockBasedFS::BlockIndex block_index { 0 };
|
||||
u8* data { nullptr };
|
||||
bool has_data { false };
|
||||
|
@ -117,8 +117,8 @@ private:
|
|||
BlockBasedFS& m_fs;
|
||||
size_t m_entry_count { 10000 };
|
||||
mutable HashMap<BlockBasedFS::BlockIndex, CacheEntry*> m_hash;
|
||||
mutable IntrusiveList<CacheEntry, &CacheEntry::list_node> m_clean_list;
|
||||
mutable IntrusiveList<CacheEntry, &CacheEntry::list_node> m_dirty_list;
|
||||
mutable IntrusiveList<CacheEntry, RawPtr<CacheEntry>, &CacheEntry::list_node> m_clean_list;
|
||||
mutable IntrusiveList<CacheEntry, RawPtr<CacheEntry>, &CacheEntry::list_node> m_dirty_list;
|
||||
KBuffer m_cached_block_data;
|
||||
KBuffer m_entries;
|
||||
bool m_dirty { false };
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue