JNIEXPORT jint JNICALL Java_org_nanomsg_NanoLibrary_load_1symbols(JNIEnv* env, jobject obj, jobject map) { jclass cmap = 0; jclass cint = 0; jmethodID mput = 0; jmethodID mnew = 0; jint count = 0; cmap = (*env)->GetObjectClass(env, map); NANO_ASSERT(cmap); mput = (*env)->GetMethodID(env, cmap, "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); NANO_ASSERT(mput); cint = (*env)->FindClass(env, "java/lang/Integer"); NANO_ASSERT(cint); mnew = (*env)->GetMethodID(env, cint, "<init>", "(I)V"); NANO_ASSERT(mnew); for(count = 0; ; ++count) { const char* ckey; int cval; jstring jkey = 0; jobject jval = 0; ckey = nn_symbol(count, &cval); if (ckey == 0) break; // fprintf(stderr, "Got symbol #%d: [%s] -> %d\n", count, ckey, cval); jkey = (*env)->NewStringUTF(env, ckey); NANO_ASSERT(jkey); // fprintf(stderr, "Created Java String for [%s]\n", ckey); jval = (*env)->NewObject(env, cint, mnew, cval); NANO_ASSERT(jval); // fprintf(stderr, "Created Java Integer for [%d]\n", cval); (*env)->CallObjectMethod(env, map, mput, jkey, jval); // fprintf(stderr, "Inserted symbol in map: [%s] -> %d\n", ckey, cval); } return count; }
inline const char *symbol (int i, int *value) { return nn_symbol (i, value); }
JNIEXPORT jint JNICALL Java_org_nanomsg_NanoLibrary_load_1symbols(JNIEnv* env, jobject obj, jobject map) { jclass cmap = 0; jclass cint = 0; jmethodID mput = 0; jmethodID mnew = 0; jint count = 0; cmap = (*env)->GetObjectClass(env, map); NANO_ASSERT(cmap); mput = (*env)->GetMethodID(env, cmap, "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); NANO_ASSERT(mput); cint = (*env)->FindClass(env, "java/lang/Integer"); NANO_ASSERT(cint); mnew = (*env)->GetMethodID(env, cint, "<init>", "(I)V"); NANO_ASSERT(mnew); struct symbol symbols[100]; int symi = 0; for (count = 0; ; ++count) { const char* ckey; int cval; ckey = nn_symbol(count, &cval); if (ckey == 0) break; symbols[symi].name = ckey; symbols[symi].val = cval; symi++; } symbols[symi].name = "NN_POLLIN"; symbols[symi].val = NN_POLLIN; symi++; symbols[symi].name = "NN_POLLOUT"; symbols[symi].val = NN_POLLOUT; symi++; symbols[symi].name = "EACCESS"; symbols[symi].val = EACCESS; symi++; symbols[symi].name = "EISCONN"; symbols[symi].val = EISCONN; symi++; symbols[symi].name = "ESOCKTNOSUPPORT"; symbols[symi].val = ESOCKTNOSUPPORT; symi++; for (count = 0; count < symi; ++count) { const char* ckey; int cval; jstring jkey = 0; jobject jval = 0; ckey = symbols[count].name; cval = symbols[count].val; // fprintf(stderr, "Got symbol #%d: [%s] -> %d\n", count, ckey, cval); jkey = (*env)->NewStringUTF(env, ckey); NANO_ASSERT(jkey); // fprintf(stderr, "Created Java String for [%s]\n", ckey); jval = (*env)->NewObject(env, cint, mnew, cval); NANO_ASSERT(jval); // fprintf(stderr, "Created Java Integer for [%d]\n", cval); (*env)->CallObjectMethod(env, map, mput, jkey, jval); // fprintf(stderr, "Inserted symbol in map: [%s] -> %d\n", ckey, cval); } buffer_cls = (*env)->FindClass(env, "java/nio/Buffer"); position_r_mid = (*env)->GetMethodID(env, buffer_cls, "position", "()I"); position_w_mid = (*env)->GetMethodID(env, buffer_cls, "position", "(I)Ljava/nio/Buffer;"); limit_r_mid = (*env)->GetMethodID(env, buffer_cls, "limit", "()I"); pollfd_class = (*env)->FindClass(env, "org/nanomsg/NNPollFD"); pollfd_fd = (*env)->GetFieldID(env, pollfd_class, "fd", "I"); pollfd_events = (*env)->GetFieldID(env, pollfd_class, "events", "I"); pollfd_revents = (*env)->GetFieldID(env, pollfd_class, "revents", "I"); return count; }