Author: carnold
Date: Tue Feb 12 18:18:10 2008
New Revision: 627223
URL: http://svn.apache.org/viewvc?rev=627223&view=rev
Log:
LOGCXX-235: Add ObjectPtrT::exchange
Modified:
logging/log4cxx/trunk/src/main/include/log4cxx/helpers/objectptr.h
Modified: logging/log4cxx/trunk/src/main/include/log4cxx/helpers/objectptr.h
URL:
http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/include/log4cxx/helpers/objectptr.h?rev=627223&r1=627222&r2=627223&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/main/include/log4cxx/helpers/objectptr.h
(original)
+++ logging/log4cxx/trunk/src/main/include/log4cxx/helpers/objectptr.h Tue Feb
12 18:18:10 2008
@@ -113,10 +113,9 @@
if (newPtr != 0) {
newPtr->addRef();
}
- T** pp = &p;
- void* oldPtr = ObjectPtrBase::exchange((void**) pp, newPtr);
+ T* oldPtr = exchange(newPtr);
if (oldPtr != 0) {
- ((T*) oldPtr)->releaseRef();
+ oldPtr->releaseRef();
}
return *this;
}
@@ -127,10 +126,9 @@
// throws IllegalArgumentException if null != 0
//
ObjectPtrBase::checkNull(null);
- T** pp = &p;
- void* oldPtr = ObjectPtrBase::exchange((void**) pp, 0);
+ T* oldPtr = exchange(0);
if (oldPtr != 0) {
- ((T*) oldPtr)->releaseRef();
+ oldPtr->releaseRef();
}
return *this;
}
@@ -139,10 +137,9 @@
if (p1 != 0) {
p1->addRef();
}
- T** pp = &p;
- void* oldPtr = ObjectPtrBase::exchange((void**) pp, p1);
+ T* oldPtr = exchange(p1);
if (oldPtr != 0) {
- ((T*)oldPtr)->releaseRef();
+ oldPtr->releaseRef();
}
return *this;
}
@@ -151,10 +148,9 @@
if (p1 != 0) {
p1->addRef();
}
- T** pp = &p;
- void* oldPtr = ObjectPtrBase::exchange((void**) pp,
const_cast<T*>(p1));
+ T* oldPtr = exchange(p1);
if (oldPtr != 0) {
- ((T*)oldPtr)->releaseRef();
+ oldPtr->releaseRef();
}
return *this;
}
@@ -189,6 +185,11 @@
}
return 0;
}
+ T* exchange(const T* newValue) {
+ return static_cast<T*>(ObjectPtrBase::exchange(
+ reinterpret_cast<void**>(&p),
+ const_cast<T*>(newValue)));
+ }
};