/src/serenity/AK/SinglyLinkedListSizePolicy.h
Line | Count | Source |
1 | | /* |
2 | | * Copyright (c) 2022, the SerenityOS developers. |
3 | | * |
4 | | * SPDX-License-Identifier: BSD-2-Clause |
5 | | */ |
6 | | |
7 | | #pragma once |
8 | | |
9 | | #include <AK/Types.h> |
10 | | |
11 | | namespace AK { |
12 | | |
13 | | struct DefaultSizeCalculationPolicy { |
14 | 0 | constexpr void increase_size(auto const&) { }Unexecuted instantiation: void AK::DefaultSizeCalculationPolicy::increase_size<JS::FinalizationRegistry::FinalizationRecord>(JS::FinalizationRegistry::FinalizationRecord const&) Unexecuted instantiation: void AK::DefaultSizeCalculationPolicy::increase_size<JS::NonnullGCPtr<Web::Streams::ReadRequest> >(JS::NonnullGCPtr<Web::Streams::ReadRequest> const&) Unexecuted instantiation: void AK::DefaultSizeCalculationPolicy::increase_size<Web::Streams::PullIntoDescriptor>(Web::Streams::PullIntoDescriptor const&) Unexecuted instantiation: void AK::DefaultSizeCalculationPolicy::increase_size<Web::Streams::ValueWithSize>(Web::Streams::ValueWithSize const&) Unexecuted instantiation: void AK::DefaultSizeCalculationPolicy::increase_size<Web::Streams::ReadableByteStreamQueueEntry>(Web::Streams::ReadableByteStreamQueueEntry const&) Unexecuted instantiation: void AK::DefaultSizeCalculationPolicy::increase_size<JS::NonnullGCPtr<JS::PromiseCapability> >(JS::NonnullGCPtr<JS::PromiseCapability> const&) |
15 | | |
16 | 0 | constexpr void decrease_size(auto const&) { }Unexecuted instantiation: void AK::DefaultSizeCalculationPolicy::decrease_size<JS::FinalizationRegistry::FinalizationRecord>(JS::FinalizationRegistry::FinalizationRecord const&) Unexecuted instantiation: void AK::DefaultSizeCalculationPolicy::decrease_size<JS::NonnullGCPtr<Web::Streams::ReadRequest> >(JS::NonnullGCPtr<Web::Streams::ReadRequest> const&) Unexecuted instantiation: void AK::DefaultSizeCalculationPolicy::decrease_size<Web::Streams::ReadableByteStreamQueueEntry>(Web::Streams::ReadableByteStreamQueueEntry const&) Unexecuted instantiation: void AK::DefaultSizeCalculationPolicy::decrease_size<Web::Streams::PullIntoDescriptor>(Web::Streams::PullIntoDescriptor const&) Unexecuted instantiation: void AK::DefaultSizeCalculationPolicy::decrease_size<JS::NonnullGCPtr<JS::PromiseCapability> >(JS::NonnullGCPtr<JS::PromiseCapability> const&) Unexecuted instantiation: void AK::DefaultSizeCalculationPolicy::decrease_size<Web::Streams::ValueWithSize>(Web::Streams::ValueWithSize const&) |
17 | | |
18 | 0 | constexpr void reset() { } |
19 | | |
20 | | constexpr size_t size(auto const* head) const |
21 | 0 | { |
22 | 0 | size_t size = 0; |
23 | 0 | for (auto* node = head; node; node = node->next) |
24 | 0 | ++size; |
25 | 0 | return size; |
26 | 0 | } |
27 | | }; |
28 | | |
29 | | struct CountingSizeCalculationPolicy { |
30 | | constexpr void increase_size(auto const&) { ++m_size; } |
31 | | |
32 | | constexpr void decrease_size(auto const&) { --m_size; } |
33 | | |
34 | 0 | constexpr void reset() { m_size = 0; } |
35 | | |
36 | | constexpr size_t size(auto const*) const { return m_size; } |
37 | | |
38 | | private: |
39 | | size_t m_size { 0 }; |
40 | | }; |
41 | | |
42 | | } |
43 | | |
44 | | #ifdef USING_AK_GLOBALLY |
45 | | using AK::CountingSizeCalculationPolicy; |
46 | | using AK::DefaultSizeCalculationPolicy; |
47 | | #endif |