File: f2j_jni.c

package info (click to toggle)
netlib-java 0.9.3-6
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 9,536 kB
  • sloc: ansic: 21,058; java: 6,805; xml: 989; sh: 93; makefile: 41
file content (69 lines) | stat: -rw-r--r-- 1,876 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <jni.h>
#include <cblas.h>

enum CBLAS_TRANSPOSE getTrans(const char * fortranChar){
	// enum CBLAS_TRANSPOSE {CblasNoTrans=111, CblasTrans=112, CblasConjTrans=113, AtlasConj=114};
	// can be "N" or "T"
	if (fortranChar[0] == 'N'){
		return (enum CBLAS_TRANSPOSE) 111;
	}
	if (fortranChar[0] == 'T'){
		return (enum CBLAS_TRANSPOSE) 112;
	}
	printf("ERROR in F2J JNI: getTrans() got %s", fortranChar);
	return -1;
}

enum CBLAS_UPLO getUpLo(const char * fortranChar){
	// enum CBLAS_UPLO  {CblasUpper=121, CblasLower=122};
	// can be "U" or "L"
	if (fortranChar[0] == 'U'){
		return (enum CBLAS_UPLO) 121;
	}
	if (fortranChar[0] == 'L'){
		return (enum CBLAS_UPLO) 122;
	}
	printf("ERROR in F2J JNI: getUpLo() got %s", fortranChar);
	return -1;
}

enum CBLAS_SIDE getSide(const char * fortranChar){
	// enum CBLAS_SIDE  {CblasLeft=141, CblasRight=142};
	// can be "L" or "R"
	if (fortranChar[0] == 'L'){
		return (enum CBLAS_SIDE) 141;
	}
	if (fortranChar[0] == 'R'){
		return (enum CBLAS_SIDE) 142;
	}
	printf("ERROR in F2J JNI: getSide() got %s", fortranChar);
	return -1;
}

enum CBLAS_DIAG getDiag(const char * fortranChar){
	// enum CBLAS_DIAG  {CblasNonUnit=131, CblasUnit=132};
	// can be "U" or "N"
	if (fortranChar[0] == 'N'){
		return (enum CBLAS_DIAG) 131;
	}
	if (fortranChar[0] == 'U'){
		return (enum CBLAS_DIAG) 132;
	}
	printf("ERROR in F2J JNI: getDiag() got %s", fortranChar);
	return -1;
}

inline void check_memory(JNIEnv * env, void * arg) {
	if (arg != NULL) {
		return;
	}
	/*
	 * WARNING: Memory leak
	 *
	 * This doesn't clean up successful allocations prior to throwing this exception.
	 * However, it's a pretty dire situation to be anyway and the client code is not
	 * expected to recover.
	 */
	(*env)->ThrowNew(env, (*env)->FindClass(env, "java/lang/OutOfMemoryError"),
		"Out of memory transferring array to native code in F2J JNI");
}