]> rtime.felk.cvut.cz Git - orte.git/blobdiff - orte/libjorte/JORTERecvInfoHelpers.c
Merge branch 'master' of https://github.com/Vajnar/orte
[orte.git] / orte / libjorte / JORTERecvInfoHelpers.c
diff --git a/orte/libjorte/JORTERecvInfoHelpers.c b/orte/libjorte/JORTERecvInfoHelpers.c
new file mode 100644 (file)
index 0000000..fe377b7
--- /dev/null
@@ -0,0 +1,69 @@
+#include <stdlib.h>
+#include <stdint.h>
+#include <inttypes.h>
+#include <stddef.h>
+#include <assert.h>
+
+// library header file's path
+#include "orte_all.h"
+// pregenerated header
+#include "jorte/org_ocera_orte_types_RecvInfo.h"
+// enable TEST_STAGE run level
+#include "jorte/4all.h"
+// new data types
+#include "jorte/jorte_typedefs_defines.h"
+#include "jorte/jorte_protos_api.h"
+
+/*
+ * Class:     org_ocera_orte_types_RecvInfo
+ * Method:    c_helper
+ * Signature: (Ljava/nio/ByteBuffer;)V
+ */
+JNIEXPORT void JNICALL
+Java_org_ocera_orte_types_RecvInfo_c_1helper
+  (JNIEnv *env, jclass cls, jobject b_buffer)
+{
+
+  _Static_assert(sizeof(char *) == 1 ||        \
+                sizeof(char *) == 2 || \
+                sizeof(char *) == 4 || \
+                sizeof(char *) == 8, \
+                "char* has incompatible size");
+  _Static_assert(sizeof(ORTERecvStatus) == 1 ||        \
+                sizeof(ORTERecvStatus) == 2 || \
+                sizeof(ORTERecvStatus) == 4 || \
+                sizeof(ORTERecvStatus) == 8, \
+                "ORTERecvStatus has incompatible size");
+
+  int32_t *buffer = (*env)->GetDirectBufferAddress(env, b_buffer);
+
+  buffer[0] = (int32_t)sizeof(ORTERecvInfo);
+  buffer[1] = (int32_t)sizeof(ORTERecvStatus);
+  buffer[2] = (int32_t)sizeof(char *);
+  buffer[3] = (int32_t)offsetof(ORTERecvInfo, status);
+  buffer[4] = (int32_t)offsetof(ORTERecvInfo, topic);
+  buffer[5] = (int32_t)offsetof(ORTERecvInfo, type);
+  buffer[6] = (int32_t)offsetof(ORTERecvInfo, senderGUID);
+  buffer[7] = (int32_t)offsetof(ORTERecvInfo, localTimeReceived);
+  buffer[8] = (int32_t)offsetof(ORTERecvInfo, remoteTimePublished);
+  buffer[9] = (int32_t)offsetof(ORTERecvInfo, sn);
+  buffer[10] = (int32_t)offsetof(GUID_RTPS, hid);
+  buffer[11] = (int32_t)offsetof(GUID_RTPS, aid);
+  buffer[12] = (int32_t)offsetof(GUID_RTPS, oid);
+  buffer[13] = (int32_t)offsetof(NtpTime, seconds);
+  buffer[14] = (int32_t)offsetof(NtpTime, fraction);
+  buffer[15] = (int32_t)offsetof(SequenceNumber, high);
+  buffer[16] = (int32_t)offsetof(SequenceNumber, low);
+}
+
+/*
+ * Class:     org_ocera_orte_types_RecvInfo
+ * Method:    get_string
+ * Signature: (J)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL
+Java_org_ocera_orte_types_RecvInfo_get_1string
+  (JNIEnv *env, jclass cls, jlong string_ptr)
+{
+  return (*env)->NewStringUTF(env, (char *)string_ptr);
+}