From 1e860e07eee8259e381470a643a91d5b4d76bb1f Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Tue, 31 Jan 2023 15:36:15 -0500 Subject: [PATCH] BPrivate::WeakReferenceable: Move implementation to a .cpp. No functional change to the implementation, just getting it out of a header. --- headers/private/shared/WeakReferenceable.h | 93 ------------------- src/kits/shared/Jamfile | 1 + src/kits/shared/WeakReferenceable.cpp | 100 +++++++++++++++++++++ src/system/kernel/lib/Jamfile | 6 +- 4 files changed, 106 insertions(+), 94 deletions(-) create mode 100644 src/kits/shared/WeakReferenceable.cpp diff --git a/headers/private/shared/WeakReferenceable.h b/headers/private/shared/WeakReferenceable.h index 7d1774fe32..ed2a2e1efb 100644 --- a/headers/private/shared/WeakReferenceable.h +++ b/headers/private/shared/WeakReferenceable.h @@ -230,99 +230,6 @@ private: }; -// #pragma mark - - - -inline -WeakPointer::WeakPointer(BWeakReferenceable* object) - : - fUseCount(1), - fObject(object) -{ -} - - -inline -WeakPointer::~WeakPointer() -{ -} - - -inline BWeakReferenceable* -WeakPointer::Get() -{ - int32 count = -11; - - do { - count = atomic_get(&fUseCount); - if (count == 0) - return NULL; - } while (atomic_test_and_set(&fUseCount, count + 1, count) != count); - - return fObject; -} - - -inline bool -WeakPointer::Put() -{ - if (atomic_add(&fUseCount, -1) == 1) { - delete fObject; - return true; - } - - return false; -} - - -inline int32 -WeakPointer::UseCount() const -{ - return fUseCount; -} - - -inline void -WeakPointer::GetUnchecked() -{ - atomic_add(&fUseCount, 1); -} - - -// #pragma - - - -inline -BWeakReferenceable::BWeakReferenceable() - : - fPointer(new(std::nothrow) WeakPointer(this)) -{ -} - - -inline -BWeakReferenceable::~BWeakReferenceable() -{ - fPointer->ReleaseReference(); -} - - -inline status_t -BWeakReferenceable::InitCheck() -{ - if (fPointer == NULL) - return B_NO_MEMORY; - return B_OK; -} - - -inline WeakPointer* -BWeakReferenceable::GetWeakPointer() -{ - fPointer->AcquireReference(); - return fPointer; -} - } // namespace BPrivate using BPrivate::BWeakReferenceable; diff --git a/src/kits/shared/Jamfile b/src/kits/shared/Jamfile index bf0e23b2c4..757610116a 100644 --- a/src/kits/shared/Jamfile +++ b/src/kits/shared/Jamfile @@ -67,6 +67,7 @@ for architectureObject in [ MultiArchSubDirSetup ] { Thread.cpp ToolBar.cpp Variant.cpp + WeakReferenceable.cpp ; Includes [ FGristFiles Keymap.cpp ] diff --git a/src/kits/shared/WeakReferenceable.cpp b/src/kits/shared/WeakReferenceable.cpp new file mode 100644 index 0000000000..86f0778eea --- /dev/null +++ b/src/kits/shared/WeakReferenceable.cpp @@ -0,0 +1,100 @@ +/* + * Copyright 2009, Axel Dörfler, axeld@pinc-software.de. + * Distributed under the terms of the MIT License. + */ + + +#include + + +namespace BPrivate { + + +WeakPointer::WeakPointer(BWeakReferenceable* object) + : + fUseCount(1), + fObject(object) +{ +} + + +WeakPointer::~WeakPointer() +{ +} + + +BWeakReferenceable* +WeakPointer::Get() +{ + int32 count = -11; + + do { + count = atomic_get(&fUseCount); + if (count == 0) + return NULL; + } while (atomic_test_and_set(&fUseCount, count + 1, count) != count); + + return fObject; +} + + +bool +WeakPointer::Put() +{ + if (atomic_add(&fUseCount, -1) == 1) { + delete fObject; + return true; + } + + return false; +} + + +int32 +WeakPointer::UseCount() const +{ + return fUseCount; +} + + +void +WeakPointer::GetUnchecked() +{ + atomic_add(&fUseCount, 1); +} + + +// #pragma - + + +BWeakReferenceable::BWeakReferenceable() + : + fPointer(new(std::nothrow) WeakPointer(this)) +{ +} + + +BWeakReferenceable::~BWeakReferenceable() +{ + fPointer->ReleaseReference(); +} + + +status_t +BWeakReferenceable::InitCheck() +{ + if (fPointer == NULL) + return B_NO_MEMORY; + return B_OK; +} + + +WeakPointer* +BWeakReferenceable::GetWeakPointer() +{ + fPointer->AcquireReference(); + return fPointer; +} + + +} // namespace BPrivate diff --git a/src/system/kernel/lib/Jamfile b/src/system/kernel/lib/Jamfile index 19cc853e69..6a19e1be30 100644 --- a/src/system/kernel/lib/Jamfile +++ b/src/system/kernel/lib/Jamfile @@ -147,11 +147,15 @@ SEARCH on [ FGristFiles $(muslSources) ] += [ FDirName $(posixSources) musl misc # misc -SEARCH_SOURCE = [ FDirName $(HAIKU_TOP) src kits support ] ; +SEARCH_SOURCE = + [ FDirName $(HAIKU_TOP) src kits support ] + [ FDirName $(HAIKU_TOP) src kits shared ] + ; KernelMergeObject kernel_misc.o : DataIO.cpp Referenceable.cpp + WeakReferenceable.cpp : $(TARGET_KERNEL_PIC_CCFLAGS) ;