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/05/12 15:33:34 UTC

svn commit: r943481 - in /activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/lang: ArrayPointer.h System.cpp System.h

Author: tabish
Date: Wed May 12 13:33:34 2010
New Revision: 943481

URL: http://svn.apache.org/viewvc?rev=943481&view=rev
Log:
Fix some issues and add a clone method to ArrayPointer.

Modified:
    activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/lang/ArrayPointer.h
    activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/lang/System.cpp
    activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/lang/System.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=943481&r1=943480&r2=943481&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 Wed May 12 13:33:34 2010
@@ -19,6 +19,7 @@
 #define _DECAF_LANG_ARRAYPOINTER_H_
 
 #include <decaf/util/Config.h>
+#include <decaf/lang/System.h>
 #include <decaf/lang/exceptions/NullPointerException.h>
 #include <decaf/lang/exceptions/IndexOutOfBoundsException.h>
 #include <decaf/lang/exceptions/IllegalArgumentException.h>
@@ -219,6 +220,23 @@ namespace lang {
         }
 
         /**
+         * Creates a new ArrayPointer instance that is a clone of the value contained in this
+         * ArrayPointer.
+         *
+         * @return an ArrayPointer that contains a copy of the data in this ArrayPointer.
+         */
+        ArrayPointer clone() {
+
+            if( this->array->length == 0 ){
+                return ArrayPointer();
+            }
+
+            ArrayPointer copy( this->array->length );
+            decaf::lang::System::arraycopy( this->array->value, 0, copy.get(), 0, this->array->length );
+            return copy;
+        }
+
+        /**
          * 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.
          */
@@ -263,7 +281,7 @@ namespace lang {
 
             return this->array->value[index];
         }
