61
61
obj = (*env)->NewObject(env, cls, mid);
62
62
mid = (*env)->GetMethodID(env, cls, "add", "(L" CLSOBJECT ";)Z");
63
63
for(i = 0; i < cblistnum(list); i++){
64
(*env)->CallVoidMethod(env, obj, mid, (*env)->NewStringUTF(env, cblistval(list, i, NULL)));
64
kobj = (*env)->NewStringUTF(env, cblistval(list, i, NULL));
65
(*env)->CallVoidMethod(env, obj, mid, kobj);
66
(*env)->DeleteLocalRef(env, kobj);
96
98
jobject cbmaptoobj(JNIEnv *env, CBMAP *map){
101
jobject obj, kobj, vobj;
100
102
const char *kbuf, *vbuf;
103
104
cls = (*env)->FindClass(env, CLSLHMAP);
104
105
mid = (*env)->GetMethodID(env, cls, "<init>", "()V");
105
106
obj = (*env)->NewObject(env, cls, mid);
106
107
mid = (*env)->GetMethodID(env, cls, "put", "(L" CLSOBJECT ";L" CLSOBJECT ";)L" CLSOBJECT ";");
107
108
cbmapiterinit(map);
108
while((kbuf = cbmapiternext(map, &ksiz)) != NULL){
109
vbuf = cbmapget(map, kbuf, ksiz, NULL);
110
(*env)->CallObjectMethod(env, obj, mid,
111
(*env)->NewStringUTF(env, kbuf), (*env)->NewStringUTF(env, vbuf));
109
while((kbuf = cbmapiternext(map, NULL)) != NULL){
110
vbuf = cbmapiterval(kbuf, NULL);
111
kobj = (*env)->NewStringUTF(env, kbuf);
112
vobj = (*env)->NewStringUTF(env, vbuf);
113
(*env)->CallObjectMethod(env, obj, mid, kobj, vobj);
114
(*env)->DeleteLocalRef(env, kobj);
115
(*env)->DeleteLocalRef(env, vobj);
121
CBMAP *objtocbmap(JNIEnv *env, jobject obj){
123
jmethodID midks, midg, midit, midhn, midn;
124
jobject ksobj, itobj, ekobj, evobj;
125
jboolean ickey, icval;
127
const char *tkey, *tval;
129
tmap = cbmapopenex(31);
130
map = (*env)->GetObjectClass(env, obj);
131
midks = (*env)->GetMethodID(env, map, "keySet", "()L" CLSSET ";");
132
midg = (*env)->GetMethodID(env, map, "get", "(L" CLSOBJECT ";)L" CLSOBJECT ";");
133
ksobj = (*env)->CallObjectMethod(env, obj, midks);
134
set = (*env)->GetObjectClass(env, ksobj);
135
midit = (*env)->GetMethodID(env, set, "iterator", "()L" CLSITERATOR ";");
136
itobj = (*env)->CallObjectMethod(env, ksobj, midit);
137
it = (*env)->GetObjectClass(env, itobj);
138
midhn = (*env)->GetMethodID(env, it, "hasNext", "()Z");
139
midn = (*env)->GetMethodID(env, it, "next", "()L" CLSOBJECT ";");
140
while((*env)->CallBooleanMethod(env, itobj, midhn)){
141
ekobj = (*env)->CallObjectMethod(env, itobj, midn);
142
if(!isinstanceof(env, ekobj, CLSSTRING)) continue;
143
if(!(tkey = (*env)->GetStringUTFChars(env, ekobj, &ickey))) continue;
144
evobj = (*env)->CallObjectMethod(env, obj, midg, ekobj);
145
if(!isinstanceof(env, evobj, CLSSTRING) ||
146
!(tval = (*env)->GetStringUTFChars(env, evobj, &icval))){
147
if(ickey == JNI_TRUE) (*env)->ReleaseStringUTFChars(env, ekobj, tkey);
150
cbmapput(tmap, tkey, -1, tval, -1, TRUE);
151
if(icval == JNI_TRUE) (*env)->ReleaseStringUTFChars(env, evobj, tval);
152
if(ickey == JNI_TRUE) (*env)->ReleaseStringUTFChars(env, ekobj, tkey);
118
159
/* END OF FILE */