From 3f4c7c8359918f873c4574819a86ac6120aa4474 Mon Sep 17 00:00:00 2001 From: Sam Ruby Date: Sat, 22 Jul 2000 17:32:32 +0000 Subject: [PATCH] Allow java.lang.Hashtables to be passed into PHP as arrays. --- ext/java/java.c | 13 +++++++++++++ ext/java/reflect.java | 10 ++++++++++ ext/rpc/java/java.c | 13 +++++++++++++ ext/rpc/java/reflect.java | 10 ++++++++++ 4 files changed, 46 insertions(+) diff --git a/ext/java/java.c b/ext/java/java.c index e74d060bbe..9eb19ae91e 100644 --- a/ext/java/java.c +++ b/ext/java/java.c @@ -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) { diff --git a/ext/java/reflect.java b/ext/java/reflect.java index 4f1142c506..d5e9393dc2 100644 --- a/ext/java/reflect.java +++ b/ext/java/reflect.java @@ -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); diff --git a/ext/rpc/java/java.c b/ext/rpc/java/java.c index e74d060bbe..9eb19ae91e 100644 --- a/ext/rpc/java/java.c +++ b/ext/rpc/java/java.c @@ -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) { diff --git a/ext/rpc/java/reflect.java b/ext/rpc/java/reflect.java index 4f1142c506..d5e9393dc2 100644 --- a/ext/rpc/java/reflect.java +++ b/ext/rpc/java/reflect.java @@ -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); -- 2.40.0