You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ta...@apache.org on 2009/11/17 20:35:44 UTC
svn commit: r881454 - in
/activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf: lang/Pointer.h
lang/Thread.h util/concurrent/Mutex.h util/concurrent/locks/ReentrantLock.h
Author: tabish
Date: Tue Nov 17 19:35:43 2009
New Revision: 881454
URL: http://svn.apache.org/viewvc?rev=881454&view=rev
Log:
Allow the Pointer class to operate on incomplete types. Change the classes that have Pimpl data to use the Pointer.
Modified:
activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/lang/Pointer.h
activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/lang/Thread.h
activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/Mutex.h
activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/locks/ReentrantLock.h
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/lang/Pointer.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/lang/Pointer.h?rev=881454&r1=881453&r2=881454&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/lang/Pointer.h (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/lang/Pointer.h Tue Nov 17 19:35:43 2009
@@ -98,8 +98,15 @@
class Pointer : public REFCOUNTER {
private:
+ typedef void (*deletionFuncPtr)(T* p);
+
+ private:
+
T* value;
+ // Pointer to our internal delete function, allows incompletes.
+ deletionFuncPtr onDelete;
+
public:
typedef T* PointerType; // type returned by operator->
@@ -114,7 +121,7 @@
* Initialized the contained pointer to NULL, using the -> operator
* results in an exception unless reset to contain a real value.
*/
- Pointer() : REFCOUNTER(), value( NULL ) {}
+ Pointer() : REFCOUNTER(), value( NULL ), onDelete( onDeleteFunc ) {}
/**
* Explicit Constructor, creates a Pointer that contains value with a
@@ -122,21 +129,23 @@
*
* @param value - instance of the type we are containing here.
*/
- explicit Pointer( const PointerType value ) : REFCOUNTER(), value( value ) {
+ explicit Pointer( const PointerType value ) : REFCOUNTER(), value( value ), onDelete( onDeleteFunc ) {
}
/**
* Copy constructor. Copies the value contained in the pointer to the new
* instance and increments the reference counter.
*/
- Pointer( const Pointer& value ) throw() : REFCOUNTER( value ), value( value.value ) {}
+ Pointer( const Pointer& value ) throw() :
+ REFCOUNTER( value ), value( value.value ), onDelete( onDeleteFunc ) {}
/**
* Copy constructor. Copies the value contained in the pointer to the new
* instance and increments the reference counter.
*/
template< typename T1, typename R1 >
- Pointer( const Pointer<T1, R1>& value ) throw() : REFCOUNTER( value ), value( value.get() ) {}
+ Pointer( const Pointer<T1, R1>& value ) throw() :
+ REFCOUNTER( value ), value( value.get() ), onDelete( onDeleteFunc ) {}
/**
* Static Cast constructor. Copies the value contained in the pointer to the new
@@ -147,7 +156,7 @@
*/
template< typename T1, typename R1 >
Pointer( const Pointer<T1, R1>& value, const STATIC_CAST_TOKEN& ) throw() :
- REFCOUNTER( value ), value( static_cast<T*>( value.get() ) ) {
+ REFCOUNTER( value ), value( static_cast<T*>( value.get() ) ), onDelete( onDeleteFunc ) {
}
/**
@@ -162,7 +171,7 @@
template< typename T1, typename R1 >
Pointer( const Pointer<T1, R1>& value, const DYNAMIC_CAST_TOKEN& )
throw( decaf::lang::exceptions::ClassCastException ) :
- REFCOUNTER( value ), value( dynamic_cast<T*>( value.get() ) ) {
+ REFCOUNTER( value ), value( dynamic_cast<T*>( value.get() ) ), onDelete( onDeleteFunc ) {
if( this->value == NULL ) {
// Remove the reference we took in the Reference Counter's ctor since we
@@ -177,7 +186,7 @@
virtual ~Pointer() throw() {
if( REFCOUNTER::release() == true ) {
- delete this->value;
+ onDelete( this->value );
}
}
@@ -340,6 +349,14 @@
Pointer<T1, CounterType> staticCast() const {
return Pointer<T1, CounterType>( *this, STATIC_CAST_TOKEN() );
}
+
+ private:
+
+ // Internal Static deletion function.
+ static void onDeleteFunc(T* value) {
+ delete value;
+ }
+
};
////////////////////////////////////////////////////////////////////////////
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/lang/Thread.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/lang/Thread.h?rev=881454&r1=881453&r2=881454&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/lang/Thread.h (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/lang/Thread.h Tue Nov 17 19:35:43 2009
@@ -23,8 +23,8 @@
#include <decaf/lang/exceptions/RuntimeException.h>
#include <decaf/lang/Exception.h>
#include <decaf/lang/Runnable.h>
+#include <decaf/lang/Pointer.h>
#include <decaf/util/Config.h>
-#include <memory>
namespace decaf{
namespace util{
@@ -70,7 +70,7 @@
/**
* The internal data necessary to manage a Thread instance.
*/
- std::auto_ptr<ThreadProperties> properties;
+ decaf::lang::Pointer<ThreadProperties> properties;
public:
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/Mutex.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/Mutex.h?rev=881454&r1=881453&r2=881454&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/Mutex.h (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/Mutex.h Tue Nov 17 19:35:43 2009
@@ -20,11 +20,10 @@
#include <decaf/util/concurrent/Synchronizable.h>
#include <decaf/util/concurrent/Concurrent.h>
+#include <decaf/lang/Pointer.h>
#include <decaf/lang/Thread.h>
#include <decaf/util/Config.h>
-#include <memory>
-
namespace decaf{
namespace util{
namespace concurrent{
@@ -41,7 +40,7 @@
class DECAF_API Mutex : public Synchronizable {
private:
- std::auto_ptr<MutexProperties> properties;
+ decaf::lang::Pointer<MutexProperties> properties;
private:
Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/locks/ReentrantLock.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/locks/ReentrantLock.h?rev=881454&r1=881453&r2=881454&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/locks/ReentrantLock.h (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/util/concurrent/locks/ReentrantLock.h Tue Nov 17 19:35:43 2009
@@ -21,8 +21,7 @@
#include <decaf/util/Config.h>
#include <decaf/util/concurrent/locks/Lock.h>
-
-#include <memory>
+#include <decaf/lang/Pointer.h>
namespace decaf {
namespace util {
@@ -81,7 +80,7 @@
class DECAF_API ReentrantLock : public Lock {
private:
- std::auto_ptr<LockHandle> handle;
+ decaf::lang::Pointer<LockHandle> handle;
public: