You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by hw...@apache.org on 2010/03/09 23:34:00 UTC

svn commit: r921176 - in /subversion/trunk/subversion/bindings/javahl/native: Array.cpp Array.h StringArray.cpp StringArray.h

Author: hwright
Date: Tue Mar  9 22:34:00 2010
New Revision: 921176

URL: http://svn.apache.org/viewvc?rev=921176&view=rev
Log:
JavaHL: Create a new C++ class which represents a generic array of Java
objects.  Move the various collection parsing duties to this class, and make
the StringArray class inherit from it.

[ in subversion/bindings/javahl/ ]
* native/StringArray.h,
  native/StringArray.cpp
  (~StringArray): Don't destruct anything explicitly.
  (init): New.
  (StringArray): Use the parent constructor and then call the init function.

* native/Array.h,
  native/Array.cpp:
  New, copied and modified from StringArray.

Added:
    subversion/trunk/subversion/bindings/javahl/native/Array.cpp
      - copied, changed from r921141, subversion/trunk/subversion/bindings/javahl/native/StringArray.cpp
    subversion/trunk/subversion/bindings/javahl/native/Array.h
      - copied, changed from r921141, subversion/trunk/subversion/bindings/javahl/native/StringArray.h
Modified:
    subversion/trunk/subversion/bindings/javahl/native/StringArray.cpp
    subversion/trunk/subversion/bindings/javahl/native/StringArray.h

Copied: subversion/trunk/subversion/bindings/javahl/native/Array.cpp (from r921141, subversion/trunk/subversion/bindings/javahl/native/StringArray.cpp)
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/Array.cpp?p2=subversion/trunk/subversion/bindings/javahl/native/Array.cpp&p1=subversion/trunk/subversion/bindings/javahl/native/StringArray.cpp&r1=921141&r2=921176&rev=921176&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/StringArray.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/Array.cpp Tue Mar  9 22:34:00 2010
@@ -20,80 +20,71 @@
  * ====================================================================
  * @endcopyright
  *
- * @file StringArray.cpp
- * @brief Implementation of the class StringArray
+ * @file Array.cpp
+ * @brief Implementation of the class Array
  */
 
-#include "StringArray.h"
+#include "Array.h"
 #include "JNIUtil.h"
 #include "JNIStringHolder.h"
 #include <apr_tables.h>
 #include <apr_strings.h>
-#include "svn_path.h"
 #include <iostream>
 
-StringArray::~StringArray()
+Array::~Array()
 {
-  if (m_stringArray != NULL)
-    JNIUtil::getEnv()->DeleteLocalRef(m_stringArray);
-  if (m_stringCollection != NULL)
-    JNIUtil::getEnv()->DeleteLocalRef(m_stringCollection);
-}
-
-const apr_array_header_t *StringArray::array(const SVN::Pool &pool)
-{
-  apr_array_header_t *strings
-    = apr_array_make(pool.pool(), m_strings.size(), sizeof(char *));
-
-  std::vector<std::string>::const_iterator it;
-  for (it = m_strings.begin(); it < m_strings.end(); ++it)
+  if (m_objectArray != NULL)
     {
-      APR_ARRAY_PUSH(strings, const char *) = it->c_str();
-      if (JNIUtil::isExceptionThrown())
-        return NULL;
+      for (std::vector<jobject>::iterator it = m_objects.begin();
+            it < m_objects.end(); ++it)
+        {
+          JNIUtil::getEnv()->DeleteLocalRef(*it);
+          if (JNIUtil::isExceptionThrown())
+            return;
+        }
+      
+      JNIUtil::getEnv()->DeleteLocalRef(m_objectArray);
     }
-
-  return strings;
 }
 
-const std::vector<std::string> &StringArray::vector(void)
+const std::vector<jobject> &Array::vector(void)
 {
-  return m_strings;
+  return m_objects;
 }
 
-StringArray::StringArray(jobjectArray jstrings)
+void
+Array::init(jobjectArray jobjects)
 {
-  m_stringArray = jstrings;
-  m_stringCollection = NULL;
+  m_objectArray = jobjects;
 
-  if (jstrings != NULL)
+  if (jobjects != NULL)
     {
       JNIEnv *env = JNIUtil::getEnv();
-      jint arraySize = env->GetArrayLength(jstrings);
+      jint arraySize = env->GetArrayLength(jobjects);
       if (JNIUtil::isExceptionThrown())
         return;
 
       for (int i = 0; i < arraySize; ++i)
         {
-          jobject jstr = env->GetObjectArrayElement(jstrings, i);
+          jobject jobj = env->GetObjectArrayElement(jobjects, i);
           if (JNIUtil::isExceptionThrown())
             return;
 
-          JNIStringHolder str((jstring)jstr);
-          if (JNIUtil::isExceptionThrown())
-            return;
-
-          m_strings.push_back(std::string((const char *)str));
+          m_objects.push_back(jobj);
         }
     }
 }
 
