1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 
  11 
  12 
  13 
  14 
  15 
  16 
  17 
  18 
  19 
  20 
  21 #ifndef _MPIJAVA_H_
  22 #define _MPIJAVA_H_
  23 
  24 #include "mpi.h"
  25 #include "opal/class/opal_free_list.h"
  26 
  27 typedef struct {
  28     jfieldID  CommHandle;
  29     jfieldID  GroupHandle;
  30     jclass    CartParmsClass;
  31     jmethodID CartParmsInit;
  32     jclass    ShiftParmsClass;
  33     jmethodID ShiftParmsInit;
  34     jclass    VersionClass;
  35     jmethodID VersionInit;
  36     jclass    CountClass;
  37     jmethodID CountInit;
  38     jclass    GraphParmsClass;
  39     jmethodID GraphParmsInit;
  40     jclass    DistGraphNeighborsClass;
  41     jmethodID DistGraphNeighborsInit;
  42     jfieldID  DatatypeHandle;
  43     jfieldID  DatatypeBaseType;
  44     jfieldID  DatatypeBaseSize;
  45     jfieldID  MessageHandle;
  46     jfieldID  OpHandle;
  47     jfieldID  OpCommute;
  48     jmethodID OpCall;
  49     jfieldID  ReqHandle;
  50     jclass    StatusClass;
  51     jfieldID  StatusData;
  52     jclass    ExceptionClass;
  53     jmethodID ExceptionInit;
  54     jclass    IntegerClass;
  55     jmethodID IntegerValueOf;
  56     jclass    LongClass;
  57     jmethodID LongValueOf;
  58 } ompi_java_globals_t;
  59 
  60 extern ompi_java_globals_t ompi_java;
  61 
  62 typedef struct ompi_java_buffer_t
  63 {
  64     opal_free_list_item_t super;
  65     void *buffer;
  66 } ompi_java_buffer_t;
  67 
  68 OMPI_DECLSPEC OBJ_CLASS_DECLARATION(ompi_java_buffer_t);
  69 
  70 void* ompi_java_getArrayCritical(void** bufBase, JNIEnv *env,
  71                                  jobject buf, int offset);
  72 
  73 void* ompi_java_getDirectBufferAddress(JNIEnv *env, jobject buf);
  74 
  75 
  76 void ompi_java_getReadPtr(
  77         void **ptr, ompi_java_buffer_t **item, JNIEnv *env, jobject buf,
  78         jboolean db, int offset, int count, MPI_Datatype type, int baseType);
  79 
  80 
  81 
  82 
  83 void ompi_java_getReadPtrRank(
  84         void **ptr, ompi_java_buffer_t **item, JNIEnv *env,
  85         jobject buf, jboolean db, int offset, int count, int size,
  86         int rank, MPI_Datatype type, int baseType);
  87 
  88 
  89 
  90 
  91 
  92 void ompi_java_getReadPtrv(
  93         void **ptr, ompi_java_buffer_t **item, JNIEnv *env,
  94         jobject buf, jboolean db, int off, int *counts, int *displs,
  95         int size, int rank, MPI_Datatype type, int baseType);
  96 
  97 
  98 void ompi_java_releaseReadPtr(
  99         void *ptr, ompi_java_buffer_t *item, jobject buf, jboolean db);
 100 
 101 
 102 void ompi_java_getWritePtr(
 103         void **ptr, ompi_java_buffer_t **item, JNIEnv *env,
 104         jobject buf, jboolean db, int count, MPI_Datatype type);
 105 
 106 
 107 
 108 void ompi_java_getWritePtrv(
 109         void **ptr, ompi_java_buffer_t **item, JNIEnv *env, jobject buf,
 110         jboolean db, int *counts, int *displs, int size, MPI_Datatype type);
 111 
 112 
 113 
 114 void ompi_java_releaseWritePtr(
 115         void *ptr, ompi_java_buffer_t *item, JNIEnv *env, jobject buf,
 116         jboolean db, int offset, int count, MPI_Datatype type, int baseType);
 117 
 118 
 119 
 120 
 121 void ompi_java_releaseWritePtrv(
 122         void *ptr, ompi_java_buffer_t *item, JNIEnv *env,
 123         jobject buf, jboolean db, int off, int *counts, int *displs,
 124         int size, MPI_Datatype type, int baseType);
 125 
 126 void ompi_java_setStaticLongField(JNIEnv *env, jclass c,
 127                                   char *field, jlong value);
 128 
 129 void ompi_java_setIntField(JNIEnv *env, jclass c, jobject obj,
 130                            char *field, jint value);
 131 
 132 jobject ompi_java_Integer_valueOf(JNIEnv *env, jint i);
 133 jobject ompi_java_Long_valueOf(JNIEnv *env, jlong i);
 134 
 135 void ompi_java_getIntArray(
 136         JNIEnv *env, jintArray array, jint **jptr, int **cptr);
 137 void ompi_java_releaseIntArray(
 138         JNIEnv *env, jintArray array, jint *jptr, int *cptr);
 139 void ompi_java_forgetIntArray(
 140         JNIEnv *env, jintArray array, jint *jptr, int *cptr);
 141 
 142 void ompi_java_getDatatypeArray(
 143         JNIEnv *env, jlongArray array, jlong **jptr, MPI_Datatype **cptr);
 144 void ompi_java_forgetDatatypeArray(
 145         JNIEnv *env, jlongArray array, jlong *jptr, MPI_Datatype *cptr);
 146 
 147 void ompi_java_getBooleanArray(
 148         JNIEnv *env, jbooleanArray array, jboolean **jptr, int **cptr);
 149 void ompi_java_releaseBooleanArray(
 150         JNIEnv *env, jbooleanArray array, jboolean *jptr, int *cptr);
 151 void ompi_java_forgetBooleanArray(
 152         JNIEnv *env, jbooleanArray array, jboolean *jptr, int *cptr);
 153 
 154 void ompi_java_getPtrArray(
 155         JNIEnv *env, jlongArray array, jlong **jptr, void ***cptr);
 156 void ompi_java_releasePtrArray(
 157         JNIEnv *env, jlongArray array, jlong *jptr, void **cptr);
 158 
 159 jboolean ompi_java_exceptionCheck(JNIEnv *env, int rc);
 160 
 161 void*      ompi_java_attrSet(JNIEnv *env, jbyteArray jval);
 162 jbyteArray ompi_java_attrGet(JNIEnv *env, void *cval);
 163 int        ompi_java_attrCopy(void *attrValIn, void *attrValOut, int *flag);
 164 int        ompi_java_attrDelete(void *attrVal);
 165 
 166 MPI_Op ompi_java_op_getHandle(
 167         JNIEnv *env, jobject jOp, jlong hOp, int baseType);
 168 
 169 jobject ompi_java_status_new(JNIEnv *env, MPI_Status *status);
 170 jobject ompi_java_status_newIndex(JNIEnv *env, MPI_Status *status, int index);
 171 
 172 void ompi_java_status_set(
 173         JNIEnv *env, jlongArray jData, MPI_Status *status);
 174 void ompi_java_status_setIndex(
 175         JNIEnv *env, jlongArray jData, MPI_Status *status, int index);
 176 
 177 #endif