@@ -172,37 +172,34 @@ std::map<std::string, std::string> convertMapStructToStdMap(string_map* map) {
172172}
173173
174174char * copyStringToCharPtr (const std::string& str) {
175- char * c = new char [ str.size () + 1 ] ;
175+ char * c = initializeCharPointer ( str.size () + 1 ) ;
176176 str.copy (c, str.size ());
177177 c[str.size ()] = ' \0 ' ;
178178 return c;
179179}
180180
181181char ** copyVectorStringToCharPtrPtr (const std::vector<std::string>& strings) {
182- char ** charPtrPtr = new char *[ strings.size ()] ;
182+ char ** charPtrPtr = initializeCharPointerPointer ( strings.size ()) ;
183183 for (int i = 0 ; i < strings.size (); i++) {
184184 charPtrPtr[i] = copyStringToCharPtr (strings[i]);
185185 }
186186 return charPtrPtr;
187187}
188188
189189int * copyVectorInt (const std::vector<int >& ints) {
190- int * intPtr = new int [ ints.size ()] ;
190+ int * intPtr = initializeIntPointer ( ints.size ()) ;
191191 std::copy (ints.begin (), ints.end (), intPtr);
192192 return intPtr;
193193}
194194
195195double * copyVectorDouble (const std::vector<double >& doubles) {
196- double * doublePtr = new double [ doubles.size ()] ;
196+ double * doublePtr = initializeDoublePointer ( doubles.size ()) ;
197197 std::copy (doubles.begin (), doubles.end (), doublePtr);
198198 return doublePtr;
199199}
200200
201201void deleteCharPtrPtr (char ** charPtrPtr, int length) {
202- for (int i = 0 ; i < length; i++) {
203- delete[] charPtrPtr[i];
204- }
205- delete[] charPtrPtr;
202+ freeCharPointerPointer (charPtrPtr);
206203}
207204
208205void freeCString (char * str) {
@@ -221,12 +218,6 @@ void copyCharPtrPtrToVector(char** src, int count, std::vector<std::string>& des
221218 std::copy (src, src + count, std::back_inserter (dest));
222219}
223220
224- void deleteLoadFlowParameters (loadflow_parameters* ptr) {
225- pypowsybl::deleteCharPtrPtr (ptr->countries_to_balance , ptr->countries_to_balance_count );
226- pypowsybl::deleteCharPtrPtr (ptr->provider_parameters_keys , ptr->provider_parameters_keys_count );
227- pypowsybl::deleteCharPtrPtr (ptr->provider_parameters_values , ptr->provider_parameters_values_count );
228- }
229-
230221LoadFlowParameters::LoadFlowParameters (loadflow_parameters* src) {
231222 voltage_init_mode = static_cast <VoltageInitMode>(src->voltage_init_mode );
232223 transformer_voltage_control_on = (bool ) src->transformer_voltage_control_on ;
@@ -267,19 +258,14 @@ void LoadFlowParameters::load_to_c_struct(loadflow_parameters& res) const {
267258}
268259
269260std::shared_ptr<loadflow_parameters> LoadFlowParameters::to_c_struct () const {
270- loadflow_parameters* res = new loadflow_parameters ( );
261+ loadflow_parameters* res = PowsyblCaller::get ()-> callJava < loadflow_parameters*>(::createLoadFlowParameters );
271262 load_to_c_struct (*res);
272263 // Memory has been allocated here on C side, we need to clean it up on C side (not java side)
273264 return std::shared_ptr<loadflow_parameters>(res, [](loadflow_parameters* ptr){
274- deleteLoadFlowParameters (ptr);
275- delete ptr;
265+ PowsyblCaller::get ()->callJava (::freeLoadFlowParameters, ptr);
276266 });
277267}
278268
279- void deleteLoadFlowValidationParameters (loadflow_validation_parameters* ptr) {
280- deleteLoadFlowParameters (&ptr->loadflow_parameters );
281- }
282-
283269LoadFlowValidationParameters::LoadFlowValidationParameters (loadflow_validation_parameters* src):
284270 loadflow_parameters (&src->loadflow_parameters)
285271{
@@ -309,21 +295,14 @@ void LoadFlowValidationParameters::load_to_c_struct(loadflow_validation_paramete
309295}
310296
311297std::shared_ptr<loadflow_validation_parameters> LoadFlowValidationParameters::to_c_struct () const {
312- loadflow_validation_parameters* res = new loadflow_validation_parameters ( );
298+ loadflow_validation_parameters* res = PowsyblCaller::get ()-> callJava < loadflow_validation_parameters*>(::createValidationConfig );
313299 load_to_c_struct (*res);
314300 // Memory has been allocated here on C side, we need to clean it up on C side (not java side)
315301 return std::shared_ptr<loadflow_validation_parameters>(res, [](loadflow_validation_parameters* ptr){
316- deleteLoadFlowValidationParameters (ptr);
317- delete ptr;
302+ PowsyblCaller::get ()->callJava (::freeValidationConfig, ptr);
318303 });
319304}
320305
321- void deleteSecurityAnalysisParameters (security_analysis_parameters* ptr) {
322- deleteLoadFlowParameters (&ptr->loadflow_parameters );
323- pypowsybl::deleteCharPtrPtr (ptr->provider_parameters_keys , ptr->provider_parameters_keys_count );
324- pypowsybl::deleteCharPtrPtr (ptr->provider_parameters_values , ptr->provider_parameters_values_count );
325- }
326-
327306SecurityAnalysisParameters::SecurityAnalysisParameters (security_analysis_parameters* src):
328307 loadflow_parameters (&src->loadflow_parameters)
329308{
@@ -337,7 +316,7 @@ SecurityAnalysisParameters::SecurityAnalysisParameters(security_analysis_paramet
337316}
338317
339318std::shared_ptr<security_analysis_parameters> SecurityAnalysisParameters::to_c_struct () const {
340- security_analysis_parameters* res = new security_analysis_parameters ( );
319+ security_analysis_parameters* res = PowsyblCaller::get ()-> callJava < security_analysis_parameters*>(::createSecurityAnalysisParameters );
341320 loadflow_parameters.load_to_c_struct (res->loadflow_parameters );
342321 res->flow_proportional_threshold = (double ) flow_proportional_threshold;
343322 res->low_voltage_proportional_threshold = (double ) low_voltage_proportional_threshold;
@@ -350,17 +329,10 @@ std::shared_ptr<security_analysis_parameters> SecurityAnalysisParameters::to_c_s
350329 res->provider_parameters_values_count = provider_parameters_values.size ();
351330 // Memory has been allocated here on C side, we need to clean it up on C side (not java side)
352331 return std::shared_ptr<security_analysis_parameters>(res, [](security_analysis_parameters* ptr){
353- deleteSecurityAnalysisParameters (ptr);
354- delete ptr;
332+ PowsyblCaller::get ()->callJava (::freeSecurityAnalysisParameters, ptr);
355333 });
356334}
357335
358- void deleteSensitivityAnalysisParameters (sensitivity_analysis_parameters* ptr) {
359- deleteLoadFlowParameters (&ptr->loadflow_parameters );
360- pypowsybl::deleteCharPtrPtr (ptr->provider_parameters_keys , ptr->provider_parameters_keys_count );
361- pypowsybl::deleteCharPtrPtr (ptr->provider_parameters_values , ptr->provider_parameters_values_count );
362- }
363-
364336SensitivityAnalysisParameters::SensitivityAnalysisParameters (sensitivity_analysis_parameters* src):
365337 loadflow_parameters (&src->loadflow_parameters)
366338{
@@ -369,16 +341,15 @@ SensitivityAnalysisParameters::SensitivityAnalysisParameters(sensitivity_analysi
369341}
370342
371343std::shared_ptr<sensitivity_analysis_parameters> SensitivityAnalysisParameters::to_c_struct () const {
372- sensitivity_analysis_parameters* res = new sensitivity_analysis_parameters ( );
344+ sensitivity_analysis_parameters* res = PowsyblCaller::get ()-> callJava < sensitivity_analysis_parameters*>(::createSensitivityAnalysisParameters );
373345 loadflow_parameters.load_to_c_struct (res->loadflow_parameters );
374346 res->provider_parameters_keys = pypowsybl::copyVectorStringToCharPtrPtr (provider_parameters_keys);
375347 res->provider_parameters_keys_count = provider_parameters_keys.size ();
376348 res->provider_parameters_values = pypowsybl::copyVectorStringToCharPtrPtr (provider_parameters_values);
377349 res->provider_parameters_values_count = provider_parameters_values.size ();
378350 // Memory has been allocated here on C side, we need to clean it up on C side (not java side)
379351 return std::shared_ptr<sensitivity_analysis_parameters>(res, [](sensitivity_analysis_parameters* ptr){
380- deleteSensitivityAnalysisParameters (ptr);
381- delete ptr;
352+ PowsyblCaller::get ()->callJava (::freeSensitivityAnalysisParameters, ptr);
382353 });
383354}
384355
@@ -392,7 +363,7 @@ FlowDecompositionParameters::FlowDecompositionParameters(flow_decomposition_para
392363}
393364
394365std::shared_ptr<flow_decomposition_parameters> FlowDecompositionParameters::to_c_struct () const {
395- flow_decomposition_parameters* res = new flow_decomposition_parameters ( );
366+ flow_decomposition_parameters* res = PowsyblCaller::get ()-> callJava < flow_decomposition_parameters*>(::createFlowDecompositionParameters );
396367 res->enable_losses_compensation = (unsigned char ) enable_losses_compensation;
397368 res->losses_compensation_epsilon = losses_compensation_epsilon;
398369 res->sensitivity_epsilon = sensitivity_epsilon;
@@ -401,7 +372,7 @@ std::shared_ptr<flow_decomposition_parameters> FlowDecompositionParameters::to_c
401372 res->sensitivity_variable_batch_size = (int ) sensitivity_variable_batch_size;
402373 // Memory has been allocated here on C side, we need to clean it up on C side (not java side)
403374 return std::shared_ptr<flow_decomposition_parameters>(res, [](flow_decomposition_parameters* ptr){
404- delete ptr;
375+ PowsyblCaller::get ()-> callJava (::freeFlowDecompositionParameters, ptr) ;
405376 });
406377}
407378
@@ -771,27 +742,25 @@ void addOperatorStrategy(const JavaHandle& analysisContext, std::string operator
771742}
772743
773744::zone* createZone (const std::string& id, const std::vector<std::string>& injectionsIds, const std::vector<double >& injectionsShiftKeys) {
774- auto z = new :: zone;
745+ auto z = PowsyblCaller::get ()-> callJava < zone*>(::createZonePointer) ;
775746 z->id = copyStringToCharPtr (id);
776747 z->length = injectionsIds.size ();
777- z->injections_ids = new char *[injectionsIds.size ()];
748+ z->injections_ids = initializeCharPointerPointer (injectionsIds.size ());
749+ z->injections_ids_count = injectionsIds.size ();
778750 for (int i = 0 ; i < injectionsIds.size (); i++) {
779751 z->injections_ids [i] = copyStringToCharPtr (injectionsIds[i]);
780752 }
781- z->injections_shift_keys = new double [ injectionsShiftKeys.size ()] ;
753+ z->injections_shift_keys = initializeDoublePointer ( injectionsShiftKeys.size ()) ;
782754 for (int i = 0 ; i < injectionsIds.size (); i++) {
783755 z->injections_shift_keys [i] = injectionsShiftKeys[i];
784756 }
785757 return z;
786758}
787759
788760void deleteZone (::zone* z) {
789- delete[] z->id ;
790- for (int i = 0 ; i < z->length ; i++) {
791- delete[] z->injections_ids [i];
792- }
793- delete[] z->injections_ids ;
794- delete[] z->injections_shift_keys ;
761+ freeCharPointer (z->id );
762+ freeCharPointerPointer (z->injections_ids );
763+ freeDoublePointer (z->injections_shift_keys );
795764}
796765
797766class ZonesPtr {
@@ -1223,20 +1192,20 @@ void NadParameters::nad_to_c_struct(nad_parameters& res) const {
12231192}
12241193
12251194std::shared_ptr<sld_parameters> SldParameters::to_c_struct () const {
1226- sld_parameters* res = new sld_parameters ( );
1195+ sld_parameters* res = PowsyblCaller::get ()-> callJava < sld_parameters*>(::createSldParameters );
12271196 sld_to_c_struct (*res);
12281197 // Memory has been allocated here on C side, we need to clean it up on C side (not java side)
12291198 return std::shared_ptr<sld_parameters>(res, [](sld_parameters* ptr){
1230- delete ptr;
1199+ PowsyblCaller::get ()-> callJava (::freeSldParameters, ptr) ;
12311200 });
12321201}
12331202
12341203std::shared_ptr<nad_parameters> NadParameters::to_c_struct () const {
1235- nad_parameters* res = new nad_parameters ( );
1204+ nad_parameters* res = PowsyblCaller::get ()-> callJava < nad_parameters*>(::createNadParameters );
12361205 nad_to_c_struct (*res);
12371206 // Memory has been allocated here on C side, we need to clean it up on C side (not java side)
12381207 return std::shared_ptr<nad_parameters>(res, [](nad_parameters* ptr){
1239- delete ptr;
1208+ PowsyblCaller::get ()-> callJava (::freeNadParameters, ptr) ;
12401209 });
12411210}
12421211
@@ -1358,7 +1327,7 @@ ShortCircuitAnalysisParameters::ShortCircuitAnalysisParameters(shortcircuit_anal
13581327}
13591328
13601329std::shared_ptr<shortcircuit_analysis_parameters> ShortCircuitAnalysisParameters::to_c_struct () const {
1361- shortcircuit_analysis_parameters* res = new shortcircuit_analysis_parameters ( );
1330+ shortcircuit_analysis_parameters* res = PowsyblCaller::get ()-> callJava < shortcircuit_analysis_parameters*>(::createShortCircuitAnalysisParameters );
13621331 res->with_voltage_result = (bool ) with_voltage_result;
13631332 res->with_feeder_result = (bool ) with_feeder_result;
13641333 res->with_limit_violations = (bool ) with_limit_violations;
@@ -1371,10 +1340,9 @@ std::shared_ptr<shortcircuit_analysis_parameters> ShortCircuitAnalysisParameters
13711340 res->provider_parameters_values = pypowsybl::copyVectorStringToCharPtrPtr (provider_parameters_values);
13721341 res->provider_parameters_values_count = provider_parameters_values.size ();
13731342
1374- // Memory has been allocated here on C side, we need to clean it up on C side (not java side)
13751343 return std::shared_ptr<shortcircuit_analysis_parameters>(res, [](shortcircuit_analysis_parameters* ptr){
13761344 deleteShortCircuitAnalysisParameters (ptr);
1377- delete ptr;
1345+ PowsyblCaller::get ()-> callJava (::freeShortCircuitAnalysisParameters, ptr) ;
13781346 });
13791347}
13801348
@@ -1508,4 +1476,60 @@ JavaHandle runVoltageInitializer(bool debug, const JavaHandle& networkHandle, co
15081476 return pypowsybl::PowsyblCaller::get ()->callJava <JavaHandle>(::runVoltageInitializer, debug, networkHandle, paramsHandle);
15091477}
15101478
1479+ SeriesArray* initializeSeriesArrayObject (int columnsNumber) {
1480+ return new SeriesArray (pypowsybl::PowsyblCaller::get ()->callJava <array*>(::initializeSeriesArray, columnsNumber));
1481+ }
1482+
1483+ DataframesArray* initializeDataframesArray (int columnsNumber) {
1484+ return new DataframesArray (pypowsybl::PowsyblCaller::get ()->callJava <array*>(::initializeDataframeArray, columnsNumber));
1485+ }
1486+
1487+ char ** initializeCharPointerPointer (int size) {
1488+ return pypowsybl::PowsyblCaller::get ()->callJava <char **>(::initializeCharCharPointer, size);
1489+ }
1490+
1491+ void freeCharPointerPointer (char ** charPointerPointer) {
1492+ pypowsybl::PowsyblCaller::get ()->callJava (::freeCharCharPointer, charPointerPointer);
1493+ }
1494+
1495+ char * initializeCharPointer (int size) {
1496+ return pypowsybl::PowsyblCaller::get ()->callJava <char *>(::initializeCharPointer, size);
1497+ }
1498+
1499+ void freeCharPointer (char * charPointer) {
1500+ pypowsybl::PowsyblCaller::get ()->callJava (::freeCharPointer, charPointer);
1501+ }
1502+
1503+ int * initializeIntPointer (int size) {
1504+ return pypowsybl::PowsyblCaller::get ()->callJava <int *>(::initializeIntPointer, size);
1505+ }
1506+
1507+ void freeIntPointer (int * intPointer) {
1508+ pypowsybl::PowsyblCaller::get ()->callJava (::freeIntPointer, intPointer);
1509+ }
1510+
1511+ double * initializeDoublePointer (double size) {
1512+ return pypowsybl::PowsyblCaller::get ()->callJava <double *>(::initializeDoublePointer, size);
1513+ }
1514+
1515+ void freeDoublePointer (double * doublePointer) {
1516+ pypowsybl::PowsyblCaller::get ()->callJava (::freeDoublePointer, doublePointer);
1517+ }
1518+
1519+ dataframe* initializeDataframePointer () {
1520+ return pypowsybl::PowsyblCaller::get ()->callJava <dataframe*>(::initializeDataframePointer);
1521+ }
1522+
1523+ void freeDataframePointer (dataframe* dataframe) {
1524+ pypowsybl::PowsyblCaller::get ()->callJava (::freeDataframePointer, dataframe);
1525+ }
1526+
1527+ dataframe_array* initializeDataframeArrayPointer () {
1528+ return pypowsybl::PowsyblCaller::get ()->callJava <dataframe_array*>(::initializeDataframeArrayObject);
1529+ }
1530+
1531+ void freeDataframeArrayPointer (dataframe_array* dataframe_array) {
1532+ pypowsybl::PowsyblCaller::get ()->callJava (::freeDataframeArrayObject, dataframe_array);
1533+ }
1534+
15111535}
0 commit comments