-StringArray::StringArray(jobject jstringCollection)
+Array::Array(jobjectArray jobjects)
 {
-  m_stringArray = NULL;
-  m_stringCollection = jstringCollection;
+  init(jobjects);
+}
 
-  if (jstringCollection != NULL)
+Array::Array(jobject jobjectCollection)
+{
+  jobjectArray jobjects = NULL;
+
+  if (jobjectCollection != NULL)
     {
       JNIEnv *env = JNIUtil::getEnv();
 
@@ -108,32 +99,10 @@ StringArray::StringArray(jobject jstring
             return;
         }
 
-      jobjectArray jstrings = (jobjectArray) env->CallObjectMethod(
-                                               jstringCollection, mid_toArray);
+      jobjects = (jobjectArray) env->CallObjectMethod(jobjectCollection,
+                                                      mid_toArray);
 
-      jint arraySize = env->GetArrayLength(jstrings);
-      if (JNIUtil::isExceptionThrown())
-        return;
-
-      for (int i = 0; i < arraySize; ++i)
-        {
-          jobject jstr = env->GetObjectArrayElement(jstrings, i);
-          if (JNIUtil::isExceptionThrown())
-            return;
-
-          JNIStringHolder str((jstring)jstr);
-          if (JNIUtil::isExceptionThrown())
-            return;
-
-          m_strings.push_back(std::string((const char *)str));
-        }
-
-      JNIUtil::getEnv()->DeleteLocalRef(clazz);
-      if (JNIUtil::isExceptionThrown())
-        return;
-
-      JNIUtil::getEnv()->DeleteLocalRef(jstrings);
-      if (JNIUtil::isExceptionThrown())
-        return;
     }
+
+  init(jobjects);
 }

Copied: subversion/trunk/subversion/bindings/javahl/native/Array.h (from r921141, subversion/trunk/subversion/bindings/javahl/native/StringArray.h)
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/Array.h?p2=subversion/trunk/subversion/bindings/javahl/native/Array.h&p1=subversion/trunk/subversion/bindings/javahl/native/StringArray.h&r1=921141&r2=921176&rev=921176&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/StringArray.h (original)
+++ subversion/trunk/subversion/bindings/javahl/native/Array.h Tue Mar  9 22:34:00 2010
@@ -20,35 +20,31 @@
  * ====================================================================
  * @endcopyright
  *
- * @file StringArray.h
- * @brief Interface of the class StringArray
+ * @file Array.h
+ * @brief Interface of the class Array
  */
 
-#ifndef STRINGARRAY_H
-#define STRINGARRAY_H
+#ifndef ARRAY_H
+#define ARRAY_H
 
 #include <jni.h>
 #include "Pool.h"
 
 struct apr_array_header_t;
-struct svn_error_t;
 
-#include "Path.h"
 #include <vector>
-#include <string>
 
-class StringArray
+class Array
 {
  private:
-  std::vector<std::string> m_strings;
-  jobjectArray m_stringArray;
-  jobject m_stringCollection;
+  jobjectArray m_objectArray;
+  std::vector<jobject> m_objects;
+  void init(jobjectArray jobjects);
  public:
-  StringArray(jobjectArray jstrings);
-  StringArray(jobject jstringCollection);
-  ~StringArray();
-  const apr_array_header_t *array(const SVN::Pool &pool);
-  const std::vector<std::string> &vector(void);
+  Array(jobjectArray jobjects);
+  Array(jobject jobjectsCollection);
+  virtual ~Array();
+  const std::vector<jobject> &vector(void);
 };
 
-#endif // STRINGARRAY_H
+#endif // ARRAY_H

Modified: subversion/trunk/subversion/bindings/javahl/native/StringArray.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/StringArray.cpp?rev=921176&r1=921175&r2=921176&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/StringArray.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/StringArray.cpp Tue Mar  9 22:34:00 2010
@@ -34,10 +34,6 @@
 
 StringArray::~StringArray()
 {
-  if (m_stringArray != NULL)
-    JNIUtil::getEnv()->DeleteLocalRef(m_stringArray);
-  if (m_stringCollection != NULL)
-    JNIUtil::getEnv()->DeleteLocalRef(m_stringCollection);
 }
 
 const apr_array_header_t *StringArray::array(const SVN::Pool &pool)
