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)));
+                }
 
         };
 


Reply via email to