From 3b5c3a85f02c4d935073704e13e82e75f3b0a4b3 Mon Sep 17 00:00:00 2001 From: Doug MacEachern Date: Wed, 26 Mar 2008 16:44:48 +0000 Subject: [PATCH] add some reusable List functions --- bindings/java/src/jni/javasigar.c | 29 +++++++++++++++++++++++++++++ bindings/java/src/jni/javasigar.h | 19 +++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/bindings/java/src/jni/javasigar.c b/bindings/java/src/jni/javasigar.c index dbffa522..c2b8bf82 100644 --- a/bindings/java/src/jni/javasigar.c +++ b/bindings/java/src/jni/javasigar.c @@ -218,6 +218,35 @@ static void sigar_set_pointer(JNIEnv *env, jobject obj, const void *ptr) { #endif } +int jsigar_init_list(JNIEnv *env, jsigar_list_t *obj) +{ + jclass listclass = + JENV->FindClass(env, "java/util/ArrayList"); + jmethodID listid = + JENV->GetMethodID(env, listclass, "", "()V"); + jmethodID addid = + JENV->GetMethodID(env, listclass, "add", + "(Ljava/lang/Object;)" + "Z"); + + obj->env = env; + obj->obj = JENV->NewObject(env, listclass, listid); + obj->id = addid; + + return SIGAR_OK; +} + +int jsigar_list_add(void *data, char *value, int len) +{ + jsigar_list_t *obj = (jsigar_list_t *)data; + JNIEnv *env = obj->env; + + JENV->CallBooleanMethod(env, obj->obj, obj->id, + JENV->NewStringUTF(env, value)); + + return SIGAR_OK; +} + JNIEXPORT jstring SIGAR_JNIx(formatSize) (JNIEnv *env, jclass cls, jlong size) { diff --git a/bindings/java/src/jni/javasigar.h b/bindings/java/src/jni/javasigar.h index 0fc9ff28..021cc9f3 100644 --- a/bindings/java/src/jni/javasigar.h +++ b/bindings/java/src/jni/javasigar.h @@ -16,6 +16,8 @@ * USA. */ +#include + #define JENV (*env) #define SIGAR_PACKAGE "org/hyperic/sigar/" @@ -30,3 +32,20 @@ #define SIGAR_CLASS_SIG(name) \ "L" SIGAR_PACKAGE name ";" +typedef struct { + JNIEnv *env; + jobject obj; + jmethodID id; +} jsigar_list_t; + +#ifdef __cplusplus +extern "C" { +#endif + +int jsigar_init_list(JNIEnv *env, jsigar_list_t *obj); + +int jsigar_list_add(void *data, char *value, int len); + +#ifdef __cplusplus +} +#endif