Trisurf Monte Carlo simulator
Samo Penic
2019-02-28 ca9f26089df29fec5995ed4f19a06c29f7f4b12e
src/plugins.c
@@ -103,6 +103,10 @@
      fatal("Exiting",235);
   }
   ts_plugin_details* (*get_plugin_details)(void) = dlsym(plugin->libhandle, "init");
   if(get_plugin_details==NULL){
      ts_fprintf(stderr,"Plugin %s invalid. No init() function.\n", filename);
      fatal("Exiting", 235);
   }
   plugin->details = get_plugin_details();
   plugin->function = (ts_plugin_function *)calloc(1,sizeof(ts_plugin_function));
   
@@ -110,8 +114,10 @@
   plugin->function->at_start = dlsym(plugin->libhandle, "at_start");
   plugin->function->after_vesicle_init = dlsym(plugin->libhandle, "after_vesicle_init");
   plugin->function->vm_hard_constraint = dlsym(plugin->libhandle, "vm_hard_constraint");
   plugin->function->vm_energy_before = dlsym(plugin->libhandle, "vm_energy_before");
   plugin->function->vm_energy_after = dlsym(plugin->libhandle, "vm_energy_after");
   plugin->function->vm_energy_before_prepare = dlsym(plugin->libhandle, "vm_energy_before_prepare");
   plugin->function->vm_energy_before_execute = dlsym(plugin->libhandle, "vm_energy_before_execute");
   plugin->function->vm_energy_after_prepare = dlsym(plugin->libhandle, "vm_energy_after_prepare");
   plugin->function->vm_energy_after_execute = dlsym(plugin->libhandle, "vm_energy_after_execute");
   plugin->function->vm_new_state_rejected = dlsym(plugin->libhandle, "vm_new_state_rejected");
   plugin->function->vm_new_state_accepted = dlsym(plugin->libhandle, "vm_new_state_accepted");
@@ -119,12 +125,40 @@
}
ts_plugin_chain *plugin_to_chain(ts_plugin_chain *chain, ts_plugin *plugin){
   ts_plugin_chain *retchain;
   if(chain!=NULL){
      retchain=chain;
      while(chain->next!=NULL){
         chain=chain->next;
      }
      chain->next=(ts_plugin_chain *)calloc(1,sizeof(ts_plugin_chain));
      chain->next->plugin=plugin;
      return retchain;
   } else {
      chain=(ts_plugin_chain *)calloc(1,sizeof(ts_plugin_chain));
      chain->plugin=plugin;
      return chain;
   }
}
ts_plugin_list *init_plugin_list(ts_char **plugin_filenames, ts_uint number_of_plugins){
   ts_plugin_list *plist=(ts_plugin_list *)calloc(1, sizeof(ts_plugin_list));
   plist->plugin=(ts_plugin **)calloc(number_of_plugins, sizeof(ts_plugin *));
   plist->chain=(ts_plugin_chains *)calloc(1, sizeof(ts_plugin_chains));
   for(int i=0;i<number_of_plugins;i++){
      plist->plugin[i]=init_plugin(plugin_filenames[i]);
      if(plist->plugin[i]->function->cleanup!=NULL){
         plist->chain->cleanup=plugin_to_chain(plist->chain->cleanup, plist->plugin[i]);
      }
      if(plist->plugin[i]->function->at_start!=NULL){
         plist->chain->at_start=plugin_to_chain(plist->chain->at_start, plist->plugin[i]);
      }
   }
   //printf("%s", plist->chain->at_start->next->plugin->filename);
   plist->n=number_of_plugins;
   return plist;
}   
@@ -137,9 +171,10 @@
   free(plugin);
}
void free_plugin_list(ts_plugin_list *plist){
void plugin_list_free(ts_plugin_list *plist){
   for(int i=0;i<plist->n;i++){
      free_plugin(plist->plugin[i]);
   }
   free(plist->chain);
   free(plist);
}