]> gerrit.simantics Code Review - simantics/fmil.git/blobdiff - org.simantics.fmil.core/native/FMUSimulator/src/fmu_control.cpp
Add atomic counter for instanceName and update README, fix loadFMU
[simantics/fmil.git] / org.simantics.fmil.core / native / FMUSimulator / src / fmu_control.cpp
index 80c66ce57495134b3ad88665250ccf550ca79557..bb8e0762d041dee5d821784ab570b246a716b5d6 100644 (file)
@@ -19,6 +19,7 @@
 #include <vector>
 #include <iostream>
 #include <regex>
+#include <atomic>
 
 #include <org_simantics_fmil_FMILJNI.h>
 
@@ -31,11 +32,14 @@ extern "C" {
 
 #define PRINT(fmt,args) { FILE *fp = fopen("R:\\Simantics\\Sysdyn\\log.txt", "ab"); fprintf(fp, fmt, args); fclose(fp); }
 
-#include <direct.h>
-#define GetCurrentDir _getcwd
-
 using namespace std;
 
+static std::atomic<int> instanceNameID;
+
+int create_id() {
+    return instanceNameID++;
+}
+
 struct FMI1 {
 
        void *fmu;
@@ -142,7 +146,6 @@ bool exists(string id) {
 JNIEXPORT jint JNICALL Java_org_simantics_fmil_core_FMIL_loadFMUFile_1 
        (JNIEnv *env, jobject obj, jstring path, jstring tempDir) {
 
-       HMODULE module = NULL;
        FMI1 fmi1;
        FMIL_Variable *vars;
        FMIL_DeclaredType *types;
@@ -455,7 +458,6 @@ JNIEXPORT jdoubleArray JNICALL Java_org_simantics_fmil_core_FMIL_getSubscribedRe
        jsize n = env -> GetArrayLength(result);
        int *vrs;
        const char *error = "";
-       int returnValue = 0;
 
        FMI1 fmi = fmus[id];
        if(n > 0) {
@@ -477,14 +479,16 @@ JNIEXPORT jdoubleArray JNICALL Java_org_simantics_fmil_core_FMIL_getSubscribedRe
 JNIEXPORT jint JNICALL Java_org_simantics_fmil_core_FMIL_instantiateSimulation_1
   (JNIEnv *env, jobject obj, jint id) {
 
+         int uniqueId = create_id();
+         std::string instanceName = std::to_string(uniqueId);
          int returnValue;
          const char *error = "";
 
          FMI1 &fmi = fmus[id];
          if (fmi.version == 1) {
-               returnValue = FMI1_CS_INSTANTIATE(fmi.fmu, "", &error);
+                 returnValue = FMI1_CS_INSTANTIATE(fmi.fmu, instanceName, &error);
          } else if (fmi.version == 2) {
-                 returnValue = FMI2_CS_INSTANTIATE(fmi.fmu, "", &error);
+                 returnValue = FMI2_CS_INSTANTIATE(fmi.fmu, instanceName, &error);
          }
          if(returnValue != 0) {
                string message = "No FMU loaded: ";
@@ -525,7 +529,7 @@ JNIEXPORT jobjectArray JNICALL Java_org_simantics_fmil_core_FMIL_getAllVariables
                        env->FindClass("java/lang/String"),  
                        env->NewStringUTF(""));  
    
-       for(int i=0;i<fmus[id].variables.size();i++) {  
+       for(unsigned int i=0;i<fmus[id].variables.size();i++) {  
                env->SetObjectArrayElement(ret,i,env->NewStringUTF(fmus[id].variables[i].c_str()));  
        }  
 
@@ -540,7 +544,7 @@ JNIEXPORT jobjectArray JNICALL Java_org_simantics_fmil_core_FMIL_getAllVariableD
                        env->FindClass("java/lang/String"),  
                        env->NewStringUTF(""));  
    
-       for(int i=0;i<fmus[id].descriptions.size();i++) {  
+       for(unsigned int i=0;i<fmus[id].descriptions.size();i++) {  
                env->SetObjectArrayElement(ret,i,env->NewStringUTF(fmus[id].descriptions[i].c_str()));  
        }  
 
@@ -555,7 +559,7 @@ JNIEXPORT jobjectArray JNICALL Java_org_simantics_fmil_core_FMIL_getAllVariableD
                        env->FindClass("java/lang/String"),  
                        env->NewStringUTF(""));
    
-       for(int i=0;i<fmus[id].declaredTypes.size();i++) {  
+       for(unsigned int i=0;i<fmus[id].declaredTypes.size();i++) {  
                env->SetObjectArrayElement(ret,i,env->NewStringUTF(fmus[id].declaredTypes[i].c_str()));  
        }  
 
@@ -610,8 +614,7 @@ JNIEXPORT jintArray JNICALL Java_org_simantics_fmil_core_FMIL_getAllVariableVari
        jint* resultElements = env -> GetIntArrayElements(result, &isCopy);
        jsize n = env -> GetArrayLength(result);
 
-       int i;
-       for (i = 0; i < n; i++) {
+       for (jsize i = 0; i < n; i++) {
                resultElements[i] = fmus[id].variabilities[i];
        } 
          
@@ -630,8 +633,7 @@ JNIEXPORT jintArray JNICALL Java_org_simantics_fmil_core_FMIL_getAllVariableCaus
        jint* resultElements = env -> GetIntArrayElements(result, &isCopy);
        jsize n = env -> GetArrayLength(result);
 
-       int i;
-       for (i = 0; i < n; i++) {
+       for (jsize i = 0; i < n; i++) {
                resultElements[i] = fmus[id].causalities[i];
        } 
          
@@ -650,7 +652,7 @@ JNIEXPORT jobjectArray JNICALL Java_org_simantics_fmil_core_FMIL_getAllDeclaredT
                        env->FindClass("java/lang/String"),  
                        env->NewStringUTF(""));
    
-       for(int i=0;i<fmus[id].declaredTypeNames.size();i++) {  
+       for(unsigned int i=0;i<fmus[id].declaredTypeNames.size();i++) {  
                env->SetObjectArrayElement(ret,i,env->NewStringUTF(fmus[id].declaredTypeNames[i].c_str()));  
        }  
 
@@ -665,7 +667,7 @@ JNIEXPORT jobjectArray JNICALL Java_org_simantics_fmil_core_FMIL_getAllDeclaredT
                        env->FindClass("java/lang/String"),  
                        env->NewStringUTF(""));
    
-       for(int i=0;i<fmus[id].typeDescriptions.size();i++) {  
+       for(unsigned int i=0;i<fmus[id].typeDescriptions.size();i++) {  
                env->SetObjectArrayElement(ret,i,env->NewStringUTF(fmus[id].typeDescriptions[i].c_str()));  
        }  
 
@@ -680,7 +682,7 @@ JNIEXPORT jobjectArray JNICALL Java_org_simantics_fmil_core_FMIL_getAllDeclaredT
                        env->FindClass("java/lang/String"),  
                        env->NewStringUTF(""));
    
-       for(int i=0;i<fmus[id].quantities.size();i++) {  
+       for(unsigned int i=0;i<fmus[id].quantities.size();i++) {  
                env->SetObjectArrayElement(ret,i,env->NewStringUTF(fmus[id].quantities[i].c_str()));  
        }  
 
@@ -695,7 +697,7 @@ JNIEXPORT jobjectArray JNICALL Java_org_simantics_fmil_core_FMIL_getAllDeclaredT
                        env->FindClass("java/lang/String"),  
                        env->NewStringUTF(""));
    
-       for(int i=0;i<fmus[id].units.size();i++) {  
+       for(unsigned int i=0;i<fmus[id].units.size();i++) {  
                env->SetObjectArrayElement(ret,i,env->NewStringUTF(fmus[id].units[i].c_str()));  
        }  
 
@@ -981,4 +983,4 @@ JNIEXPORT jstring JNICALL Java_org_simantics_fmil_core_FMIL_getStringValue_1
        */
          return 0;
 
-}
\ No newline at end of file
+}