]> granicus.if.org Git - php/commitdiff
Allow java.lang.Hashtables to be passed into PHP as arrays.
authorSam Ruby <rubys@php.net>
Sat, 22 Jul 2000 17:32:32 +0000 (17:32 +0000)
committerSam Ruby <rubys@php.net>
Sat, 22 Jul 2000 17:32:32 +0000 (17:32 +0000)
ext/java/java.c
ext/java/reflect.java
ext/rpc/java/java.c
ext/rpc/java/reflect.java

index e74d060bbeff4590aa61855c4225ddaa0b1c151a..9eb19ae91eeaed38322ab227a60e52efdfd7dd94 100644 (file)
@@ -730,6 +730,19 @@ JNIEXPORT jlong JNICALL Java_net_php_reflect_nextElement
   return (jlong)(long)result;
 }
 
+JNIEXPORT jlong JNICALL Java_net_php_reflect_hashUpdate
+  (JNIEnv *jenv, jclass self, jlong array, jbyteArray key)
+{
+  pval *result;
+  pval pkey;
+  pval *handle = (pval*)(long)array;
+  ALLOC_ZVAL(result);
+  Java_net_php_reflect_setResultFromString(jenv, self, (jlong)(long)&pkey, key);
+  zend_hash_update(handle->value.ht, pkey.value.str.val, pkey.value.str.len+1,
+    &result, sizeof(zval *), NULL);
+  return (jlong)(long)result;
+}
+
 JNIEXPORT void JNICALL Java_net_php_reflect_setException
   (JNIEnv *jenv, jclass self, jlong result, jbyteArray value)
 {
index 4f1142c506913ace5f904cac18d4292a7eeccb5c..d5e9393dc2131d9f99ea95f6a73dee50419718c0 100644 (file)
@@ -45,6 +45,7 @@ public class reflect {
   private static native void setResultFromObject(long result, Object value);
   private static native void setResultFromArray(long result);
   private static native long nextElement(long array);
+  private static native long hashUpdate(long array, byte key[]);
   private static native void setException(long result, byte value[]);
   public  static native void setEnv();
 
@@ -81,6 +82,15 @@ public class reflect {
         setResult(nextElement(result), Array.get(value, i));
       }
 
+    } else if (value instanceof java.util.Hashtable) {
+
+      Hashtable ht = (Hashtable) value; 
+      setResultFromArray(result);
+      for (Enumeration e = ht.keys(); e.hasMoreElements(); ) {
+        Object key = e.nextElement();
+        setResult(hashUpdate(result, key.toString().getBytes()), ht.get(key));
+      }
+
     } else {
 
       setResultFromObject(result, value);
index e74d060bbeff4590aa61855c4225ddaa0b1c151a..9eb19ae91eeaed38322ab227a60e52efdfd7dd94 100644 (file)
@@ -730,6 +730,19 @@ JNIEXPORT jlong JNICALL Java_net_php_reflect_nextElement
   return (jlong)(long)result;
 }
 
+JNIEXPORT jlong JNICALL Java_net_php_reflect_hashUpdate
+  (JNIEnv *jenv, jclass self, jlong array, jbyteArray key)
+{
+  pval *result;
+  pval pkey;
+  pval *handle = (pval*)(long)array;
+  ALLOC_ZVAL(result);
+  Java_net_php_reflect_setResultFromString(jenv, self, (jlong)(long)&pkey, key);
+  zend_hash_update(handle->value.ht, pkey.value.str.val, pkey.value.str.len+1,
+    &result, sizeof(zval *), NULL);
+  return (jlong)(long)result;
+}
+
 JNIEXPORT void JNICALL Java_net_php_reflect_setException
   (JNIEnv *jenv, jclass self, jlong result, jbyteArray value)
 {
index 4f1142c506913ace5f904cac18d4292a7eeccb5c..d5e9393dc2131d9f99ea95f6a73dee50419718c0 100644 (file)
@@ -45,6 +45,7 @@ public class reflect {
   private static native void setResultFromObject(long result, Object value);
   private static native void setResultFromArray(long result);
   private static native long nextElement(long array);
+  private static native long hashUpdate(long array, byte key[]);
   private static native void setException(long result, byte value[]);
   public  static native void setEnv();
 
@@ -81,6 +82,15 @@ public class reflect {
         setResult(nextElement(result), Array.get(value, i));
       }
 
+    } else if (value instanceof java.util.Hashtable) {
+
+      Hashtable ht = (Hashtable) value; 
+      setResultFromArray(result);
+      for (Enumeration e = ht.keys(); e.hasMoreElements(); ) {
+        Object key = e.nextElement();
+        setResult(hashUpdate(result, key.toString().getBytes()), ht.get(key));
+      }
+
     } else {
 
       setResultFromObject(result, value);