Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
26edfa2f6e2a2344f9b76614cc6bc22e56260e0a
[simgrid.git] / src / jmsg_host.c
1 /* Functions related to the java host instances.                            */
2
3 /* Copyright (c) 2007, 2009, 2010. The SimGrid Team.
4  * All rights reserved.                                                     */
5
6 /* This program is free software; you can redistribute it and/or modify it
7   * under the terms of the license (GNU LGPL) which comes with this package. */
8
9 #include "xbt/str.h"
10 #include "jmsg.h"
11 #include "jmsg_host.h"
12 #include "jxbt_utilities.h"
13
14 jobject jhost_new_instance(JNIEnv * env)
15 {
16
17   jclass cls = jxbt_get_class(env, "simgrid/msg/Host");
18   jmethodID constructor = jxbt_get_jmethod(env, cls, "<init>", "()V");
19
20   if (!constructor)
21     return NULL;
22
23   return (*env)->NewObject(env, cls, constructor);
24 }
25
26 jobject jhost_ref(JNIEnv * env, jobject jhost)
27 {
28   return (*env)->NewGlobalRef(env, jhost);
29 }
30
31 void jhost_unref(JNIEnv * env, jobject jhost)
32 {
33   (*env)->DeleteGlobalRef(env, jhost);
34 }
35
36 void jhost_bind(jobject jhost, m_host_t host, JNIEnv * env)
37 {
38   jfieldID id = jxbt_get_sfield(env, "simgrid/msg/Host", "bind", "J");
39
40   if (!id)
41     return;
42
43   (*env)->SetLongField(env, jhost, id, (jlong) (long) (host));
44 }
45
46 m_host_t jhost_get_native(JNIEnv * env, jobject jhost)
47 {
48   jfieldID id = jxbt_get_sfield(env, "simgrid/msg/Host", "bind", "J");
49
50   if (!id)
51     return NULL;
52
53   return (m_host_t) (long) (*env)->GetLongField(env, jhost, id);
54 }
55
56 const char *jhost_get_name(jobject jhost, JNIEnv * env)
57 {
58   m_host_t host = jhost_get_native(env, jhost);
59   return (const char *) host->name;
60 }
61
62 void jhost_set_name(jobject jhost, jstring jname, JNIEnv * env)
63 {
64   const char *name;
65   m_host_t host = jhost_get_native(env, jhost);
66
67   name = (*env)->GetStringUTFChars(env, jname, 0);
68
69   if (host->name)
70     free(host->name);
71
72   host->name = xbt_strdup(name);
73   (*env)->ReleaseStringUTFChars(env, jname, name);
74 }
75
76 jboolean jhost_is_valid(jobject jhost, JNIEnv * env)
77 {
78   jfieldID id = jxbt_get_sfield(env, "simgrid/msg/Host", "bind", "J");
79
80   if (!id)
81     return 0;
82
83   if ((*env)->GetLongField(env, jhost, id)) {
84     return JNI_TRUE;
85   } else {
86     return JNI_FALSE;
87   }
88 }