Author: tabish
Date: Tue Feb 3 00:55:09 2009
New Revision: 740171
URL: http://svn.apache.org/viewvc?rev=740171&view=rev
Log:
https://issues.apache.org/activemq/browse/AMQCPP-100
Add a smart pointer implementation to allow for sharing of command objects
without over copying them due to lifetime constraints on command elements.
Added:
activemq/activemq-cpp/trunk/src/main/decaf/lang/Pointer.h (with props)
activemq/activemq-cpp/trunk/src/test/decaf/lang/PointerTest.cpp (with
props)
activemq/activemq-cpp/trunk/src/test/decaf/lang/PointerTest.h (with props)
Modified:
activemq/activemq-cpp/trunk/src/test/Makefile.am
activemq/activemq-cpp/trunk/src/test/testRegistry.cpp
Added: activemq/activemq-cpp/trunk/src/main/decaf/lang/Pointer.h
URL:
http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/main/decaf/lang/Pointer.h?rev=740171&view=auto
==============================================================================
--- activemq/activemq-cpp/trunk/src/main/decaf/lang/Pointer.h (added)
+++ activemq/activemq-cpp/trunk/src/main/decaf/lang/Pointer.h Tue Feb 3
00:55:09 2009
@@ -0,0 +1,228 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _DECAF_LANG_POINTER_H_
+#define _DECAF_LANG_POINTER_H_
+
+#include <decaf/util/Config.h>
+#include <decaf/lang/exceptions/NullPointerException.h>
+#include <decaf/util/concurrent/atomic/AtomicInteger.h>
+#include <memory>
+
+namespace decaf {
+namespace lang {
+
+ /**
+ * Decaf's implementation of a Smart Pointer that is a template on a Type
+ * and is Thread Safe.
+ */
+ template< typename T >
+ class DECAF_API Pointer {
+ private:
+
+ T* value;
+ decaf::util::concurrent::atomic::AtomicInteger* refCount;
+
+ public:
+
+ typedef T* StoredType; // the type of the object we point to
+ typedef T* PointerType; // type returned by operator->
+ typedef T& ReferenceType; // type returned by operator*
+
+ public:
+
+ /**
+ * Default Constructor
+ *
+ * Initialized the contained pointer to NULL, using the -> operator
+ * results in an exception unless reset to contain a real value.
+ */
+ Pointer() : value( NULL ), refCount( new
decaf::util::concurrent::atomic::AtomicInteger( 1 ) ) {}
+
+ /**
+ * Explicit Constructor, creates a Pointer that contains value with a
+ * single reference. This object now has ownership until a call to
release.
+ *
+ * @param value - instance of the type we are containing here.
+ */
+ explicit Pointer( const StoredType& value ) :
+ value( value ), refCount( new
decaf::util::concurrent::atomic::AtomicInteger( 1 ) ) {
+ }
+
+ /**
+ * Copy constructor. Copies the value contained in the pointer to the
new
+ * instance and increments the reference counter.
+ */
+ Pointer( const Pointer<T>& value ) throw() : value( value.value ),
refCount( value.refCount ) {
+ this->refCount->incrementAndGet();
+ }
+
+ virtual ~Pointer() throw() {
+ if( this->refCount->decrementAndGet() == 0 ) {
+ delete this->value;
+ delete this->refCount;
+ }
+ }
+
+ /**
+ * Resets the Pointer to hold the new value. Before the new value is
stored
+ * reset checks if the old value should be destroyed and if so calls
delete.
+ * Call reset with a value of NULL is supported and acts to set this
Pointer
+ * to a NULL pointer.
+ *
+ * @param value - The new value to contain.
+ */
+ void reset( T* value ) {
+ Pointer( value ).swap( *this );
+ }
+
+ /**
+ * Gets the real pointer that is contained within this Pointer. This
is
+ * not really safe since the caller could delete or alter the pointer
but
+ * it mimics the STL auto_ptr and gives access in cases where the
caller
+ * absolutely needs the real Pointer. Use at your own risk.
+ *
+ * @return the contained pointer.
+ */
+ PointerType get() const {
+ return this->value;
+ }
+
+ /**
+ * Exception Safe Swap Function
+ * @param value - the value to swap with this.
+ */
+ void swap( Pointer<T>& value ) throw() {
+ std::swap( this->value, value.value );
+ std::swap( this->refCount, value.refCount );
+ }
+
+ /**
+ * Assigns the value of right to this Pointer and increments the
reference Count.
+ * @param right - Pointer on the right hand side of an operator= call
to this.
+ */
+ Pointer& operator= ( const Pointer<T>& right ) throw() {
+ if( this == &right ) {
+ return *this;
+ }
+
+ Pointer temp( right );
+ temp.swap( *this );
+ return *this;
+ }
+
+ /**
+ * Dereference Operator, returns a reference to the Contained value.
This
+ * method throws an NullPointerException if the contained value is
NULL.
+ *
+ * @return reference to the contained pointer.
+ * @throws NullPointerException if the contained value is Null
+ */
+ ReferenceType operator*() {
+ if( this->value == NULL ) {
+ throw decaf::lang::exceptions::NullPointerException(
+ __FILE__, __LINE__, "Pointer operator& - Pointee is NULL."
);
+ }
+
+ return *( this->value );
+ }
+ ReferenceType operator*() const {
+ if( this->value == NULL ) {
+ throw decaf::lang::exceptions::NullPointerException(
+ __FILE__, __LINE__, "Pointer operator& - Pointee is NULL."
);
+ }
+
+ return *( this->value );
+ }
+
+ /**
+ * Indirection Operator, returns a pointer to the Contained value.
This
+ * method throws an NullPointerException if the contained value is
NULL.
+ *
+ * @return reference to the contained pointer.
+ * @throws NullPointerException if the contained value is Null
+ */
+ PointerType operator->() {
+ if( this->value == NULL ) {
+ throw decaf::lang::exceptions::NullPointerException(
+ __FILE__, __LINE__, "Pointer operator-> - Pointee is
NULL." );
+ }
+ return this->value;
+ }
+ PointerType operator->() const {
+ if( this->value == NULL ) {
+ throw decaf::lang::exceptions::NullPointerException(
+ __FILE__, __LINE__, "Pointer operator-> - Pointee is
NULL." );
+ }
+ return this->value;
+ }
+
+ bool operator!() const {
+ return this->value == NULL;
+ }
+
+ inline friend bool operator==( const Pointer& left, const T* right ) {
+ return left.get() == right;
+ }
+
+ inline friend bool operator==( const T* left, const Pointer& right ) {
+ return left == right.get();
+ }
+
+ inline friend bool operator!=( const Pointer& left, const T* right ) {
+ return left.get() != right;
+ }
+
+ inline friend bool operator!=( const T* left, const Pointer& right ) {
+ return left != right.get();
+ }
+
+ template< typename U >
+ bool operator==( const Pointer<U>& right ) const {
+ return this->value == right.get();
+ }
+
+ template< typename U >
+ bool operator!=( const Pointer<U>& right ) const {
+ return !( this->value == right.get() );
+ }
+
+ };
+
+}}
+
+////////////////////////////////////////////////////////////////////////////////
+namespace std{
+
+ /**
+ * An override of the less function object so that the Pointer objects
+ * can be stored in STL Maps, etc.
+ */
+ template< typename T >
+ struct less< decaf::lang::Pointer<T> > :
+ public binary_function< decaf::lang::Pointer<T>,
+ decaf::lang::Pointer<T>, bool>
+ {
+ bool operator()( const decaf::lang::Pointer<T>& left,
+ const decaf::lang::Pointer<T>& right ) const
+ {
+ return less<T*>()( left.get(), right.get() );
+ }
+ };
+}
+
+#endif /*_DECAF_LANG_POINTER_H_*/
Propchange: activemq/activemq-cpp/trunk/src/main/decaf/lang/Pointer.h
------------------------------------------------------------------------------
svn:eol-style = native
Modified: activemq/activemq-cpp/trunk/src/test/Makefile.am
URL:
http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/test/Makefile.am?rev=740171&r1=740170&r2=740171&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/src/test/Makefile.am (original)
+++ activemq/activemq-cpp/trunk/src/test/Makefile.am Tue Feb 3 00:55:09 2009
@@ -75,6 +75,7 @@
decaf/lang/IntegerTest.cpp \
decaf/lang/LongTest.cpp \
decaf/lang/MathTest.cpp \
+ decaf/lang/PointerTest.cpp \
decaf/lang/ShortTest.cpp \
decaf/lang/SystemTest.cpp \
decaf/lang/ThreadTest.cpp \
@@ -164,17 +165,18 @@
decaf/internal/net/URIEncoderDecoderTest.h \
decaf/internal/net/URIHelperTest.h \
decaf/lang/ByteTest.h \
- decaf/lang/CharacterTest.h \
decaf/lang/BooleanTest.h \
- decaf/lang/ShortTest.h \
- decaf/lang/IntegerTest.h \
- decaf/lang/LongTest.h \
- decaf/lang/FloatTest.h \
+ decaf/lang/CharacterTest.h \
decaf/lang/DoubleTest.h \
- decaf/lang/ThreadTest.h \
decaf/lang/ExceptionTest.h \
+ decaf/lang/FloatTest.h \
+ decaf/lang/IntegerTest.h \
+ decaf/lang/LongTest.h \
decaf/lang/MathTest.h \
+ decaf/lang/PointerTest.h \
+ decaf/lang/ShortTest.h \
decaf/lang/SystemTest.h \
+ decaf/lang/ThreadTest.h \
decaf/io/FilterInputStreamTest.h \
decaf/io/FilterOutputStreamTest.h \
decaf/io/BufferedInputStreamTest.h \
Added: activemq/activemq-cpp/trunk/src/test/decaf/lang/PointerTest.cpp
URL:
http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/test/decaf/lang/PointerTest.cpp?rev=740171&view=auto
==============================================================================
--- activemq/activemq-cpp/trunk/src/test/decaf/lang/PointerTest.cpp (added)
+++ activemq/activemq-cpp/trunk/src/test/decaf/lang/PointerTest.cpp Tue Feb 3
00:55:09 2009
@@ -0,0 +1,271 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "PointerTest.h"
+
+#include <decaf/lang/Pointer.h>
+
+#include <map>
+#include <string>
+
+using namespace std;
+using namespace decaf;
+using namespace decaf::lang;
+
+////////////////////////////////////////////////////////////////////////////////
+class TestClassBase {
+public:
+
+ virtual ~TestClassBase(){}
+
+ virtual std::string returnHello() = 0;
+
+};
+
+////////////////////////////////////////////////////////////////////////////////
+class TestClassA : public TestClassBase {
+public:
+
+ virtual ~TestClassA() {
+ //std::cout << std::endl << "TestClassA - Destructor" << std::endl;
+ }
+
+ std::string returnHello() {
+ return "Hello";
+ }
+
+};
+
+////////////////////////////////////////////////////////////////////////////////
+class TestClassB : public TestClassBase {
+public:
+
+ virtual ~TestClassB() {
+ //std::cout << std::endl << "TestClassB - Destructor" << std::endl;
+ }
+
+ std::string returnHello() {
+ return "GoodBye";
+ }
+
+};
+
+////////////////////////////////////////////////////////////////////////////////
+class SomeOtherClass {
+public:
+
+};
+
+////////////////////////////////////////////////////////////////////////////////
+void PointerTest::testBasics() {
+
+ TestClassA* thePointer = new TestClassA();
+
+ // Test Null Initialize
+ Pointer<TestClassA> nullPointer;
+ CPPUNIT_ASSERT( nullPointer.get() == NULL );
+
+ // Test Value Constructor
+ Pointer<TestClassA> pointer( thePointer );
+ CPPUNIT_ASSERT( pointer.get() == thePointer );
+
+ // Test Copy Constructor
+ Pointer<TestClassA> ctorCopy( pointer );
+ CPPUNIT_ASSERT( ctorCopy.get() == thePointer );
+
+ // Test Assignment
+ Pointer<TestClassA> copy = pointer;
+ CPPUNIT_ASSERT( copy.get() == thePointer );
+
+ CPPUNIT_ASSERT( ( *pointer ).returnHello() == "Hello" );
+ CPPUNIT_ASSERT( pointer->returnHello() == "Hello" );
+
+ copy.reset( NULL );
+ CPPUNIT_ASSERT( copy.get() == NULL );
+}
+
+////////////////////////////////////////////////////////////////////////////////
+template<typename T>
+void ConstReferenceMethod( const Pointer<T>& pointer ) {
+
+ Pointer<T> copy = pointer;
+ CPPUNIT_ASSERT( copy.get() != NULL );
+}
+
+////////////////////////////////////////////////////////////////////////////////
+template<typename T>
+void ReferenceMethod( Pointer<T>& pointer ) {
+
+ pointer.reset( NULL );
+ CPPUNIT_ASSERT( pointer.get() == NULL );
+}
+
+////////////////////////////////////////////////////////////////////////////////
+Pointer<TestClassA> ReturnByValue() {
+
+ Pointer<TestClassA> pointer( new TestClassA );
+ CPPUNIT_ASSERT( pointer.get() != NULL );
+ return pointer;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+const Pointer<TestClassA>& ReturnByConstReference() {
+
+ static Pointer<TestClassA> pointer( new TestClassA );
+ CPPUNIT_ASSERT( pointer.get() != NULL );
+ return pointer;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void PointerTest::testAssignment() {
+
+ TestClassA* thePointerA = new TestClassA();
+ TestClassB* thePointerB = new TestClassB();
+
+ Pointer<TestClassBase> pointer;
+ CPPUNIT_ASSERT( pointer.get() == NULL );
+
+ pointer.reset( thePointerA );
+ CPPUNIT_ASSERT( pointer.get() == thePointerA );
+
+ pointer.reset( thePointerB );
+ CPPUNIT_ASSERT( pointer.get() == thePointerB );
+
+ // Doing this however won't compile.
+ // SomeOtherClass other;
+ // pointer.reset( &other );
+
+ Pointer<TestClassA> pointer1( new TestClassA() );
+ Pointer<TestClassA> pointer2 = pointer1;
+ Pointer<TestClassA> pointer3 = pointer2;
+
+ CPPUNIT_ASSERT( pointer1.get() == pointer2.get() );
+ CPPUNIT_ASSERT( pointer2.get() == pointer3.get() );
+
+ pointer3.reset( NULL );
+ CPPUNIT_ASSERT( pointer1.get() != NULL );
+ CPPUNIT_ASSERT( pointer2.get() != NULL );
+ CPPUNIT_ASSERT( pointer3.get() == NULL );
+
+ ConstReferenceMethod( pointer1 );
+ ReferenceMethod( pointer2 );
+ CPPUNIT_ASSERT( pointer2.get() == NULL );
+
+ ReturnByValue();
+
+ {
+ Pointer<TestClassA> copy = ReturnByValue();
+ }
+
+ {
+ Pointer<TestClassA> copy = ReturnByConstReference();
+ }
+
+ ReturnByConstReference();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void PointerTest::testComparisons() {
+
+ Pointer<TestClassBase> pointer1( new TestClassA );
+ Pointer<TestClassBase> pointer2( new TestClassB );
+
+ TestClassA* raw1 = new TestClassA;
+
+ CPPUNIT_ASSERT( ( pointer1 == pointer2 ) == false );
+ CPPUNIT_ASSERT( ( pointer1 != pointer2 ) == true );
+
+ CPPUNIT_ASSERT( ( pointer1 == raw1 ) == false );
+ CPPUNIT_ASSERT( ( pointer1 != raw1 ) == true );
+ CPPUNIT_ASSERT( ( raw1 == pointer2 ) == false );
+ CPPUNIT_ASSERT( ( raw1 != pointer2 ) == true );
+
+ delete raw1;
+
+ Pointer<TestClassBase> pointer3( new TestClassA );
+ Pointer<TestClassA> pointer4( new TestClassA );
+
+ CPPUNIT_ASSERT( ( pointer3 == pointer4 ) == false );
+ CPPUNIT_ASSERT( ( pointer3 != pointer4 ) == true );
+
+ CPPUNIT_ASSERT( pointer1 != NULL );
+ CPPUNIT_ASSERT( !pointer1 == false );
+ CPPUNIT_ASSERT( !!pointer1 == true );
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void PointerTest::testThreaded1() {
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void PointerTest::testThreaded2() {
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void PointerTest::testOperators() {
+
+ Pointer<TestClassBase> pointer1( new TestClassA );
+ Pointer<TestClassBase> pointer2( new TestClassB );
+ Pointer<TestClassBase> pointer3;
+
+ CPPUNIT_ASSERT( pointer1->returnHello() == "Hello" );
+ CPPUNIT_ASSERT( pointer2->returnHello() == "GoodBye" );
+
+ CPPUNIT_ASSERT( ( *pointer1 ).returnHello() == "Hello" );
+ CPPUNIT_ASSERT( ( *pointer2 ).returnHello() == "GoodBye" );
+
+ CPPUNIT_ASSERT_THROW_MESSAGE(
+ "operator* on a NULL Should Throw a NullPointerException",
+ ( *pointer3 ).returnHello(),
+ decaf::lang::exceptions::NullPointerException );
+ CPPUNIT_ASSERT_THROW_MESSAGE(
+ "operator-> on a NULL Should Throw a NullPointerException",
+ pointer3->returnHello(),
+ decaf::lang::exceptions::NullPointerException );
+
+ pointer2.reset( NULL );
+
+ CPPUNIT_ASSERT_THROW_MESSAGE(
+ "operator* on a NULL Should Throw a NullPointerException",
+ ( *pointer2 ).returnHello(),
+ decaf::lang::exceptions::NullPointerException );
+ CPPUNIT_ASSERT_THROW_MESSAGE(
+ "operator-> on a NULL Should Throw a NullPointerException",
+ pointer2->returnHello(),
+ decaf::lang::exceptions::NullPointerException );
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void PointerTest::testSTLContainers() {
+
+ Pointer<TestClassBase> pointer1( new TestClassA );
+ Pointer<TestClassBase> pointer2( new TestClassB );
+ Pointer<TestClassBase> pointer3( pointer2 );
+
+ CPPUNIT_ASSERT( pointer1.get() != NULL );
+ CPPUNIT_ASSERT( pointer2.get() != NULL );
+
+ std::map< Pointer<TestClassBase>, std::string > testMap;
+
+ testMap.insert( std::make_pair( pointer1, "Bob" ) );
+ testMap.insert( std::make_pair( pointer2, "Steve" ) );
+ testMap.insert( std::make_pair( pointer3, "Steve" ) );
+ testMap.insert( std::make_pair( Pointer<TestClassBase>( new TestClassA ),
"Fred" ) );
+
+ CPPUNIT_ASSERT( testMap.find( pointer1 ) != testMap.end() );
+ CPPUNIT_ASSERT( testMap.find( pointer2 ) != testMap.end() );
+}
Propchange: activemq/activemq-cpp/trunk/src/test/decaf/lang/PointerTest.cpp
------------------------------------------------------------------------------
svn:eol-style = native
Added: activemq/activemq-cpp/trunk/src/test/decaf/lang/PointerTest.h
URL:
http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/test/decaf/lang/PointerTest.h?rev=740171&view=auto
==============================================================================
--- activemq/activemq-cpp/trunk/src/test/decaf/lang/PointerTest.h (added)
+++ activemq/activemq-cpp/trunk/src/test/decaf/lang/PointerTest.h Tue Feb 3
00:55:09 2009
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _DECAF_LANG_POINTERTEST_H_
+#define _DECAF_LANG_POINTERTEST_H_
+
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace decaf {
+namespace lang {
+
+ class PointerTest : public CppUnit::TestFixture {
+
+ CPPUNIT_TEST_SUITE( PointerTest );
+ CPPUNIT_TEST( testBasics );
+ CPPUNIT_TEST( testAssignment );
+ CPPUNIT_TEST( testComparisons );
+ CPPUNIT_TEST( testThreaded1 );
+ CPPUNIT_TEST( testThreaded2 );
+ CPPUNIT_TEST( testOperators );
+ CPPUNIT_TEST( testSTLContainers );
+ CPPUNIT_TEST_SUITE_END();
+
+ public:
+
+ PointerTest() {}
+ virtual ~PointerTest() {}
+
+ void testBasics();
+ void testAssignment();
+ void testComparisons();
+ void testThreaded1();
+ void testThreaded2();
+ void testOperators();
+ void testSTLContainers();
+
+ };
+
+}}
+
+#endif /*_DECAF_LANG_POINTERTEST_H_*/
Propchange: activemq/activemq-cpp/trunk/src/test/decaf/lang/PointerTest.h
------------------------------------------------------------------------------
svn:eol-style = native
Modified: activemq/activemq-cpp/trunk/src/test/testRegistry.cpp
URL:
http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/src/test/testRegistry.cpp?rev=740171&r1=740170&r2=740171&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/src/test/testRegistry.cpp (original)
+++ activemq/activemq-cpp/trunk/src/test/testRegistry.cpp Tue Feb 3 00:55:09
2009
@@ -68,14 +68,14 @@
//CPPUNIT_TEST_SUITE_REGISTRATION(
activemq::cmsutil::DynamicDestinationResolverTest );
//#include <activemq/cmsutil/SessionPoolTest.h>
//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::cmsutil::SessionPoolTest );
-
-#include <activemq/core/ActiveMQConnectionFactoryTest.h>
-CPPUNIT_TEST_SUITE_REGISTRATION( activemq::core::ActiveMQConnectionFactoryTest
);
-#include <activemq/core/ActiveMQConnectionTest.h>
-CPPUNIT_TEST_SUITE_REGISTRATION( activemq::core::ActiveMQConnectionTest );
-#include <activemq/core/ActiveMQSessionTest.h>
-CPPUNIT_TEST_SUITE_REGISTRATION( activemq::core::ActiveMQSessionTest );
-
+//
+//#include <activemq/core/ActiveMQConnectionFactoryTest.h>
+//CPPUNIT_TEST_SUITE_REGISTRATION(
activemq::core::ActiveMQConnectionFactoryTest );
+//#include <activemq/core/ActiveMQConnectionTest.h>
+//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::core::ActiveMQConnectionTest );
+//#include <activemq/core/ActiveMQSessionTest.h>
+//CPPUNIT_TEST_SUITE_REGISTRATION( activemq::core::ActiveMQSessionTest );
+//
//#include <activemq/transport/correlator/ResponseCorrelatorTest.h>
//CPPUNIT_TEST_SUITE_REGISTRATION(
activemq::transport::correlator::ResponseCorrelatorTest );
//
@@ -176,6 +176,8 @@
//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::lang::ThreadTest );
//#include <decaf/lang/SystemTest.h>
//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::lang::SystemTest );
+#include <decaf/lang/PointerTest.h>
+CPPUNIT_TEST_SUITE_REGISTRATION( decaf::lang::PointerTest );
//
//#include <decaf/net/SocketFactoryTest.h>
//CPPUNIT_TEST_SUITE_REGISTRATION( decaf::net::SocketFactoryTest );