Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
28b4f6ea47ecf64e8c753de9fdf6cccd618507eb
[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   NetworkLink **lout = (NetworkLink **)xbt_dynar_to_array($1);
44   jenv->SetLongArrayRegion($result, 0, l, (const jlong*)lout);
45   free(lout);
46 }
47
48 /* Allow to subclass Plugin and send java object to C++ code */
49 %feature("director") Plugin;
50
51 %include "src/bindings/java/surf_swig.hpp"
52
53 %nodefaultctor Model;
54 class Model {
55 public:
56   const char *getName();
57 };
58
59 class Resource {
60 public:
61   Resource();
62   const char *getName();
63   virtual bool isUsed()=0;
64   lmm_constraint *getConstraint();
65   s_xbt_dict *getProperties();
66 };
67
68 class Cpu : public Resource {
69 public:
70   Cpu();
71   ~Cpu();
72   double getCurrentPowerPeak();
73 };
74
75 class NetworkLink : public Resource {
76 public:
77   NetworkLink();
78   ~NetworkLink();
79   double getBandwidth();
80   void updateBandwidth(double value, double date=surf_get_clock());
81   double getLatency();
82   void updateLatency(double value, double date=surf_get_clock());
83 };
84
85 class Action {
86 public:
87   Model *getModel();
88   lmm_variable *getVariable();
89   double getBound();
90   void setBound(double bound);
91 };
92
93 class CpuAction : public Action {
94 public:
95 %extend {
96   Cpu *getCpu() {return getActionCpu($self);}
97 }
98 };
99
100 %nodefaultctor NetworkAction;
101 class NetworkAction : public Action {
102 public:
103 %extend {
104   double getLatency() {return $self->m_latency;}
105 }
106 };
107
108 %nodefaultctor RoutingEdge;
109 class RoutingEdge {
110 public:
111   virtual char *getName()=0;
112 };
113
114 %rename lmm_constraint LmmConstraint;
115 struct lmm_constraint {
116 %extend {
117   double getUsage() {return lmm_constraint_get_usage($self);}
118 }
119 };
120
121 %rename lmm_variable LmmVariable;
122 struct lmm_variable {
123 %extend {
124   double getValue() {return lmm_variable_getvalue($self);}
125 }
126 };
127
128 %rename s_xbt_dict XbtDict;
129 struct s_xbt_dict {
130 %extend {
131   char *getValue(char *key) {return (char*)xbt_dict_get_or_null($self, key);}
132 }
133 };
134
135 %rename e_surf_action_state_t ActionState;
136 typedef enum {
137   SURF_ACTION_READY = 0,        /**< Ready        */
138   SURF_ACTION_RUNNING,          /**< Running      */
139   SURF_ACTION_FAILED,           /**< Task Failure */
140   SURF_ACTION_DONE,             /**< Completed    */
141   SURF_ACTION_TO_FREE,          /**< Action to free in next cleanup */
142   SURF_ACTION_NOT_IN_THE_SYSTEM
143                                 /**< Not in the system anymore. Why did you ask ? */
144 } e_surf_action_state_t;
145
146 %rename e_surf_resource_state_t ResourceState;
147 typedef enum {
148   SURF_RESOURCE_ON = 1,                   /**< Up & ready        */
149   SURF_RESOURCE_OFF = 0                   /**< Down & broken     */
150 } e_surf_resource_state_t;