@@ -172,37 +172,34 @@ std::map<std::string, std::string> convertMapStructToStdMap(string_map* map) {
172
172
}
173
173
174
174
char * copyStringToCharPtr (const std::string& str) {
175
- char * c = new char [ str.size () + 1 ] ;
175
+ char * c = initializeCharPointer ( str.size () + 1 ) ;
176
176
str.copy (c, str.size ());
177
177
c[str.size ()] = ' \0 ' ;
178
178
return c;
179
179
}
180
180
181
181
char ** copyVectorStringToCharPtrPtr (const std::vector<std::string>& strings) {
182
- char ** charPtrPtr = new char *[ strings.size ()] ;
182
+ char ** charPtrPtr = initializeCharPointerPointer ( strings.size ()) ;
183
183
for (int i = 0 ; i < strings.size (); i++) {
184
184
charPtrPtr[i] = copyStringToCharPtr (strings[i]);
185
185
}
186
186
return charPtrPtr;
187
187
}
188
188
189
189
int * copyVectorInt (const std::vector<int >& ints) {
190
- int * intPtr = new int [ ints.size ()] ;
190
+ int * intPtr = initializeIntPointer ( ints.size ()) ;
191
191
std::copy (ints.begin (), ints.end (), intPtr);
192
192
return intPtr;
193
193
}
194
194
195
195
double * copyVectorDouble (const std::vector<double >& doubles) {
196
- double * doublePtr = new double [ doubles.size ()] ;
196
+ double * doublePtr = initializeDoublePointer ( doubles.size ()) ;
197
197
std::copy (doubles.begin (), doubles.end (), doublePtr);
198
198
return doublePtr;
199
199
}
200
200
201
201
void deleteCharPtrPtr (char ** charPtrPtr, int length) {
202
- for (int i = 0 ; i < length; i++) {
203
- delete[] charPtrPtr[i];
204
- }
205
- delete[] charPtrPtr;
202
+ freeCharPointerPointer (charPtrPtr);
206
203
}
207
204
208
205
void freeCString (char * str) {
@@ -221,12 +218,6 @@ void copyCharPtrPtrToVector(char** src, int count, std::vector<std::string>& des
221
218
std::copy (src, src + count, std::back_inserter (dest));
222
219
}
223
220
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
-
230
221
LoadFlowParameters::LoadFlowParameters (loadflow_parameters* src) {
231
222
voltage_init_mode = static_cast <VoltageInitMode>(src->voltage_init_mode );
232
223
transformer_voltage_control_on = (bool ) src->transformer_voltage_control_on ;
@@ -267,19 +258,14 @@ void LoadFlowParameters::load_to_c_struct(loadflow_parameters& res) const {
267
258
}
268
259
269
260
std::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 );
271
262
load_to_c_struct (*res);
272
263
// Memory has been allocated here on C side, we need to clean it up on C side (not java side)
273
264
return std::shared_ptr<loadflow_parameters>(res, [](loadflow_parameters* ptr){
274
- deleteLoadFlowParameters (ptr);
275
- delete ptr;
265
+ PowsyblCaller::get ()->callJava (::freeLoadFlowParameters, ptr);
276
266
});
277
267
}
278
268
279
- void deleteLoadFlowValidationParameters (loadflow_validation_parameters* ptr) {
280
- deleteLoadFlowParameters (&ptr->loadflow_parameters );
281
- }
282
-
283
269
LoadFlowValidationParameters::LoadFlowValidationParameters (loadflow_validation_parameters* src):
284
270
loadflow_parameters (&src->loadflow_parameters)
285
271
{
@@ -309,21 +295,14 @@ void LoadFlowValidationParameters::load_to_c_struct(loadflow_validation_paramete
309
295
}
310
296
311
297
std::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 );
313
299
load_to_c_struct (*res);
314
300
// Memory has been allocated here on C side, we need to clean it up on C side (not java side)
315
301
return std::shared_ptr<loadflow_validation_parameters>(res, [](loadflow_validation_parameters* ptr){
316
- deleteLoadFlowValidationParameters (ptr);
317
- delete ptr;
302
+ PowsyblCaller::get ()->callJava (::freeValidationConfig, ptr);
318
303
});
319
304
}
320
305
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
-
327
306
SecurityAnalysisParameters::SecurityAnalysisParameters (security_analysis_parameters* src):
328
307
loadflow_parameters (&src->loadflow_parameters)
329
308
{
@@ -337,7 +316,7 @@ SecurityAnalysisParameters::SecurityAnalysisParameters(security_analysis_paramet
337
316
}
338
317
339
318
std::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 );
341
320
loadflow_parameters.load_to_c_struct (res->loadflow_parameters );
342
321
res->flow_proportional_threshold = (double ) flow_proportional_threshold;
343
322
res->low_voltage_proportional_threshold = (double ) low_voltage_proportional_threshold;
@@ -350,17 +329,10 @@ std::shared_ptr<security_analysis_parameters> SecurityAnalysisParameters::to_c_s
350
329
res->provider_parameters_values_count = provider_parameters_values.size ();
351
330
// Memory has been allocated here on C side, we need to clean it up on C side (not java side)
352
331
return std::shared_ptr<security_analysis_parameters>(res, [](security_analysis_parameters* ptr){
353
- deleteSecurityAnalysisParameters (ptr);
354
- delete ptr;
332
+ PowsyblCaller::get ()->callJava (::freeSecurityAnalysisParameters, ptr);
355
333
});
356
334
}
357
335
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
-
364
336
SensitivityAnalysisParameters::SensitivityAnalysisParameters (sensitivity_analysis_parameters* src):
365
337
loadflow_parameters (&src->loadflow_parameters)
366
338
{
@@ -369,16 +341,15 @@ SensitivityAnalysisParameters::SensitivityAnalysisParameters(sensitivity_analysi
369
341
}
370
342
371
343
std::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 );
373
345
loadflow_parameters.load_to_c_struct (res->loadflow_parameters );
374
346
res->provider_parameters_keys = pypowsybl::copyVectorStringToCharPtrPtr (provider_parameters_keys);
375
347
res->provider_parameters_keys_count = provider_parameters_keys.size ();
376
348
res->provider_parameters_values = pypowsybl::copyVectorStringToCharPtrPtr (provider_parameters_values);
377
349
res->provider_parameters_values_count = provider_parameters_values.size ();
378
350
// Memory has been allocated here on C side, we need to clean it up on C side (not java side)
379
351
return std::shared_ptr<sensitivity_analysis_parameters>(res, [](sensitivity_analysis_parameters* ptr){
380
- deleteSensitivityAnalysisParameters (ptr);
381
- delete ptr;
352
+ PowsyblCaller::get ()->callJava (::freeSensitivityAnalysisParameters, ptr);
382
353
});
383
354
}
384
355
@@ -392,7 +363,7 @@ FlowDecompositionParameters::FlowDecompositionParameters(flow_decomposition_para
392
363
}
393
364
394
365
std::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 );
396
367
res->enable_losses_compensation = (unsigned char ) enable_losses_compensation;
397
368
res->losses_compensation_epsilon = losses_compensation_epsilon;
398
369
res->sensitivity_epsilon = sensitivity_epsilon;
@@ -401,7 +372,7 @@ std::shared_ptr<flow_decomposition_parameters> FlowDecompositionParameters::to_c
401
372
res->sensitivity_variable_batch_size = (int ) sensitivity_variable_batch_size;
402
373
// Memory has been allocated here on C side, we need to clean it up on C side (not java side)
403
374
return std::shared_ptr<flow_decomposition_parameters>(res, [](flow_decomposition_parameters* ptr){
404
- delete ptr;
375
+ PowsyblCaller::get ()-> callJava (::freeFlowDecompositionParameters, ptr) ;
405
376
});
406
377
}
407
378
@@ -771,27 +742,25 @@ void addOperatorStrategy(const JavaHandle& analysisContext, std::string operator
771
742
}
772
743
773
744
::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) ;
775
746
z->id = copyStringToCharPtr (id);
776
747
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 ();
778
750
for (int i = 0 ; i < injectionsIds.size (); i++) {
779
751
z->injections_ids [i] = copyStringToCharPtr (injectionsIds[i]);
780
752
}
781
- z->injections_shift_keys = new double [ injectionsShiftKeys.size ()] ;
753
+ z->injections_shift_keys = initializeDoublePointer ( injectionsShiftKeys.size ()) ;
782
754
for (int i = 0 ; i < injectionsIds.size (); i++) {
783
755
z->injections_shift_keys [i] = injectionsShiftKeys[i];
784
756
}
785
757
return z;
786
758
}
787
759
788
760
void 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 );
795
764
}
796
765
797
766
class ZonesPtr {
@@ -1223,20 +1192,20 @@ void NadParameters::nad_to_c_struct(nad_parameters& res) const {
1223
1192
}
1224
1193
1225
1194
std::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 );
1227
1196
sld_to_c_struct (*res);
1228
1197
// Memory has been allocated here on C side, we need to clean it up on C side (not java side)
1229
1198
return std::shared_ptr<sld_parameters>(res, [](sld_parameters* ptr){
1230
- delete ptr;
1199
+ PowsyblCaller::get ()-> callJava (::freeSldParameters, ptr) ;
1231
1200
});
1232
1201
}
1233
1202
1234
1203
std::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 );
1236
1205
nad_to_c_struct (*res);
1237
1206
// Memory has been allocated here on C side, we need to clean it up on C side (not java side)
1238
1207
return std::shared_ptr<nad_parameters>(res, [](nad_parameters* ptr){
1239
- delete ptr;
1208
+ PowsyblCaller::get ()-> callJava (::freeNadParameters, ptr) ;
1240
1209
});
1241
1210
}
1242
1211
@@ -1358,7 +1327,7 @@ ShortCircuitAnalysisParameters::ShortCircuitAnalysisParameters(shortcircuit_anal
1358
1327
}
1359
1328
1360
1329
std::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 );
1362
1331
res->with_voltage_result = (bool ) with_voltage_result;
1363
1332
res->with_feeder_result = (bool ) with_feeder_result;
1364
1333
res->with_limit_violations = (bool ) with_limit_violations;
@@ -1371,10 +1340,9 @@ std::shared_ptr<shortcircuit_analysis_parameters> ShortCircuitAnalysisParameters
1371
1340
res->provider_parameters_values = pypowsybl::copyVectorStringToCharPtrPtr (provider_parameters_values);
1372
1341
res->provider_parameters_values_count = provider_parameters_values.size ();
1373
1342
1374
- // Memory has been allocated here on C side, we need to clean it up on C side (not java side)
1375
1343
return std::shared_ptr<shortcircuit_analysis_parameters>(res, [](shortcircuit_analysis_parameters* ptr){
1376
1344
deleteShortCircuitAnalysisParameters (ptr);
1377
- delete ptr;
1345
+ PowsyblCaller::get ()-> callJava (::freeShortCircuitAnalysisParameters, ptr) ;
1378
1346
});
1379
1347
}
1380
1348
@@ -1508,4 +1476,60 @@ JavaHandle runVoltageInitializer(bool debug, const JavaHandle& networkHandle, co
1508
1476
return pypowsybl::PowsyblCaller::get ()->callJava <JavaHandle>(::runVoltageInitializer, debug, networkHandle, paramsHandle);
1509
1477
}
1510
1478
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
+
1511
1535
}
0 commit comments