int *getInt(char *variableName, int *nbRow, int *nbCol) { SciErr sciErr; int *matrixOfInt = NULL; sciErr = readNamedMatrixOfInteger32(NULL, variableName, nbRow, nbCol, NULL); if (sciErr.iErr) { printError(&sciErr, 0); } /* Alloc the memory */ matrixOfInt = (int *)malloc(((*nbRow) * (*nbCol)) * sizeof(int)); /* Load the matrix */ sciErr = readNamedMatrixOfInteger32(NULL, variableName, nbRow, nbCol, matrixOfInt); if (sciErr.iErr) { printError(&sciErr, 0); } return matrixOfInt; }
/*! public native int GetElement(int indr, int indc); */ JNIEXPORT jint JNICALL Java_javasci_SciIntegerArray_GetElement(JNIEnv *env , jobject obj_this,jint indrarg, jint indcarg) { SciErr sciErr; int Value = 0; int j = 0; jclass class_Mine = (*env)->GetObjectClass(env, obj_this); jfieldID id_name = (*env)->GetFieldID(env, class_Mine, "name","Ljava/lang/String;"); jfieldID id_m = (*env)->GetFieldID(env, class_Mine, "m", "I"); jfieldID id_n = (*env)->GetFieldID(env, class_Mine, "n", "I"); jstring jname = (jstring) (*env)->GetObjectField(env, obj_this, id_name); jint jm = (*env)->GetIntField(env, obj_this, id_m); jint jn = (*env)->GetIntField(env, obj_this, id_n); const char *cname = (*env)->GetStringUTFChars(env, jname, NULL); jfieldID id_x; jintArray jx; jint *cx = NULL; int *icx = NULL; int dimension[2]; int cm = 0, cn = 0; sciErr = getNamedVarDimension(pvApiCtx, (char*)cname, &dimension[0], &dimension[1]); if(sciErr.iErr) { fprintf(stderr,"%s", getErrorMessage(sciErr)); (*env)->ReleaseStringUTFChars(env, jname , cname); fprintf(stderr,"Error in Java_javasci_SciIntegerArray_GetElement (1).\n"); return Value; } if (dimension[0] != jm) { fprintf(stderr,"Error in Java_javasci_SciIntegerArray_GetElement (2).\n"); (*env)->ReleaseStringUTFChars(env, jname , cname); return Value; } if (dimension[1] != jn) { fprintf(stderr,"Error in Java_javasci_SciIntegerArray_GetElement (3).\n"); (*env)->ReleaseStringUTFChars(env, jname , cname); return Value; } id_x = (*env)->GetFieldID(env, class_Mine, "x", "[D"); jx = (*env)->GetObjectField(env, obj_this, id_x); cx = (*env)->GetIntArrayElements(env, jx, NULL); icx = (int*)MALLOC(sizeof(int) * (cm * cn)); if (icx == NULL) { fprintf(stderr,"Error in Java_javasci_SciIntegerArray_GetElement (4).\n"); (*env)->ReleaseIntArrayElements(env, jx, cx, 0); (*env)->ReleaseStringUTFChars(env, jname , cname); return Value; } for (j = 0; j < cm * cn; j++) icx[j] = (int)cx[j]; sciErr = readNamedMatrixOfInteger32(pvApiCtx, (char*)cname, &cm, &cn, icx); if(sciErr.iErr) { fprintf(stderr,"%s", getErrorMessage(sciErr)); FREE(icx); icx = NULL; fprintf(stderr,"Error in Java_javasci_SciIntegerArray_GetElement (5).\n"); (*env)->ReleaseIntArrayElements(env, jx, cx, 0); (*env)->ReleaseStringUTFChars(env, jname , cname); return Value; } FREE(icx); icx = NULL; if ( (indrarg <= 0) || (indcarg <= 0) ) { (*env)->ReleaseIntArrayElements(env, jx, cx, 0); (*env)->ReleaseStringUTFChars(env, jname , cname); fprintf(stderr,"Error with int indr & int indc must be >0.\n"); return Value; } if ( (indrarg > jm) || (indcarg > jn) ) { (*env)->ReleaseIntArrayElements(env, jx, cx, 0); (*env)->ReleaseStringUTFChars(env, jname , cname); fprintf(stderr,"Error with int indr & int indc.\n"); return Value; } Value = cx[(indcarg - 1) * cm + (indrarg - 1)]; (*env)->ReleaseIntArrayElements(env, jx, cx, 0); (*env)->ReleaseStringUTFChars(env, jname , cname); return Value; }