File: gov_ornl_ccs_AdiosFile.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 (102 lines) | stat: -rw-r--r-- 2,738 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
98
99
100
101
102
#include "gov_ornl_ccs_AdiosFile.h"

#include <adios_read.h>

/*
 * Class:     gov_ornl_ccs_AdiosFile
 * Method:    adios_fopen
 * Signature: (Ljava/lang/String;)I
 */
JNIEXPORT jint JNICALL Java_gov_ornl_ccs_AdiosFile_adios_1fopen
(JNIEnv * env, jobject obj, jstring path, jlong comm)
{
    //std::cout << __FUNCTION__ << "..." << std::endl;

    const char *str;
    int result;
    jboolean isCopy;
    jclass cls;
    jfieldID fid;

    ADIOS_FILE* fp;

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

    fp = adios_fopen(str, (MPI_Comm) comm);
    env->ReleaseStringUTFChars(path, str);

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

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

    fid = env->GetFieldID(cls, "groups_count", "I");
    env->SetIntField(obj, fid, fp->groups_count);

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

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

    fid = env->GetFieldID(cls, "tidx_start", "I");
    env->SetIntField(obj, fid, fp->tidx_start);

    fid = env->GetFieldID(cls, "ntimesteps", "I");
    env->SetIntField(obj, fid, fp->ntimesteps);

    fid = env->GetFieldID(cls, "version", "I");
    env->SetIntField(obj, fid, fp->version);

    fid = env->GetFieldID(cls, "file_size", "J");
    env->SetIntField(obj, fid, fp->file_size);

    fid = env->GetFieldID(cls, "endianness", "I");
    env->SetIntField(obj, fid, fp->endianness);

    jclass stringClass = env->FindClass("java/lang/String");
    jobjectArray group_namelist = env->NewObjectArray(fp->groups_count, stringClass, NULL);

    for (int i = 0; i < fp->groups_count; i++)
    {
        jstring group_name = env->NewStringUTF(fp->group_namelist[i]);
        env->SetObjectArrayElement(group_namelist, i, group_name);
    }

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

    return 0;
}

/*
 * Class:     gov_ornl_ccs_AdiosFile
 * Method:    adios_fclose
 * Signature: ()I
 */
JNIEXPORT jint JNICALL Java_gov_ornl_ccs_AdiosFile_adios_1fclose
(JNIEnv * env, jobject obj)
{
    jclass cls;
    jfieldID fid;
    jlong fp;
    jint result;

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

    result = adios_fclose((ADIOS_FILE*)fp);

    fid = env->GetFieldID(cls, "fp", "J");
    env->SetLongField(obj, fid, 0);

    return result;
}