~ubuntu-branches/ubuntu/utopic/adios/utopic

« back to all changes in this revision

Viewing changes to wrappers/java/gov_ornl_ccs_AdiosVarinfo.cxx

  • Committer: Package Import Robot
  • Author(s): Alastair McKinstry
  • Date: 2013-12-09 15:21:31 UTC
  • mfrom: (1.1.2)
  • Revision ID: package-import@ubuntu.com-20131209152131-jtd4fpmdv3xnunnm
Tags: 1.5.0-1
* New upstream.
* Standards-Version: 3.9.5
* Include latest config.{sub,guess} 
* New watch file.
* Create libadios-bin for binaries.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include "gov_ornl_ccs_AdiosVarinfo.h"
 
2
 
 
3
#include <adios_read.h>
 
4
#include <iostream>
 
5
 
 
6
/*
 
7
 * Class:     gov_ornl_ccs_AdiosVarinfo
 
8
 * Method:    adios_inq_var
 
9
 * Signature: (JJLjava/lang/String;)I
 
10
 */
 
11
JNIEXPORT jint JNICALL Java_gov_ornl_ccs_AdiosVarinfo_adios_1inq_1var
 
12
(JNIEnv * env, jobject obj, jlong gp, jstring varname)
 
13
{
 
14
    const char *str;
 
15
    jboolean isCopy;
 
16
    jclass cls;
 
17
    jfieldID fid;
 
18
 
 
19
    ADIOS_VARINFO* vp;
 
20
 
 
21
    str = env->GetStringUTFChars(varname, &isCopy);
 
22
    if (str == NULL) return -1; /* OutOfMemoryError already thrown */
 
23
 
 
24
    vp = adios_inq_var((ADIOS_GROUP *)gp, str);
 
25
    env->ReleaseStringUTFChars(varname, str);
 
26
    
 
27
    cls = env->GetObjectClass(obj);
 
28
    if (cls == NULL) {
 
29
        return -1;
 
30
    }
 
31
 
 
32
    fid = env->GetFieldID(cls, "vp", "J");
 
33
    env->SetLongField(obj, fid, (jlong)vp);
 
34
 
 
35
    fid = env->GetFieldID(cls, "grpid", "I");
 
36
    env->SetIntField(obj, fid, vp->grpid);
 
37
 
 
38
    fid = env->GetFieldID(cls, "varid", "I");
 
39
    env->SetIntField(obj, fid, vp->varid);
 
40
 
 
41
    fid = env->GetFieldID(cls, "type", "I");
 
42
    env->SetIntField(obj, fid, vp->type);
 
43
 
 
44
    fid = env->GetFieldID(cls, "ndim", "I");
 
45
    env->SetIntField(obj, fid, vp->ndim);
 
46
 
 
47
    fid = env->GetFieldID(cls, "timedim", "I");
 
48
    env->SetIntField(obj, fid, vp->timedim);
 
49
 
 
50
    jlongArray dims = env->NewLongArray(vp->ndim);
 
51
    env->SetLongArrayRegion(dims, 0, vp->ndim, (jlong *) vp->dims);    
 
52
 
 
53
    fid = env->GetFieldID(cls, "dims", "[J");
 
54
    env->SetObjectField(obj, fid, dims);
 
55
 
 
56
    if (vp->ndim == 0) {
 
57
        int size = adios_type_size(vp->type, NULL);
 
58
        jbyteArray value = env->NewByteArray(size);
 
59
        env->SetByteArrayRegion(value, 0, size, (jbyte *) vp->value);
 
60
 
 
61
        fid = env->GetFieldID(cls, "value", "[B");
 
62
        env->SetObjectField(obj, fid, value);
 
63
    } 
 
64
 
 
65
    return 0;
 
66
}
 
67
 
 
68
/*
 
69
 * Class:     gov_ornl_ccs_AdiosVarinfo
 
70
 * Method:    adios_free_varinfo
 
71
 * Signature: ()I
 
72
 */
 
73
JNIEXPORT jint JNICALL Java_gov_ornl_ccs_AdiosVarinfo_adios_1free_1varinfo
 
74
(JNIEnv * env, jobject obj)
 
75
{
 
76
    jclass cls;
 
77
    jfieldID fid;
 
78
    jlong vp;
 
79
 
 
80
    cls = env->GetObjectClass(obj);
 
81
    fid = env->GetFieldID(cls, "vp", "J");
 
82
    vp = env->GetLongField(obj, fid);
 
83
 
 
84
    adios_free_varinfo((ADIOS_VARINFO*)vp);
 
85
 
 
86
    env->SetLongField(obj, fid, 0);
 
87
 
 
88
    return 0;
 
89
}
 