-        ReferenceType operator[]( int index ) const {
+        const ReferenceType operator[]( int index ) const {
             if( this->array->value == NULL ) {
                 throw decaf::lang::exceptions::NullPointerException(
                     __FILE__, __LINE__, "ArrayPointer operator& - Pointee is NULL." );
@@ -271,7 +289,7 @@ namespace lang {
 
             if( index < 0 || this->array->length <= index ) {
                 throw decaf::lang::exceptions::IndexOutOfBoundsException(
-                    __FILE__, __LINE__, "Array Index %d is out of bounds for this array.", *( this->array->length ) );
+                    __FILE__, __LINE__, "Array Index %d is out of bounds for this array.", this->array->length );
             }
 
             return this->array->value[index];

Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/lang/System.cpp
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/lang/System.cpp?rev=943481&r1=943480&r2=943481&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/lang/System.cpp (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/lang/System.cpp Wed May 12 13:33:34 2010
@@ -73,8 +73,7 @@ AprPool& System::getAprPool() {
 
 ////////////////////////////////////////////////////////////////////////////////
 void System::arraycopy( const unsigned char* src, std::size_t srcPos,
-                        unsigned char* dest, std::size_t destPos, std::size_t length )
-    throw( decaf::lang::exceptions::NullPointerException ){
+                        unsigned char* dest, std::size_t destPos, std::size_t length ) {
 
     if( src == NULL ) {
         throw NullPointerException(
@@ -95,7 +94,29 @@ void System::arraycopy( const unsigned c
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-void System::unsetenv( const std::string& name ) throw ( lang::Exception ) {
+void System::arraycopy( const int* src, std::size_t srcPos,
+                        int* dest, std::size_t destPos, std::size_t length ) {
+
+    if( src == NULL ) {
+        throw NullPointerException(
+            __FILE__, __LINE__, "Given Source Pointer was null." );
+    }
+
+    if( src == NULL ) {
+        throw NullPointerException(
+            __FILE__, __LINE__, "Given Source Pointer was null." );
+    }
+
+    // Now we try and copy, could still segfault.
+    if( src != dest ) {
+        ::memcpy( dest + destPos, src + srcPos, length * sizeof( int ) );
+    } else {
+        ::memmove( dest + destPos, src + srcPos, length * sizeof( int ) );
+    }
+}
+
+////////////////////////////////////////////////////////////////////////////////
+void System::unsetenv( const std::string& name ) {
 
     apr_status_t result = APR_SUCCESS;
 
@@ -115,7 +136,7 @@ void System::unsetenv( const std::string
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-std::string System::getenv( const std::string& name ) throw ( Exception ) {
+std::string System::getenv( const std::string& name ) {
 
     char* value = NULL;
     apr_status_t result = APR_SUCCESS;
@@ -145,8 +166,7 @@ std::string System::getenv( const std::s
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-void System::setenv( const std::string& name, const std::string& value )
-    throw ( lang::Exception ) {
+void System::setenv( const std::string& name, const std::string& value ) {
 
     apr_status_t result = APR_SUCCESS;
 
@@ -217,7 +237,7 @@ long long System::nanoTime() {
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-const Map<string, string>& System::getenv() throw ( Exception ) {
+const Map<string, string>& System::getenv() {
 
     static StlMap<string, string> values;
     values.clear();

Modified: activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/lang/System.h
URL: http://svn.apache.org/viewvc/activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/lang/System.h?rev=943481&r1=943480&r2=943481&view=diff
==============================================================================
--- activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/lang/System.h (original)
+++ activemq/activemq-cpp/trunk/activemq-cpp/src/main/decaf/lang/System.h Wed May 12 13:33:34 2010
@@ -58,44 +58,54 @@ namespace lang{
          * @throws NullPointerException if src or dest are NULL.
          */
         static void arraycopy( const unsigned char* src, std::size_t srcPos,
-                               unsigned char* dest, std::size_t destPos, std::size_t length )
-            throw( decaf::lang::exceptions::NullPointerException );
+                               unsigned char* dest, std::size_t destPos, std::size_t length );
+        static void arraycopy( const int* src, std::size_t srcPos,
+                               int* dest, std::size_t destPos, std::size_t length );
 
         /**
          * Enumerates the system environment and returns a map of env variable
          * names to the string values they hold.
+         *
          * @return A Map of all environment variables.
-         * @throw Exception if an error occurs
+         *
+         * @throw Exception if an error occurs while getting the Environment Map.
          */
-        static const util::Map<std::string, std::string>& getenv()
-            throw ( lang::Exception );
+        static const util::Map<std::string, std::string>& getenv();
 
         /**
          * Reads an environment value from the system and returns it as a
          * string object
-         * @param name - the env var to read
-         * @return a string with the value from the var or ""
+         *
+         * @param name
+         *      The environment variable to read.
+         *
+         * @return a string with the value from the variables or ""
+         *
          * @throws an Exception if an error occurs while reading the Env.
          */
-        static std::string getenv( const std::string& name )
-            throw ( lang::Exception );
+        static std::string getenv( const std::string& name );
 
         /**
-         * Clears a set env value if one is set.
-         * @param name - the env var to clear
-         * @throws an Exception if an error occurs while reading the Env.
+         * Clears a set environment value if one is set.
+         *
+         * @param name
+         *      The environment variables to clear.
+         *
+         * @throws an Exception if an error occurs while reading the environment.
          */
-        static void unsetenv( const std::string& name )
-            throw ( lang::Exception );
+        static void unsetenv( const std::string& name );
 
         /**
-         * Sets the specified system property to the value given
-         * @param name - name of the env val to set
-         * @param value - value to assign to name
-         * @throws an Exception if an error occurs
+         * Sets the specified system property to the value given.
+         *
+         * @param name
+         *      The name of the environment variables to set.
+         * @param value
+         *      The value to assign to name.
+         *
+         * @throws an Exception if an error occurs when setting the environment variable.
          */
-        static void setenv( const std::string& name, const std::string& value )
-            throw ( lang::Exception );
+        static void setenv( const std::string& name, const std::string& value );
 
         /**
          * Returns the current time in milliseconds. Note that while the unit of time of
@@ -136,7 +146,7 @@ namespace lang{
         static long long nanoTime();
 
         /**
-         * Returns the number of processors available for exection of Decaf Threads.
+         * Returns the number of processors available for execution of Decaf Threads.
          *
          * This value may change during a particular execution of a Decaf based application. Applications
          * that are sensitive to the number of available processors should therefore occasionally poll
@@ -152,12 +162,15 @@ namespace lang{
          * Enumerates the environment and return an array of strings
          * with the values.  Caller owns the array.  The array is terminated
          * by an element that holds the value NULL
-         * @returns a vector of env name=value paris.
+         *
+         * @returns a vector of environment name / value pairs.
          */
         static std::vector< std::string > getEnvArray();
 
         /**
          * Gets the one and only APR Pool instance
+         *
+         * @returns a reference to the global APR Pool.
          */
         static internal::AprPool& getAprPool();