@@ -61,79 +57,30 @@ const std::vector<std::string> &StringAr
   return m_strings;
 }
 
-StringArray::StringArray(jobjectArray jstrings)
+void
+StringArray::init(void)
 {
-  m_stringArray = jstrings;
-  m_stringCollection = NULL;
-
-  if (jstrings != NULL)
+  const std::vector<jobject> &jobjects = Array::vector();
+  
+  for (std::vector<jobject>::const_iterator it = jobjects.begin();
+        it < jobjects.end(); ++it)
     {
-      JNIEnv *env = JNIUtil::getEnv();
-      jint arraySize = env->GetArrayLength(jstrings);
+      JNIStringHolder str((jstring) *it);
       if (JNIUtil::isExceptionThrown())
         return;
 
-      for (int i = 0; i < arraySize; ++i)
-        {
-          jobject jstr = env->GetObjectArrayElement(jstrings, i);
-          if (JNIUtil::isExceptionThrown())
-            return;
-
-          JNIStringHolder str((jstring)jstr);
-          if (JNIUtil::isExceptionThrown())
-            return;
-
-          m_strings.push_back(std::string((const char *)str));
-        }
+      m_strings.push_back(std::string((const char *)str));
     }
 }
 
-StringArray::StringArray(jobject jstringCollection)
+StringArray::StringArray(jobjectArray jstrings)
+    : Array(jstrings), m_strings()
 {
-  m_stringArray = NULL;
-  m_stringCollection = jstringCollection;
-
-  if (jstringCollection != NULL)
-    {
-      JNIEnv *env = JNIUtil::getEnv();
-
-      jclass clazz = env->FindClass("java/util/Collection");
-
-      static jmethodID mid_toArray = 0;
-      if (mid_toArray == 0)
-        {
-          mid_toArray = env->GetMethodID(clazz, "toArray",
-                                         "()[Ljava/lang/Object;");
-          if (JNIUtil::isExceptionThrown())
-            return;
-        }
-
-      jobjectArray jstrings = (jobjectArray) env->CallObjectMethod(
-                                               jstringCollection, mid_toArray);
-
-      jint arraySize = env->GetArrayLength(jstrings);
-      if (JNIUtil::isExceptionThrown())
-        return;
-
-      for (int i = 0; i < arraySize; ++i)
-        {
-          jobject jstr = env->GetObjectArrayElement(jstrings, i);
-          if (JNIUtil::isExceptionThrown())
-            return;
-
-          JNIStringHolder str((jstring)jstr);
-          if (JNIUtil::isExceptionThrown())
-            return;
-
-          m_strings.push_back(std::string((const char *)str));
-        }
-
-      JNIUtil::getEnv()->DeleteLocalRef(clazz);
-      if (JNIUtil::isExceptionThrown())
-        return;
+  init();
+}
 
-      JNIUtil::getEnv()->DeleteLocalRef(jstrings);
-      if (JNIUtil::isExceptionThrown())
-        return;
-    }
+StringArray::StringArray(jobject jstringCollection)
+    : Array(jstringCollection), m_strings()
+{
+  init();
 }

Modified: subversion/trunk/subversion/bindings/javahl/native/StringArray.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/StringArray.h?rev=921176&r1=921175&r2=921176&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/StringArray.h (original)
+++ subversion/trunk/subversion/bindings/javahl/native/StringArray.h Tue Mar  9 22:34:00 2010
@@ -31,18 +31,16 @@
 #include "Pool.h"
 
 struct apr_array_header_t;
-struct svn_error_t;
 
-#include "Path.h"
+#include "Array.h"
 #include <vector>
 #include <string>
 
-class StringArray
+class StringArray : Array
 {
  private:
   std::vector<std::string> m_strings;
-  jobjectArray m_stringArray;
-  jobject m_stringCollection;
+  void init(void);
  public:
   StringArray(jobjectArray jstrings);
   StringArray(jobject jstringCollection);



Re: svn commit: r921176 - in /subversion/trunk/subversion/bindings/javahl/native: Array.cpp Array.h StringArray.cpp StringArray.h

Posted by Blair Zajac <bl...@orcaware.com>.
On 03/09/2010 02:34 PM, hwright@apache.org wrote:
> Author: hwright
> Date: Tue Mar  9 22:34:00 2010
> New Revision: 921176
>
> URL: http://svn.apache.org/viewvc?rev=921176&view=rev
> Log:
> JavaHL: Create a new C++ class which represents a generic array of Java
> objects.  Move the various collection parsing duties to this class, and make
> the StringArray class inherit from it.
>

> +  const std::vector<jobject>  &vector(void);

This method could be const and its counterpart in StringArray.

Blair