90
 
 
91
/*
 
92
 * Class:     gov_ornl_ccs_AdiosVarinfo
 
93
 * Method:    adios_read_var_byid
 
94
 * Signature: (JI[J[J)[D
 
95
 */
 
96
JNIEXPORT jdoubleArray JNICALL Java_gov_ornl_ccs_AdiosVarinfo_adios_1read_1var_1byid
 
97
(JNIEnv * env, jobject obj, jlong gp, jint varid, jlongArray start, jlongArray count)
 
98
{
 
99
    jint len = env->GetArrayLength(count);
 
100
 
 
101
    if (len != env->GetArrayLength(start))
 
102
        return NULL;
 
103
 
 
104
    jlong *startarr = env->GetLongArrayElements(start, NULL);
 
105
    jlong *countarr = env->GetLongArrayElements(count, NULL);
 
106
 
 
107
    jlong ncount = 1;
 
108
    for (jint i = 0; i < len; i++)
 
109
        ncount *= countarr[i];
 
110
 
 
111
    jdoubleArray result = env->NewDoubleArray(ncount);
 
112
    jdouble *data = env->GetDoubleArrayElements(result, NULL);
 
113
 
 
114
    int64_t nbytes = adios_read_var_byid((ADIOS_GROUP*)gp, (int) varid, (uint64_t *)startarr, (uint64_t *)countarr, (void *)data);
 
115
 
 
116
    env->ReleaseLongArrayElements(start, startarr, 0);
 
117
    env->ReleaseLongArrayElements(count, countarr, 0);
 
118
    env->ReleaseDoubleArrayElements(result, data, 0);
 
119
 
 
120
    return result;
 
121
}
 
122
 
 
123
#define READ_ARRAY(JTYPE, CTYPE)                                        \
 
124
    /* std::cout << __FUNCTION__ << "..." << std::endl; */              \
 
125
    int result;                                                         \
 
126
    jint len = env->GetArrayLength(count);                              \
 
127
    if (len != env->GetArrayLength(start))  return 0;                   \
 
128
    jlong *startarr = env->GetLongArrayElements(start, NULL);           \
 
129
    jlong *countarr = env->GetLongArrayElements(count, NULL);           \
 
130
    jlong ncount = 1;                                                   \
 
131
    for (jint i = 0; i < len; i++) ncount *= countarr[i];               \
 
132
    JTYPE *data = env->Get ##CTYPE ##ArrayElements(val, NULL);          \
 
133
    result = adios_read_var_byid((ADIOS_GROUP*)gp, (int) varid, (uint64_t *)startarr, (uint64_t *)countarr, (void *)data); \
 
134
    env->ReleaseLongArrayElements(start, startarr, 0);                  \
 
135
    env->ReleaseLongArrayElements(count, countarr, 0);                  \
 
136
    env->Release ##CTYPE ##ArrayElements(val, data, 0);                 \
 
137
    return result;
 
138
 
 
139
#define FUNC_READ_ARRAY(FNAME, JTYPE, CTYPE)                            \
 
140
    JNIEXPORT jint JNICALL FNAME                                        \
 
141
    (JNIEnv * env, jobject obj, jlong gp, jint varid, jlongArray start, jlongArray count, JTYPE ##Array val) \
 
142
    {                                                                   \
 
143
        READ_ARRAY(JTYPE, CTYPE);                                       \
 
144
    }
 
145
 
 
146
/*
 
147
 * Class:     gov_ornl_ccs_AdiosVarinfo
 
148
 * Method:    adios_read
 
149
 * Signature: (JI[J[J[B)I
 
150
 */
 
151
 
 
152
FUNC_READ_ARRAY (
 
153
    Java_gov_ornl_ccs_AdiosVarinfo_adios_1read__JI_3J_3J_3B,
 
154
    jbyte,
 
155
    Byte)
 
156
 
 
157
FUNC_READ_ARRAY (
 
158
    Java_gov_ornl_ccs_AdiosVarinfo_adios_1read__JI_3J_3J_3I,
 
159
    jint,
 
160
    Int)
 
161
 
 
162
FUNC_READ_ARRAY (
 
163
    Java_gov_ornl_ccs_AdiosVarinfo_adios_1read__JI_3J_3J_3J,
 
164
    jlong,
 
165
    Long)
 
166
 
 
167
FUNC_READ_ARRAY (
 
168
    Java_gov_ornl_ccs_AdiosVarinfo_adios_1read__JI_3J_3J_3F,
 
169
    jfloat,
 
170
    Float)
 
171
 
 
172
FUNC_READ_ARRAY (
 
173
    Java_gov_ornl_ccs_AdiosVarinfo_adios_1read__JI_3J_3J_3D,
 
174
    jdouble,
 
175
    Double)