]> rtime.felk.cvut.cz Git - orte.git/blob - orte/libjorte/JORTERecvInfoHelpers.c
JORTE: add static asserts on values of platform-specific sizes
[orte.git] / orte / libjorte / JORTERecvInfoHelpers.c
1 #include <stdlib.h>
2 #include <stdint.h>
3 #include <inttypes.h>
4 #include <stddef.h>
5 #include <assert.h>
6
7 // library header file's path
8 #include "orte_all.h"
9 // pregenerated header
10 #include "jorte/org_ocera_orte_types_RecvInfo.h"
11 // enable TEST_STAGE run level
12 #include "jorte/4all.h"
13 // new data types
14 #include "jorte/jorte_typedefs_defines.h"
15 #include "jorte/jorte_protos_api.h"
16
17 /*
18  * Class:     org_ocera_orte_types_RecvInfo
19  * Method:    c_helper
20  * Signature: (Ljava/nio/ByteBuffer;)V
21  */
22 JNIEXPORT void JNICALL Java_org_ocera_orte_types_RecvInfo_c_1helper
23   (JNIEnv *env, jclass cls, jobject b_buffer) {
24
25     _Static_assert(sizeof(char*) == 1 || \
26                    sizeof(char*) == 2 || \
27                    sizeof(char*) == 4 || \
28                    sizeof(char*) == 8, \
29                    "char* has incompatible size");
30     _Static_assert(sizeof(ORTERecvStatus) == 1 || \
31                    sizeof(ORTERecvStatus) == 2 || \
32                    sizeof(ORTERecvStatus) == 4 || \
33                    sizeof(ORTERecvStatus) == 8, \
34                    "ORTERecvStatus has incompatible size");
35
36     int32_t* buffer = (*env)->GetDirectBufferAddress(env, b_buffer);
37     
38     buffer[0] = (int32_t)sizeof(ORTERecvInfo);
39     buffer[1] = (int32_t)sizeof(ORTERecvStatus);
40     buffer[2] = (int32_t)sizeof(char*);
41     buffer[3] = (int32_t)offsetof(ORTERecvInfo,status);
42     buffer[4] = (int32_t)offsetof(ORTERecvInfo,topic);
43     buffer[5] = (int32_t)offsetof(ORTERecvInfo,type);
44     buffer[6] = (int32_t)offsetof(ORTERecvInfo,senderGUID);
45     buffer[7] = (int32_t)offsetof(ORTERecvInfo,localTimeReceived);
46     buffer[8] = (int32_t)offsetof(ORTERecvInfo,remoteTimePublished);
47     buffer[9] = (int32_t)offsetof(ORTERecvInfo,sn);
48     buffer[10] = (int32_t)offsetof(GUID_RTPS,hid);
49     buffer[11] = (int32_t)offsetof(GUID_RTPS,aid);
50     buffer[12] = (int32_t)offsetof(GUID_RTPS,oid);
51     buffer[13] = (int32_t)offsetof(NtpTime,seconds);
52     buffer[14] = (int32_t)offsetof(NtpTime,fraction);
53     buffer[15] = (int32_t)offsetof(SequenceNumber,high);
54     buffer[16] = (int32_t)offsetof(SequenceNumber,low);
55   }
56
57 /*
58  * Class:     org_ocera_orte_types_RecvInfo
59  * Method:    get_string
60  * Signature: (J)Ljava/lang/String;
61  */
62 JNIEXPORT jstring JNICALL Java_org_ocera_orte_types_RecvInfo_get_1string
63   (JNIEnv *env, jclass cls, jlong string_ptr) {
64     return (*env)->NewStringUTF(env, (char*) string_ptr);
65   }