File: gov_ornl_ccs_AdiosGroup.cxx

package info (click to toggle)
adios 1.13.1-31
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 23,692 kB
  • sloc: ansic: 133,236; f90: 8,791; sh: 7,779; python: 7,648; xml: 3,793; makefile: 2,996; cpp: 2,340; java: 626; sed: 16; perl: 8
file content (97 lines) | stat: -rw-r--r-- 2,533 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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include "gov_ornl_ccs_AdiosGroup.h"

#include <adios_read.h>

/*
 * Class:     gov_ornl_ccs_AdiosGroup
 * Method:    adios_gopen
 * Signature: (JLjava/lang/String;)I
 */
JNIEXPORT jint JNICALL Java_gov_ornl_ccs_AdiosGroup_adios_1gopen
(JNIEnv * env, jobject obj, jlong fp, jstring grpname)
{
    const char *str;
    jboolean isCopy;
    jclass cls;
    jfieldID fid;

    ADIOS_GROUP* gp;

    str = env->GetStringUTFChars(grpname, &isCopy);
    if (str == NULL) return -1; /* OutOfMemoryError already thrown */

    gp = adios_gopen((ADIOS_FILE *)fp, str);

    env->ReleaseStringUTFChars(grpname, str);
    
    cls = env->GetObjectClass(obj);
    if (cls == NULL) {
        return -1;
    }

    fid = env->GetFieldID(cls, "gp", "J");
    env->SetLongField(obj, fid, (jlong)gp);

    fid = env->GetFieldID(cls, "gh", "J");
    env->SetLongField(obj, fid, gp->gh);

    fid = env->GetFieldID(cls, "grpid", "I");
    env->SetIntField(obj, fid, gp->grpid);

    fid = env->GetFieldID(cls, "vars_count", "I");
    env->SetIntField(obj, fid, gp->vars_count);

    fid = env->GetFieldID(cls, "attrs_count", "I");
    env->SetIntField(obj, fid, gp->attrs_count);

    
    jclass stringClass = env->FindClass("java/lang/String");

    jobjectArray var_namelist = env->NewObjectArray(gp->vars_count, stringClass, NULL);

    for (int i = 0; i < gp->vars_count; i++)
    {
        jstring var_name = env->NewStringUTF(gp->var_namelist[i]);
        env->SetObjectArrayElement(var_namelist, i, var_name);
    }

    fid = env->GetFieldID(cls, "var_namelist", "[Ljava/lang/String;");    
    env->SetObjectField(obj, fid, var_namelist);

    jobjectArray attr_namelist = env->NewObjectArray(gp->attrs_count, stringClass, NULL);

    for (int i = 0; i < gp->attrs_count; i++)
    {
        jstring attr_name = env->NewStringUTF(gp->attr_namelist[i]);
        env->SetObjectArrayElement(attr_namelist, i, attr_name);
    }

    fid = env->GetFieldID(cls, "attr_namelist", "[Ljava/lang/String;");    
    env->SetObjectField(obj, fid, attr_namelist);

    return 0;
}

/*
 * Class:     gov_ornl_ccs_AdiosGroup
 * Method:    adios_gclose
 * Signature: ()I
 */
JNIEXPORT jint JNICALL Java_gov_ornl_ccs_AdiosGroup_adios_1gclose
(JNIEnv * env, jobject obj)
{
    jclass cls;
    jfieldID fid;
    jlong gp;
    jint result;

    cls = env->GetObjectClass(obj);
    fid = env->GetFieldID(cls, "gp", "J");
    gp = env->GetLongField(obj, fid);

    result = adios_gclose((ADIOS_GROUP*)gp);

    env->SetLongField(obj, fid, 0);

    return result;
}