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 2010/12/09 20:09:48 UTC

svn commit: r1044092 - in /activemq/activemq-cpp/trunk/activemq-cpp/src: main/decaf/lang/ArrayPointer.h test/decaf/lang/ArrayPointerTest.cpp test/decaf/lang/ArrayPointerTest.h

Author: tabish
Date: Thu Dec  9 19:09:47 2010
New Revision: 1044092

URL: http://svn.apache.org/viewvc?rev=1044092&view=rev
Log:
Add an optional constructor to all for array init using a specified value.

Modified:
    activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/lang/ArrayPointer.h
    activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/lang/ArrayPointerTest.cpp
    activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/lang/ArrayPointerTest.h

Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/lang/ArrayPointer.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/lang/ArrayPointer.h?rev=1044092&r1=1044091&r2=1044092&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/lang/ArrayPointer.h (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/lang/ArrayPointer.h Thu Dec  9 19:09:47 2010
@@ -25,6 +25,7 @@
 #include <decaf/lang/exceptions/IllegalArgumentException.h>
 #include <decaf/util/concurrent/atomic/AtomicRefCounter.h>
 #include <decaf/util/Comparator.h>
+#include <decaf/util/Arrays.h>
 #include <memory>
 #include <typeinfo>
 #include <algorithm>
@@ -121,6 +122,36 @@ namespace lang {
         }
 
         /**
+         * Create a new ArrayPointer instance and allocates an internal array that is sized
+         * using the passed in size value.  The array elements are initialized with the given
+         * value.
+         *
+         * @param size
+         *      The size of the array to allocate for this ArrayPointer instance.
+         * @param fillWith
+         *      The value to initialize each element of the newly allocated array with.
+         */
+        ArrayPointer( int size, const T& fillWith ) :
+            REFCOUNTER(), array( NULL ), onDelete( onDeleteFunc ) {
+
+            if( size == 0 ) {
+                return;
+            }
+
+            try{
+                T* value = new T[size];
+                decaf::util::Arrays::fill( value, size, 0, size, fillWith );
+                this->array = new ArrayData( value, size );
+            } catch( std::exception& ex ) {
+                REFCOUNTER::release();
+                throw ex;
+            } catch(...) {
+                REFCOUNTER::release();
+                throw std::bad_alloc();
+            }
+        }
+
+        /**
          * Explicit Constructor, creates an ArrayPointer that contains value with a
          * single reference.  This object now has ownership until a call to release.
          *

Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/lang/ArrayPointerTest.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/lang/ArrayPointerTest.cpp?rev=1044092&r1=1044091&r2=1044092&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/lang/ArrayPointerTest.cpp (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/lang/ArrayPointerTest.cpp Thu Dec  9 19:09:47 2010
@@ -176,6 +176,41 @@ void ArrayPointerTest::testBasics() {
 }
 
 ////////////////////////////////////////////////////////////////////////////////
+void ArrayPointerTest::testConstructor1() {
+
+    const int SIZE = 50;
+
+    ArrayPointer<int> array( SIZE );
+
+    CPPUNIT_ASSERT_EQUAL( SIZE, array.length() );
+    CPPUNIT_ASSERT( array.get() != NULL );
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void ArrayPointerTest::testConstructor2() {
+
+    const int SIZE = 50;
+
+    ArrayPointer<bool> trueArray( SIZE, true );
+
+    CPPUNIT_ASSERT_EQUAL( SIZE, trueArray.length() );
+    CPPUNIT_ASSERT( trueArray.get() != NULL );
+
+    for( int ix = 0; ix < SIZE; ix++ ) {
+        CPPUNIT_ASSERT_EQUAL( true, trueArray[ix] );
+    }
+
+    ArrayPointer<bool> falseArray( SIZE, true );
+
+    CPPUNIT_ASSERT_EQUAL( SIZE, falseArray.length() );
+    CPPUNIT_ASSERT( falseArray.get() != NULL );
+
+    for( int ix = 0; ix < SIZE; ix++ ) {
+        CPPUNIT_ASSERT_EQUAL( true, falseArray[ix] );
+    }
+}
+
+////////////////////////////////////////////////////////////////////////////////
 void ArrayPointerTest::testClone() {
 
     const int SIZE = 50;

Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/lang/ArrayPointerTest.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/lang/ArrayPointerTest.h?rev=1044092&r1=1044091&r2=1044092&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/lang/ArrayPointerTest.h (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/test/decaf/lang/ArrayPointerTest.h Thu Dec  9 19:09:47 2010
@@ -28,6 +28,8 @@ namespace lang {
 
         CPPUNIT_TEST_SUITE( ArrayPointerTest );
         CPPUNIT_TEST( testBasics );
+        CPPUNIT_TEST( testConstructor1 );
+        CPPUNIT_TEST( testConstructor2 );
         CPPUNIT_TEST( testClone );
         CPPUNIT_TEST( testAssignment );
         CPPUNIT_TEST( testComparisons );
@@ -45,6 +47,8 @@ namespace lang {
         virtual ~ArrayPointerTest() {}
 
         void testBasics();
+        void testConstructor1();
+        void testConstructor2();
         void testClone();
         void testAssignment();
         void testComparisons();