コード例 #1
0
ファイル: javasci2_helper.c プロジェクト: ScilabOrg/scilab
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;

}
コード例 #2
0
/*! 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;
}