Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
rename host callbacks
[simgrid.git] / src / bindings / java / surf.i
index 51a586e..3b78ab2 100644 (file)
@@ -9,13 +9,14 @@
 
 %include "arrays_java.i"
 %include "std_string.i"
+%include "surfdoc.i"
 
 %pragma(java) jniclassimports=%{
 import org.simgrid.NativeLib;
 %}
 %pragma(java) jniclasscode=%{
   static {
-    NativeLib.nativeInit("surf-java");
+    org.simgrid.NativeLib.nativeInit();    
     Runtime.getRuntime().addShutdownHook(
       new Thread() {
         public void run() {
@@ -28,32 +29,134 @@ import org.simgrid.NativeLib;
 %}
 
 %{
+#include "src/surf/surf_interface.hpp"
 #include "src/surf/cpu_interface.hpp"
 #include "src/surf/network_interface.hpp"
 #include "src/surf/trace_mgr_private.h"
 #include "src/bindings/java/surf_swig.hpp"
 #include "src/xbt/dict_private.h"
+
 typedef struct lmm_constraint *lmm_constraint_t;
 typedef xbt_dynar_t DoubleDynar;
-/*class CpuModel : public CpuModel {
+%}
+
+%wrapper %{
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+JNIEXPORT jobject JNICALL Java_org_simgrid_surf_SurfJNI_getAction(JNIEnv *env, jclass cls, jlong jarg1) {
+  simgrid::surf::Action * action = (simgrid::surf::Action *)jarg1;
+  jobject res;
+  simgrid::surf::CpuAction *cpu_action =
+    dynamic_cast<simgrid::surf::CpuAction*>(action);
+  if (cpu_action) {
+    SwigDirector_CpuAction *dir_cpu_action =
+      dynamic_cast<SwigDirector_CpuAction*>(cpu_action);
+    if (dir_cpu_action) {
+      res = dir_cpu_action->swig_get_self(env);\
+    } else {
+      jclass clss = env->FindClass("org/simgrid/surf/CpuAction");\
+      jmethodID constru = env->GetMethodID(clss, "<init>", "()V");\
+      res = env->NewObject(clss, constru);\
+      res = env->NewGlobalRef(res);\
+    }
+  } else {
+    jclass clss = env->FindClass("org/simgrid/surf/Action");\
+    jmethodID constru = env->GetMethodID(clss, "<init>", "()V");\
+    res = env->NewObject(clss, constru);\
+    res = env->NewGlobalRef(res);\
+  }
+  return res;
+}
+
+#define GETDIRECTOR(NAME) \
+JNIEXPORT jobject JNICALL Java_org_simgrid_surf_SurfJNI_get## NAME ## Director(JNIEnv *env, jclass cls, jlong jarg1)\
+{\
+  simgrid::surf::NAME * arg1 = (simgrid::surf::NAME*)jarg1;\
+  SwigDirector_ ##NAME *director = dynamic_cast<SwigDirector_ ##NAME *>(arg1);\
+  jobject res;\
+  if (director) {\
+    res = director->swig_get_self(env);\
+  } else {\
+    jclass clss = env->FindClass("org/simgrid/surf/NAME");\
+    jmethodID constru = env->GetMethodID(clss, "<init>", "()V");\
+    res = env->NewObject(clss, constru);\
+    res = env->NewGlobalRef(res);\
+  }\
+  return res;\
+}
+
+GETDIRECTOR(CpuModel)
+GETDIRECTOR(Cpu)
+GETDIRECTOR(CpuAction)
+
+#ifdef __cplusplus
+}
+#endif
 
-};*/
 %}
 
-/* Handle xbt_dynar_t of NetworkLink */
-JAVA_ARRAYSOFCLASSES(NetworkLink);
-%apply NetworkLink[] {NetworkLinkDynar};
-%typemap(jstype) NetworkLinkDynar "NetworkLink[]"
-%typemap(javain) NetworkLinkDynar "NetworkLink.cArrayUnwrap($javainput)"
+%typemap(freearg) char* name {
+}
+
+/* Handle xbt_dynar_t of Link */
+JAVA_ARRAYSOFCLASSES(Action);
+%apply Action[] {ActionArrayPtr};
+%typemap(jstype) ActionArrayPtr "Action[]"
+%typemap(javain) ActionArrayPtr "Action.cArrayUnwrap($javainput)"
+%typemap(javaout) ActionArrayPtr {
+  long[] cArray = $jnicall;
+  Action[] arrayWrapper = new Action[cArray.length];
+  for (int i=0; i<cArray.length; i++)
+    arrayWrapper[i] = (Action) Surf.getAction(cArray[i]);
+  return arrayWrapper;
+  //   return Action.cArrayWrap($jnicall, $owner);
+}
+%typemap(out) ActionArrayPtr {
+  long l = 0;
+  for(simgrid::surf::ActionList::iterator it($1->begin()), itend($1->end()); it != itend ; ++it) {
+    l++;
+  }
+  $result = jenv->NewLongArray(l);
+  jlong *elts = jenv->GetLongArrayElements($result, NULL);
+  l = 0;
+  for(simgrid::surf::ActionList::iterator it($1->begin()), itend($1->end()); it != itend ; ++it) {
+    elts[l++] = (jlong)static_cast<simgrid::surf::Action*>(&*it);
+  }
+  jenv->ReleaseLongArrayElements($result, elts, 0);
+}
+
+namespace simgrid {
+namespace surf {
+
+class ActionList {
+public:
+  //void push_front(Action &action);
+  //void push_back(Action &action);
+%extend {
+  ActionArrayPtr getArray(){
+    return $self;
+  }
+}
+};
 
-%typemap(javaout) NetworkLinkDynar {
-     return NetworkLink.cArrayWrap($jnicall, $owner);
 }
-%typemap(out) NetworkLinkDynar {
+}
+
+/* Handle xbt_dynar_t of Link */
+JAVA_ARRAYSOFCLASSES(simgrid::surf::Link);
+%apply simgrid::surf::Link[] {LinkDynar};
+%typemap(jstype) LinkDynar "Link[]"
+%typemap(javain) LinkDynar "Link.cArrayUnwrap($javainput)"
+%typemap(javaout) LinkDynar {
+     return Link.cArrayWrap($jnicall, $owner);
+}
+%typemap(out) LinkDynar {
   long l = xbt_dynar_length($1);
   $result = jenv->NewLongArray(l);
   unsigned i;
-  NetworkLink *link;
+  Link *link;
   jlong *elts = jenv->GetLongArrayElements($result, NULL);
   xbt_dynar_foreach($1, i, link) {
     elts[i] = (jlong)link;
@@ -62,11 +165,6 @@ JAVA_ARRAYSOFCLASSES(NetworkLink);
   xbt_dynar_free(&$1);
 }
 
-/*%typemap(out) DoubleDynar {
-    $result = (double[])$1;
-}*/
-
-//typedef xbt_dynar_t DoubleDynar;
 %nodefault DoubleDynar;
 %typemap(jni) DoubleDynar "jdoubleArray"
 %rename(DoubleDynar) Double[];
@@ -75,17 +173,15 @@ JAVA_ARRAYSOFCLASSES(NetworkLink);
 %typemap(out) DoubleDynar {
   long l = xbt_dynar_length($1);
   $result = jenv->NewDoubleArray(l);
-  double *lout = (double *)xbt_dynar_to_array($1);
-  jenv->SetDoubleArrayRegion($result, 0, l, (const jdouble*)lout);
-  free(lout);
+  double *lout = (double *) xbt_dynar_get_ptr($1, 0);
+  jenv->SetDoubleArrayRegion($result, 0, l, (jdouble*)lout);
 }
 %typemap(javadirectorin) DoubleDynar "$jniinput"
 %typemap(directorin,descriptor="[D") DoubleDynar %{
   long l = xbt_dynar_length($1);
   $input = jenv->NewDoubleArray(l);
-  double *lout = (double *)xbt_dynar_to_array($1);
-  jenv->SetDoubleArrayRegion($input, 0, l, (const jdouble*)lout);
-  free(lout);
+  double *lout = (double *) xbt_dynar_get_ptr($1, 0);
+  jenv->SetDoubleArrayRegion($input, 0, l, (jdouble*)lout);
 %}
 %typemap(javain) DoubleDynar "$javainput"
 %typemap(javaout) DoubleDynar {return  $jnicall}
@@ -93,8 +189,48 @@ JAVA_ARRAYSOFCLASSES(NetworkLink);
 /* Allow to subclass Plugin and send java object to C++ code */
 %feature("director") Plugin;
 
+%native(getAction) jobject getAction(jlong jarg1);
+%native(getCpuModelDirector) jobject getCpuModelDirector(jlong jarg1);
+%typemap(javaout) CpuModel * {
+  long cPtr = $jnicall;
+  return (CpuModel)Surf.getCpuModelDirector(cPtr);
+}
+%native(getCpuDirector) jobject getCpuDirector(jlong jarg1);
+%typemap(javaout) Cpu * {
+  long cPtr = $jnicall;
+  return (Cpu)Surf.getCpuDirector(cPtr);
+}
+%native(getCpuActionDirector) jobject getCpuActionDirector(jlong jarg1);
+%typemap(javaout) CpuAction * {
+  long cPtr = $jnicall;
+  return (CpuAction)Surf.getCpuDirector(cPtr);
+}
+
 %include "src/bindings/java/surf_swig.hpp"
 
+namespace simgrid {
+namespace surf {
+
+class Model;
+class CpuModel;
+class HostModel;
+class VMModel;
+class NetworkModel;
+class StorageModel;
+class Resource;
+class ResourceLmm;
+class Host;
+class HostCLM03;
+class NetworkCm02Link;
+class Action;
+class ActionLmm;
+class StorageActionLmm;
+class As;
+class RoutingPlatf;
+
+}
+}
+
 %rename tmgr_trace TmgrTrace;
 %nodefaultctor tmgr_trace;
 struct tmgr_trace {
@@ -125,12 +261,14 @@ struct tmgr_trace_event {
   }
 };
 
+namespace simgrid {
+namespace surf {
 
 %nodefaultctor Model;
 class Model {
 public:
-  Model(const char *name);
-  const char *getName();
+  Model();
+  
   virtual double shareResources(double now);
   virtual double shareResourcesLazy(double now);
   virtual double shareResourcesFull(double now);
@@ -138,74 +276,84 @@ public:
   virtual void updateActionsState(double now, double delta);
   virtual void updateActionsStateLazy(double now, double delta);
   virtual void updateActionsStateFull(double now, double delta);
+
+  virtual simgrid::surf::ActionList *getRunningActionSet();
+
+  virtual void addTraces()=0;
 };
 
 %feature("director") CpuModel;
 class CpuModel : public Model {
 public:
-  CpuModel(const char *name);
+  CpuModel();
   virtual ~CpuModel();
-  virtual Cpu *createResource(const char *name, DoubleDynar power_peak,
+  virtual simgrid::surf::Cpu *createCpu(const char *name,
+                              DoubleDynar power_peak,
                               int pstate, double power_scale,
                               tmgr_trace *power_trace, int core,
                               e_surf_resource_state_t state_initial,
-                              tmgr_trace *state_trace,
-                              s_xbt_dict *cpu_properties)=0;
-  void setState(e_surf_resource_state_t state);
-  virtual void addTraces()=0;
+                              tmgr_trace *state_trace)=0;
 };
 
-
 class Resource {
 public:
   Resource();
   const char *getName();
   virtual bool isUsed()=0;
-  Model *getModel();
+  simgrid::surf::Model *getModel();
 
   virtual e_surf_resource_state_t getState();
   lmm_constraint *getConstraint();
-  s_xbt_dict *getProperties();
   virtual void updateState(tmgr_trace_event *event_type, double value, double date)=0;
 };
 
 %feature("director") Cpu;
 class Cpu : public Resource {
 public:
-  Cpu(Model *model, const char *name, s_xbt_dict *props,
+  Cpu(simgrid::surf::Model *model, const char *name, 
     lmm_constraint *constraint, int core, double powerPeak, double powerScale);
-  Cpu(Model *model, const char *name, s_xbt_dict *props,
+  Cpu(simgrid::surf::Model *model, const char *name, 
     int core, double powerPeak, double powerScale);
   virtual ~Cpu();
-  virtual double getCurrentPowerPeak()=0;
-  virtual CpuAction *execute(double size)=0;
-  virtual CpuAction *sleep(double duration)=0;
+  virtual double getCurrentPowerPeak();
+  virtual simgrid::surf::CpuAction *execute(double size)=0;
+  virtual simgrid::surf::CpuAction *sleep(double duration)=0;
   virtual int getCore();
   virtual double getSpeed(double load);
   virtual double getAvailableSpeed();
   virtual double getPowerPeakAt(int pstate_index)=0;
   virtual int getNbPstates()=0;
-  virtual void setPowerPeakAt(int pstate_index)=0;
+  virtual void setPstate(int pstate_index)=0;
+  virtual int  getPstate()=0;
   void setState(e_surf_resource_state_t state);
 };
 
-class NetworkLink : public Resource {
+class Link : public simgrid::surf::Resource {
 public:
-  NetworkLink();
-  ~NetworkLink();
+  Link();
+  ~Link();
   double getBandwidth();
   void updateBandwidth(double value, double date=surf_get_clock());
   double getLatency();
   void updateLatency(double value, double date=surf_get_clock());
+  s_xbt_dict *getProperties();
 };
 
 %nodefaultctor Action;
 class Action {
 public:
+  Action(Model *model, double cost, bool failed);
+  virtual ~Action();
   Model *getModel();
   lmm_variable *getVariable();
+  e_surf_action_state_t getState();
+  bool isSuspended();
   double getBound();
   void setBound(double bound);
+  void updateRemains(double delta);
+  virtual double getRemains();
+  virtual void setPriority(double priority);
+  virtual void setState(e_surf_action_state_t state);
 };
 
 %nodefaultctor CpuAction;
@@ -214,7 +362,7 @@ class CpuAction : public Action {
 public:
 CpuAction(Model *model, double cost, bool failed);
 %extend {
-  Cpu *getCpu() {return getActionCpu($self);}
+  simgrid::surf::Cpu *getCpu() {return getActionCpu($self);}
 }
 };
 
@@ -233,6 +381,9 @@ public:
   virtual char *getName()=0;
 };
 
+}
+}
+
 %rename lmm_constraint LmmConstraint;
 struct lmm_constraint {
 %extend {