Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
91e75dce72d23cb0536bfe37a0973d3ae8f4b791
[simgrid.git] / src / bindings / java / surf.i
1 /* File : example.i */
2 %module(directors="1") Surf
3
4 %include "arrays_java.i"
5
6 %pragma(java) jniclassimports=%{
7 import org.simgrid.NativeLib;
8 %}
9 %pragma(java) jniclasscode=%{
10   static {
11     NativeLib.nativeInit("surf-java");
12     Runtime.getRuntime().addShutdownHook(
13       new Thread() {
14         public void run() {
15           Thread.currentThread().setName( "Destroyer" );
16           Surf.clean();
17         }
18       }
19     );
20   }
21 %}
22
23 %{
24 #include "src/surf/cpu_interface.hpp"
25 #include "src/surf/network_interface.hpp"
26 #include "src/bindings/java/surf_swig.hpp"
27 #include "src/xbt/dict_private.h"
28 typedef struct lmm_constraint *lmm_constraint_t;
29 %}
30
31 /* Handle xbt_dynar_t of NetworkLink */
32 JAVA_ARRAYSOFCLASSES(NetworkLink);
33 %apply NetworkLink[] {NetworkLinkDynar};
34 %typemap(jstype) NetworkLinkDynar "NetworkLink[]"
35 %typemap(javain) NetworkLinkDynar "NetworkLink.cArrayUnwrap($javainput)"
36
37 %typemap(javaout) NetworkLinkDynar {
38      return NetworkLink.cArrayWrap($jnicall, $owner);
39 }
40 %typemap(out) NetworkLinkDynar {
41   long l = xbt_dynar_length($1);
42   $result = jenv->NewLongArray(l);
43   unsigned i;
44   NetworkLink *link;
45   jlong *elts = jenv->GetLongArrayElements($result, NULL);
46   xbt_dynar_foreach($1, i, link) {
47     elts[i] = (jlong)link;
48   }
49   jenv->ReleaseLongArrayElements($result, elts, 0);
50   xbt_dynar_free(&$1);
51 }
52
53 /* Allow to subclass Plugin and send java object to C++ code */
54 %feature("director") Plugin;
55
56 %include "src/bindings/java/surf_swig.hpp"
57
58 %nodefaultctor Model;
59 class Model {
60 public:
61   const char *getName();
62 };
63
64 class Resource {
65 public:
66   Resource();
67   const char *getName();
68   virtual bool isUsed()=0;
69   lmm_constraint *getConstraint();
70   s_xbt_dict *getProperties();
71 };
72
73 class Cpu : public Resource {
74 public:
75   Cpu();
76   ~Cpu();
77   double getCurrentPowerPeak();
78 };
79
80 class NetworkLink : public Resource {
81 public:
82   NetworkLink();
83   ~NetworkLink();
84   double getBandwidth();
85   void updateBandwidth(double value, double date=surf_get_clock());
86   double getLatency();
87   void updateLatency(double value, double date=surf_get_clock());
88 };
89
90 class Action {
91 public:
92   Model *getModel();
93   lmm_variable *getVariable();
94   double getBound();
95   void setBound(double bound);
96 };
97
98 class CpuAction : public Action {
99 public:
100 %extend {
101   Cpu *getCpu() {return getActionCpu($self);}
102 }
103 };
104
105 %nodefaultctor NetworkAction;
106 class NetworkAction : public Action {
107 public:
108 %extend {
109   double getLatency() {return $self->m_latency;}
110 }
111 };
112
113 %nodefaultctor RoutingEdge;
114 class RoutingEdge {
115 public:
116   virtual char *getName()=0;
117 };
118
119 %rename lmm_constraint LmmConstraint;
120 struct lmm_constraint {
121 %extend {
122   double getUsage() {return lmm_constraint_get_usage($self);}
123 }
124 };
125
126 %rename lmm_variable LmmVariable;
127 struct lmm_variable {
128 %extend {
129   double getValue() {return lmm_variable_getvalue($self);}
130 }
131 };
132
133 %rename s_xbt_dict XbtDict;
134 struct s_xbt_dict {
135 %extend {
136   char *getValue(char *key) {return (char*)xbt_dict_get_or_null($self, key);}
137 }
138 };
139
140 %rename e_surf_action_state_t ActionState;
141 typedef enum {
142   SURF_ACTION_READY = 0,        /**< Ready        */
143   SURF_ACTION_RUNNING,          /**< Running      */
144   SURF_ACTION_FAILED,           /**< Task Failure */
145   SURF_ACTION_DONE,             /**< Completed    */
146   SURF_ACTION_TO_FREE,          /**< Action to free in next cleanup */
147   SURF_ACTION_NOT_IN_THE_SYSTEM
148                                 /**< Not in the system anymore. Why did you ask ? */
149 } e_surf_action_state_t;
150
151 %rename e_surf_resource_state_t ResourceState;
152 typedef enum {
153   SURF_RESOURCE_ON = 1,                   /**< Up & ready        */
154   SURF_RESOURCE_OFF = 0                   /**< Down & broken     */
155 } e_surf_resource_state_t;