/* * Class: com_iwebpp_libuvpp_handles_LoopHandle * Method: _list * Signature: (J)[Ljava/lang/String */ extern "C" JNIEXPORT jobjectArray JNICALL Java_com_iwebpp_libuvpp_handles_LoopHandle__1list (JNIEnv *env, jobject that, jlong ptr) { assert(ptr); assert(_string_cid); uv_loop_t* loop = reinterpret_cast<uv_loop_t*>(ptr); std::vector<const char*> bag; uv_walk(loop, _list_cb, &bag); jsize size = static_cast<jsize>(bag.size()); jobjectArray handles = env->NewObjectArray(size, _string_cid, 0); OOMN(env, handles); for (int i=0; i < size; i++) { jstring s = env->NewStringUTF(bag[i]); OOMN(env, s); env->SetObjectArrayElement(handles, i, s); env->DeleteLocalRef(s); } return handles; }
/* * Class: com_oracle_libuv_LibUV * Method: _getCPUs * Signature: ()[Ljava/lang/Object; */ JNIEXPORT jobjectArray JNICALL Java_com_oracle_libuv_LibUV__1getCPUs (JNIEnv *env, jclass cls) { uv_cpu_info_t* cpu_infos; int count; uv_err_t err = uv_cpu_info(&cpu_infos, &count); if (err.code != UV_OK) { return NULL; } jclass objectClassID = env->FindClass("java/lang/Object"); assert(objectClassID); jclass integerClassID = env->FindClass("java/lang/Integer"); assert(integerClassID); jmethodID integerConstructorMID = env->GetMethodID(integerClassID, "<init>", "(I)V"); assert(integerConstructorMID); jobjectArray array = env->NewObjectArray(count * 7, objectClassID, NULL); OOMN(env, array); int j = 0; for (int i = 0; i < count; i++) { jstring model = env->NewStringUTF(cpu_infos[i].model); OOMN(env, model); env->SetObjectArrayElement(array, j++, model); env->DeleteLocalRef(model); jobject speed = env->NewObject(integerClassID, integerConstructorMID, cpu_infos[i].speed); OOMN(env, speed); env->SetObjectArrayElement(array, j++, speed); env->DeleteLocalRef(speed); jobject user = env->NewObject(integerClassID, integerConstructorMID, cpu_infos[i].cpu_times.user); OOMN(env, user); env->SetObjectArrayElement(array, j++, user); env->DeleteLocalRef(user); jobject nice = env->NewObject(integerClassID, integerConstructorMID, cpu_infos[i].cpu_times.nice); OOMN(env, nice); env->SetObjectArrayElement(array, j++, nice); env->DeleteLocalRef(nice); jobject sys = env->NewObject(integerClassID, integerConstructorMID, cpu_infos[i].cpu_times.sys); OOMN(env, sys); env->SetObjectArrayElement(array, j++, sys); env->DeleteLocalRef(sys); jobject idle = env->NewObject(integerClassID, integerConstructorMID, cpu_infos[i].cpu_times.idle); OOMN(env, idle); env->SetObjectArrayElement(array, j++, idle); env->DeleteLocalRef(idle); jobject irq = env->NewObject(integerClassID, integerConstructorMID, cpu_infos[i].cpu_times.irq); OOMN(env, irq); env->SetObjectArrayElement(array, j++, irq); env->DeleteLocalRef(irq); } uv_free_cpu_info(cpu_infos, count); return array; }