Skip to content

Commit 5a0baf0

Browse files
authored
refactor aero_state.hpp to render delete[] constructs unneeded + cleanups (#295)
1 parent b72ced9 commit 5a0baf0

File tree

1 file changed

+54
-136
lines changed

1 file changed

+54
-136
lines changed

src/aero_state.hpp

Lines changed: 54 additions & 136 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,20 @@ extern "C" void f_aero_state_add_aero_dist_sample(
143143
int *n_part_add
144144
) noexcept;
145145

146+
147+
template <typename arr_t, typename arg_t>
148+
auto pointer_vec_magic(arr_t &data_vec, const arg_t &arg) {
149+
std::vector<char*> pointer_vec(data_vec.size());
150+
if (arg.has_value())
151+
for (size_t i=0; i < arg.value().size(); ++i)
152+
strcpy(
153+
pointer_vec[i] = data_vec[i].data(),
154+
arg.value()[i].c_str()
155+
);
156+
return pointer_vec;
157+
}
158+
159+
146160
struct AeroState {
147161
PMCResource ptr;
148162
std::shared_ptr<AeroData> aero_data;
@@ -231,8 +245,8 @@ struct AeroState {
231245

232246
static auto masses(
233247
const AeroState &self,
234-
const tl::optional<std::valarray<std::string>>&include,
235-
const tl::optional<std::valarray<std::string>>&exclude
248+
const tl::optional<std::valarray<std::string>> &include,
249+
const tl::optional<std::valarray<std::string>> &exclude
236250
) {
237251
int len;
238252
f_aero_state_len(
@@ -244,27 +258,9 @@ struct AeroState {
244258
const int include_size = (include.has_value()) ? include.value().size() : 0;
245259
const int exclude_size = (exclude.has_value()) ? exclude.value().size() : 0;
246260

247-
char **include_arr = NULL;
248-
if (include.has_value()){
249-
include_arr = new char *[include_size];
250-
int i = 0;
251-
for (const std::string &x : include.value()){
252-
include_arr[i] = new char[AERO_NAME_LEN];
253-
strcpy(include_arr[i], x.c_str());
254-
i = i + 1;
255-
}
256-
}
257-
258-
char **exclude_arr = NULL;
259-
if (exclude.has_value()){
260-
exclude_arr = new char *[exclude_size];
261-
int i = 0;
262-
for (const std::string &x : exclude.value()){
263-
exclude_arr[i] = new char[AERO_NAME_LEN];
264-
strcpy(exclude_arr[i], x.c_str());
265-
i = i + 1;
266-
}
267-
}
261+
std::vector<std::array<char, AERO_NAME_LEN>>
262+
include_arr(include_size),
263+
exclude_arr(exclude_size);
268264

269265
f_aero_state_masses(
270266
self.ptr.f_arg(),
@@ -273,13 +269,10 @@ struct AeroState {
273269
&len,
274270
&include_size,
275271
&exclude_size,
276-
include_arr,
277-
exclude_arr
272+
pointer_vec_magic(include_arr, include).data(),
273+
pointer_vec_magic(exclude_arr, exclude).data()
278274
);
279275

280-
delete[] include_arr;
281-
delete[] exclude_arr;
282-
283276
return masses;
284277
}
285278

@@ -302,9 +295,9 @@ struct AeroState {
302295
}
303296

304297
static auto diameters(
305-
const AeroState &self,
306-
const tl::optional<std::valarray<std::string>>&include,
307-
const tl::optional<std::valarray<std::string>>&exclude
298+
const AeroState &self,
299+
const tl::optional<std::valarray<std::string>> &include,
300+
const tl::optional<std::valarray<std::string>> &exclude
308301
) {
309302
int len;
310303
f_aero_state_len(
@@ -316,27 +309,9 @@ struct AeroState {
316309
const int include_size = (include.has_value()) ? include.value().size() : 0;
317310
const int exclude_size = (exclude.has_value()) ? exclude.value().size() : 0;
318311

319-
char **include_arr = NULL;
320-
if (include.has_value()){
321-
include_arr = new char *[include_size];
322-
int i = 0;
323-
for (const std::string &x : include.value()){
324-
include_arr[i] = new char[AERO_NAME_LEN];
325-
strcpy(include_arr[i], x.c_str());
326-
i = i + 1;
327-
}
328-
}
329-
330-
char **exclude_arr = NULL;
331-
if (exclude.has_value()){
332-
exclude_arr = new char *[exclude_size];
333-
int i = 0;
334-
for (const std::string &x : exclude.value()){
335-
exclude_arr[i] = new char[AERO_NAME_LEN];
336-
strcpy(exclude_arr[i], x.c_str());
337-
i = i + 1;
338-
}
339-
}
312+
std::vector<std::array<char, AERO_NAME_LEN>>
313+
include_arr(include_size),
314+
exclude_arr(exclude_size);
340315

341316
f_aero_state_diameters(
342317
self.ptr.f_arg(),
@@ -345,20 +320,17 @@ struct AeroState {
345320
&len,
346321
&include_size,
347322
&exclude_size,
348-
include_arr,
349-
exclude_arr
323+
pointer_vec_magic(include_arr, include).data(),
324+
pointer_vec_magic(exclude_arr, exclude).data()
350325
);
351326

352-
delete[] include_arr;
353-
delete[] exclude_arr;
354-
355327
return diameters;
356328
}
357329

358330
static auto volumes(
359331
const AeroState &self,
360-
const tl::optional<std::valarray<std::string>>&include,
361-
const tl::optional<std::valarray<std::string>>&exclude
332+
const tl::optional<std::valarray<std::string>> &include,
333+
const tl::optional<std::valarray<std::string>> &exclude
362334
) {
363335
int len;
364336
f_aero_state_len(
@@ -370,27 +342,9 @@ struct AeroState {
370342
const int include_size = (include.has_value()) ? include.value().size() : 0;
371343
const int exclude_size = (exclude.has_value()) ? exclude.value().size() : 0;
372344

373-
char **include_arr = NULL;
374-
if (include.has_value()){
375-
include_arr = new char *[include_size];
376-
int i = 0;
377-
for (const std::string &x : include.value()){
378-
include_arr[i] = new char[AERO_NAME_LEN];
379-
strcpy(include_arr[i], x.c_str());
380-
i = i + 1;
381-
}
382-
}
383-
384-
char **exclude_arr = NULL;
385-
if (exclude.has_value()){
386-
exclude_arr = new char *[exclude_size];
387-
int i = 0;
388-
for (const std::string &x : exclude.value()){
389-
exclude_arr[i] = new char[AERO_NAME_LEN];
390-
strcpy(exclude_arr[i], x.c_str());
391-
i = i + 1;
392-
}
393-
}
345+
std::vector<std::array<char, AERO_NAME_LEN>>
346+
include_arr(include_size),
347+
exclude_arr(exclude_size);
394348

395349
f_aero_state_volumes(
396350
self.ptr.f_arg(),
@@ -399,13 +353,10 @@ struct AeroState {
399353
&len,
400354
&include_size,
401355
&exclude_size,
402-
include_arr,
403-
exclude_arr
356+
pointer_vec_magic(include_arr, include).data(),
357+
pointer_vec_magic(exclude_arr, exclude).data()
404358
);
405359

406-
delete[] include_arr;
407-
delete[] exclude_arr;
408-
409360
return volumes;
410361
}
411362

@@ -433,9 +384,9 @@ struct AeroState {
433384

434385
static auto mixing_state(
435386
const AeroState &self,
436-
const tl::optional<std::valarray<std::string>>&include,
437-
const tl::optional<std::valarray<std::string>>&exclude,
438-
const tl::optional<std::valarray<std::string>>&group
387+
const tl::optional<std::valarray<std::string>> &include,
388+
const tl::optional<std::valarray<std::string>> &exclude,
389+
const tl::optional<std::valarray<std::string>> &group
439390
) {
440391
int len;
441392
f_aero_state_len(
@@ -450,38 +401,10 @@ struct AeroState {
450401
const int exclude_size = (exclude.has_value()) ? exclude.value().size() : 0;
451402
const int group_size = (group.has_value()) ? group.value().size() : 0;
452403

453-
char **include_arr = NULL;
454-
if (include.has_value()){
455-
include_arr = new char *[include_size];
456-
int i = 0;
457-
for (const std::string &x : include.value()){
458-
include_arr[i] = new char[AERO_NAME_LEN];
459-
strcpy(include_arr[i], x.c_str());
460-
i = i + 1;
461-
}
462-
}
463-
464-
char **exclude_arr = NULL;
465-
if (exclude.has_value()){
466-
exclude_arr = new char *[exclude_size];
467-
int i = 0;
468-
for (const std::string &x : exclude.value()){
469-
exclude_arr[i] = new char[AERO_NAME_LEN];
470-
strcpy(exclude_arr[i], x.c_str());
471-
i = i + 1;
472-
}
473-
}
474-
475-
char **group_arr = NULL;
476-
if (group.has_value()){
477-
group_arr = new char *[group_size];
478-
int i = 0;
479-
for (const std::string &x : group.value()){
480-
group_arr[i] = new char[AERO_NAME_LEN];
481-
strcpy(group_arr[i], x.c_str());
482-
i = i + 1;
483-
}
484-
}
404+
std::vector<std::array<char, AERO_NAME_LEN>>
405+
include_arr(include_size),
406+
exclude_arr(exclude_size),
407+
group_arr(group_size);
485408

486409
f_aero_state_mixing_state_metrics(
487410
self.ptr.f_arg(),
@@ -492,15 +415,11 @@ struct AeroState {
492415
&include_size,
493416
&exclude_size,
494417
&group_size,
495-
include_arr,
496-
exclude_arr,
497-
group_arr
418+
pointer_vec_magic(include_arr, include).data(),
419+
pointer_vec_magic(exclude_arr, exclude).data(),
420+
pointer_vec_magic(group_arr, group).data()
498421
);
499422

500-
delete[] include_arr;
501-
delete[] exclude_arr;
502-
delete[] group_arr;
503-
504423
return std::make_tuple(d_alpha, d_gamma, chi);
505424
}
506425

@@ -554,17 +473,16 @@ struct AeroState {
554473
int n_part_add = 0;
555474

556475
f_aero_state_add_aero_dist_sample(
557-
self.ptr.f_arg(),
558-
self.aero_data->ptr.f_arg(),
559-
aero_dist.ptr.f_arg(),
560-
&sample_prop,
561-
&create_time,
562-
&allow_doubling,
563-
&allow_halving,
564-
&n_part_add
476+
self.ptr.f_arg(),
477+
self.aero_data->ptr.f_arg(),
478+
aero_dist.ptr.f_arg(),
479+
&sample_prop,
480+
&create_time,
481+
&allow_doubling,
482+
&allow_halving,
483+
&n_part_add
565484
);
566485
return n_part_add;
567-
568486
}
569487

570488
};

0 commit comments

Comments
 (0)