This source file includes following definitions.
- getStatus
- Java_mpi_Status_init
- Java_mpi_Status_getCount
- Java_mpi_Status_isCancelled
- Java_mpi_Status_getElements
- Java_mpi_Status_getElementsX
- Java_mpi_Status_setElements
- Java_mpi_Status_setElementsX
- Java_mpi_Status_setCancelled
- ompi_java_status_new
- ompi_java_status_newIndex
- ompi_java_status_set
- ompi_java_status_setIndex
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 #include "ompi_config.h"
48
49 #include <stdlib.h>
50 #ifdef HAVE_TARGETCONDITIONALS_H
51 #include <TargetConditionals.h>
52 #endif
53
54 #include "mpi.h"
55 #include "mpi_Status.h"
56 #include "mpiJava.h"
57
58 static void getStatus(MPI_Status *status, jint source, jint tag,
59 jint error, jint cancelled, jlong ucount)
60 {
61
62 status->MPI_SOURCE = source;
63 status->MPI_TAG = tag;
64 status->MPI_ERROR = error;
65 status->_cancelled = cancelled;
66 status->_ucount = ucount;
67 }
68
69 JNIEXPORT void JNICALL Java_mpi_Status_init(JNIEnv *env, jclass clazz)
70 {
71 ompi_java.StatusData = (*env)->GetFieldID(env, clazz, "data", "[J");
72 }
73
74 JNIEXPORT jint JNICALL Java_mpi_Status_getCount(
75 JNIEnv *env, jobject jthis, jint source, jint tag,
76 jint error, jint cancelled, jlong ucount, jlong jType)
77 {
78 int count;
79 MPI_Status stat;
80 getStatus(&stat, source, tag, error, cancelled, ucount);
81 MPI_Datatype datatype = (MPI_Datatype)jType;
82 int rc = MPI_Get_count(&stat, datatype, &count);
83 ompi_java_exceptionCheck(env, rc);
84 return count;
85 }
86
87 JNIEXPORT jboolean JNICALL Java_mpi_Status_isCancelled(
88 JNIEnv *env, jobject jthis, jint source, jint tag,
89 jint error, jint cancelled, jlong ucount)
90 {
91 int flag;
92 MPI_Status stat;
93 getStatus(&stat, source, tag, error, cancelled, ucount);
94 int rc = MPI_Test_cancelled(&stat, &flag);
95 ompi_java_exceptionCheck(env, rc);
96 return flag==0 ? JNI_FALSE : JNI_TRUE;
97 }
98
99 JNIEXPORT jint JNICALL Java_mpi_Status_getElements(
100 JNIEnv *env, jobject jthis, jint source, jint tag,
101 jint error, jint cancelled, jlong ucount, jlong jType)
102 {
103 int count;
104 MPI_Status stat;
105 getStatus(&stat, source, tag, error, cancelled, ucount);
106 MPI_Datatype datatype = (MPI_Datatype)jType;
107 int rc = MPI_Get_elements(&stat, datatype, &count);
108 ompi_java_exceptionCheck(env, rc);
109 return count;
110 }
111
112 JNIEXPORT jobject JNICALL Java_mpi_Status_getElementsX(
113 JNIEnv *env, jobject jthis, jint source, jint tag,
114 jint error, jint cancelled, jlong ucount, jlong jType)
115 {
116 MPI_Count count;
117 MPI_Status stat;
118 getStatus(&stat, source, tag, error, cancelled, ucount);
119 MPI_Datatype datatype = (MPI_Datatype)jType;
120 int rc = MPI_Get_elements_x(&stat, datatype, &count);
121 ompi_java_exceptionCheck(env, rc);
122
123 return (*env)->NewObject(env, ompi_java.CountClass,
124 ompi_java.CountInit, (jlong)count);
125 }
126
127 JNIEXPORT jint JNICALL Java_mpi_Status_setElements(
128 JNIEnv *env, jobject jthis, jint source, jint tag,
129 jint error, jint cancelled, jlong ucount, jlong jType, int count)
130 {
131 MPI_Status stat;
132 getStatus(&stat, source, tag, error, cancelled, ucount);
133 MPI_Datatype datatype = (MPI_Datatype)jType;
134 int rc = MPI_Status_set_elements(&stat, datatype, count);
135 ompi_java_exceptionCheck(env, rc);
136 return stat._ucount;
137 }
138
139 JNIEXPORT jlong JNICALL Java_mpi_Status_setElementsX(
140 JNIEnv *env, jobject jthis, jint source, jint tag,
141 jint error, jint cancelled, jlong ucount, jlong jType, jlong jcount)
142 {
143 MPI_Status stat;
144 MPI_Count count = (long)jcount;
145 getStatus(&stat, source, tag, error, cancelled, ucount);
146 MPI_Datatype datatype = (MPI_Datatype)jType;
147 int rc = MPI_Status_set_elements_x(&stat, datatype, count);
148 ompi_java_exceptionCheck(env, rc);
149 return (jlong)stat._ucount;
150 }
151
152 JNIEXPORT void JNICALL Java_mpi_Status_setCancelled(
153 JNIEnv *env, jobject jthis, jint source, jint tag,
154 jint error, jint cancelled, jlong ucount, int flag)
155 {
156 MPI_Status stat;
157 getStatus(&stat, source, tag, error, cancelled, ucount);
158 int rc = MPI_Status_set_cancelled(&stat, flag);
159 ompi_java_exceptionCheck(env, rc);
160 }
161
162 jobject ompi_java_status_new(JNIEnv *env, MPI_Status *status)
163 {
164 jlongArray jData = (*env)->NewLongArray(env, 6);
165 ompi_java_status_set(env, jData, status);
166 jobject jStatus = (*env)->AllocObject(env, ompi_java.StatusClass);
167 (*env)->SetObjectField(env, jStatus, ompi_java.StatusData, jData);
168 return jStatus;
169 }
170
171 jobject ompi_java_status_newIndex(JNIEnv *env, MPI_Status *status, int index)
172 {
173 jlongArray jData = (*env)->NewLongArray(env, 6);
174 ompi_java_status_setIndex(env, jData, status, index);
175 jobject jStatus = (*env)->AllocObject(env, ompi_java.StatusClass);
176 (*env)->SetObjectField(env, jStatus, ompi_java.StatusData, jData);
177 return jStatus;
178 }
179
180 void ompi_java_status_set(JNIEnv *env, jlongArray jData, MPI_Status *status)
181 {
182
183 int i = 0;
184 jlong *data = (*env)->GetPrimitiveArrayCritical(env, jData, NULL);
185 data[i++] = status->MPI_SOURCE;
186 data[i++] = status->MPI_TAG;
187 data[i++] = status->MPI_ERROR;
188 data[i++] = status->_cancelled;
189 data[i++] = status->_ucount;
190 (*env)->ReleasePrimitiveArrayCritical(env, jData, data, 0);
191 }
192
193 void ompi_java_status_setIndex(
194 JNIEnv *env, jlongArray jData, MPI_Status *status, int index)
195 {
196
197 int i = 0;
198 jlong *data = (*env)->GetPrimitiveArrayCritical(env, jData, NULL);
199 data[i++] = status->MPI_SOURCE;
200 data[i++] = status->MPI_TAG;
201 data[i++] = status->MPI_ERROR;
202 data[i++] = status->_cancelled;
203 data[i++] = status->_ucount;
204 data[i++] = index;
205 (*env)->ReleasePrimitiveArrayCritical(env, jData, data, 0);
206 }