From 1dc2471d01534729cb623a3a96d2c1b1317c0ad9 Mon Sep 17 00:00:00 2001 From: Tsuda Kageyu Date: Sun, 13 Apr 2014 15:02:17 +0900 Subject: [PATCH] Removed some redundant code from tsmartptr.h. --- taglib/toolkit/trefcounter.cpp | 39 ++++++++++++++++--------------- taglib/toolkit/trefcounter.h | 1 + taglib/toolkit/tsmartptr.h | 42 +++++----------------------------- 3 files changed, 28 insertions(+), 54 deletions(-) diff --git a/taglib/toolkit/trefcounter.cpp b/taglib/toolkit/trefcounter.cpp index f9a9f952..fc508efc 100644 --- a/taglib/toolkit/trefcounter.cpp +++ b/taglib/toolkit/trefcounter.cpp @@ -31,36 +31,36 @@ #if defined(HAVE_STD_ATOMIC) # include -# define ATOMIC_INT std::atomic +# define ATOMIC_INT std::atomic # define ATOMIC_INC(x) x.fetch_add(1) # define ATOMIC_DEC(x) (x.fetch_sub(1) - 1) #elif defined(HAVE_BOOST_ATOMIC) # include -# define ATOMIC_INT boost::atomic +# define ATOMIC_INT boost::atomic # define ATOMIC_INC(x) x.fetch_add(1) # define ATOMIC_DEC(x) (x.fetch_sub(1) - 1) #elif defined(HAVE_GCC_ATOMIC) # define ATOMIC_INT int -# define ATOMIC_INC(x) __sync_add_and_fetch(&x, 1) -# define ATOMIC_DEC(x) __sync_sub_and_fetch(&x, 1) +# define ATOMIC_INC(x) ::__sync_add_and_fetch(&x, 1) +# define ATOMIC_DEC(x) ::__sync_sub_and_fetch(&x, 1) #elif defined(HAVE_WIN_ATOMIC) # if !defined(NOMINMAX) # define NOMINMAX # endif # include -# define ATOMIC_INT long -# define ATOMIC_INC(x) InterlockedIncrement(&x) -# define ATOMIC_DEC(x) InterlockedDecrement(&x) +# define ATOMIC_INT volatile LONG +# define ATOMIC_INC(x) ::InterlockedIncrement(&x) +# define ATOMIC_DEC(x) ::InterlockedDecrement(&x) #elif defined(HAVE_MAC_ATOMIC) # include # define ATOMIC_INT int32_t -# define ATOMIC_INC(x) OSAtomicIncrement32Barrier(&x) -# define ATOMIC_DEC(x) OSAtomicDecrement32Barrier(&x) +# define ATOMIC_INC(x) ::OSAtomicIncrement32Barrier(&x) +# define ATOMIC_DEC(x) ::OSAtomicDecrement32Barrier(&x) #elif defined(HAVE_IA64_ATOMIC) # include # define ATOMIC_INT int -# define ATOMIC_INC(x) __sync_add_and_fetch(&x, 1) -# define ATOMIC_DEC(x) __sync_sub_and_fetch(&x, 1) +# define ATOMIC_INC(x) ::__sync_add_and_fetch(&x, 1) +# define ATOMIC_DEC(x) ::__sync_sub_and_fetch(&x, 1) #else # define ATOMIC_INT int # define ATOMIC_INC(x) (++x) @@ -72,16 +72,14 @@ namespace TagLib class RefCounter::RefCounterPrivate { public: - RefCounterPrivate() - : refCount(1) - { - } + RefCounterPrivate() : + refCount(1) {} - volatile ATOMIC_INT refCount; + ATOMIC_INT refCount; }; - RefCounter::RefCounter() - : d(new RefCounterPrivate()) + RefCounter::RefCounter() : + d(new RefCounterPrivate()) { } @@ -100,6 +98,11 @@ namespace TagLib return (ATOMIC_DEC(d->refCount) == 0); } + int RefCounter::count() const + { + return static_cast(d->refCount); + } + bool RefCounter::unique() const { return (d->refCount == 1); diff --git a/taglib/toolkit/trefcounter.h b/taglib/toolkit/trefcounter.h index 424f6d49..e5873ba3 100644 --- a/taglib/toolkit/trefcounter.h +++ b/taglib/toolkit/trefcounter.h @@ -44,6 +44,7 @@ namespace TagLib void ref(); bool deref(); + int count() const; bool unique() const; private: diff --git a/taglib/toolkit/tsmartptr.h b/taglib/toolkit/tsmartptr.h index cf85b02a..5d61c73c 100644 --- a/taglib/toolkit/tsmartptr.h +++ b/taglib/toolkit/tsmartptr.h @@ -55,34 +55,7 @@ #else // !HAVE_STD_SHARED_PTR && !HAVE_TR1_SHARED_PTR && !HAVE_BOOST_SHARED_PTR # include - -# if defined(HAVE_GCC_ATOMIC) -# define ATOMIC_INT int -# define ATOMIC_INC(x) ::__sync_add_and_fetch(&x, 1) -# define ATOMIC_DEC(x) ::__sync_sub_and_fetch(&x, 1) -# elif defined(HAVE_WIN_ATOMIC) -# if !defined(NOMINMAX) -# define NOMINMAX -# endif -# include -# define ATOMIC_INT volatile LONG -# define ATOMIC_INC(x) ::InterlockedIncrement(&x) -# define ATOMIC_DEC(x) ::InterlockedDecrement(&x) -# elif defined(HAVE_MAC_ATOMIC) -# include -# define ATOMIC_INT int32_t -# define ATOMIC_INC(x) ::OSAtomicIncrement32Barrier(&x) -# define ATOMIC_DEC(x) ::OSAtomicDecrement32Barrier(&x) -# elif defined(HAVE_IA64_ATOMIC) -# include -# define ATOMIC_INT int -# define ATOMIC_INC(x) ::__sync_add_and_fetch(&x, 1) -# define ATOMIC_DEC(x) ::__sync_sub_and_fetch(&x, 1) -# else -# define ATOMIC_INT int -# define ATOMIC_INC(x) (++x) -# define ATOMIC_DEC(x) (--x) -# endif +# include namespace TagLib { @@ -91,11 +64,11 @@ namespace TagLib // Counter base class. Provides a reference counter. - class CounterBase + class CounterBase : public RefCounter { public: CounterBase() : - refCount(1) + RefCounter() { } @@ -105,12 +78,12 @@ namespace TagLib void addref() { - ATOMIC_INC(refCount); + RefCounter::ref(); } void release() { - if(ATOMIC_DEC(refCount) == 0) { + if(RefCounter::deref()) { dispose(); delete this; } @@ -118,13 +91,10 @@ namespace TagLib long use_count() const { - return static_cast(refCount); + return RefCounter::count(); } virtual void dispose() = 0; - - private: - ATOMIC_INT refCount; }; // Counter impl class. Provides a dynamic deleter.