vector elt_list

This commit is contained in:
David Parkhurst 2021-03-16 00:23:56 -06:00
parent 0957a528df
commit e8c90279e6
13 changed files with 93 additions and 113 deletions

View File

@ -715,9 +715,7 @@ void Phreeqc::init(void)
/*----------------------------------------------------------------------
* Element List
*---------------------------------------------------------------------- */
elt_list = NULL;
count_elts = 0;
max_elts = MAX_ELTS;
/*----------------------------------------------------------------------
* Species
*---------------------------------------------------------------------- */
@ -1624,9 +1622,7 @@ Phreeqc::InternalCopy(const Phreeqc *pSrc)
* Element List
*---------------------------------------------------------------------- */
/*
elt_list = NULL;
count_elts = 0;
max_elts = MAX_ELTS;
*/
/*----------------------------------------------------------------------
* Reaction

View File

@ -1463,11 +1463,8 @@ protected:
/*----------------------------------------------------------------------
* Element List
*---------------------------------------------------------------------- */
struct elt_list *elt_list; /* structure array of working space while reading equations
names are in "strings", initially in input order */
std::vector<elt_list> elt_list;
int count_elts; /* number of elements in elt_list = position of next */
int max_elts;
/*----------------------------------------------------------------------
* Reaction
*---------------------------------------------------------------------- */

View File

@ -1124,8 +1124,8 @@ diff_layer_total(const char *total_name, const char *surface_name)
}
if (count_elts > 0)
{
qsort(elt_list, (size_t) count_elts,
(size_t) sizeof(struct elt_list), Phreeqc:: elt_list_compare);
qsort(elt_list.data(), (size_t) count_elts,
sizeof(struct elt_list), Phreeqc:: elt_list_compare);
elt_list_combine();
}
/*
@ -2422,8 +2422,8 @@ surf_total_no_redox(const char *total_name, const char *surface_name)
}
if (count_elts > 0)
{
qsort(elt_list, (size_t) count_elts,
(size_t) sizeof(struct elt_list), elt_list_compare);
qsort(elt_list.data(), (size_t)count_elts,
sizeof(struct elt_list), elt_list_compare);
elt_list_combine();
}
/*
@ -2838,8 +2838,8 @@ kinetics_formula(std::string kin_name, cxxNameDouble &stoichiometry)
//elt_list[count_elts].elt = NULL;
if (count_elts > 0)
{
qsort(elt_list, (size_t) count_elts,
(size_t) sizeof(struct elt_list), elt_list_compare);
qsort(elt_list.data(), (size_t)count_elts,
sizeof(struct elt_list), elt_list_compare);
elt_list_combine();
}
stoichiometry = elt_list_NameDouble();
@ -3272,8 +3272,8 @@ system_total_elt(const char *total_name)
if (count_elts > 0)
{
qsort(elt_list, (size_t) count_elts,
(size_t) sizeof(struct elt_list), elt_list_compare);
qsort(elt_list.data(), (size_t)count_elts,
sizeof(struct elt_list), elt_list_compare);
elt_list_combine();
}
/*
@ -3360,8 +3360,8 @@ system_total_elt(const char *total_name)
}
if (count_elts > 0)
{
qsort(elt_list, (size_t) count_elts,
(size_t) sizeof(struct elt_list), elt_list_compare);
qsort(elt_list.data(), (size_t)count_elts,
sizeof(struct elt_list), elt_list_compare);
elt_list_combine();
}
/*
@ -3407,8 +3407,8 @@ system_total_elt(const char *total_name)
add_elt_list(phase_ptr->next_elt, x[i]->moles);
if (count_elts > 0)
{
qsort(elt_list, (size_t) count_elts,
(size_t) sizeof(struct elt_list), elt_list_compare);
qsort(elt_list.data(), (size_t)count_elts,
sizeof(struct elt_list), elt_list_compare);
elt_list_combine();
}
for (j = 0; j < count_elts; j++)
@ -3448,9 +3448,8 @@ system_total_elt(const char *total_name)
comp_ptr->Get_moles());
if (count_elts > 0)
{
qsort(elt_list, (size_t) count_elts,
(size_t) sizeof(struct elt_list),
elt_list_compare);
qsort(elt_list.data(), (size_t)count_elts,
sizeof(struct elt_list), elt_list_compare);
elt_list_combine();
}
for (j = 0; j < count_elts; j++)
@ -3489,8 +3488,8 @@ system_total_elt(const char *total_name)
add_elt_list(phase_ptr->next_elt, phase_ptr->moles_x);
if (count_elts > 0)
{
qsort(elt_list, (size_t) count_elts,
(size_t) sizeof(struct elt_list), elt_list_compare);
qsort(elt_list.data(), (size_t)count_elts,
sizeof(struct elt_list), elt_list_compare);
elt_list_combine();
}
/*
@ -3544,8 +3543,8 @@ system_total_elt_secondary(const char *total_name)
}
if (count_elts > 0)
{
qsort(elt_list, (size_t) count_elts,
(size_t) sizeof(struct elt_list), elt_list_compare);
qsort(elt_list.data(), (size_t)count_elts,
sizeof(struct elt_list), elt_list_compare);
elt_list_combine();
}
/*
@ -3674,8 +3673,8 @@ system_total_elt_secondary(const char *total_name)
add_elt_list(phase_ptr->next_sys_total, x[i]->moles);
if (count_elts > 0)
{
qsort(elt_list, (size_t) count_elts,
(size_t) sizeof(struct elt_list), elt_list_compare);
qsort(elt_list.data(), (size_t)count_elts,
sizeof(struct elt_list), elt_list_compare);
elt_list_combine();
}
for (j = 0; j < count_elts; j++)
@ -3716,9 +3715,8 @@ system_total_elt_secondary(const char *total_name)
comp_ptr->Get_moles());
if (count_elts > 0)
{
qsort(elt_list, (size_t) count_elts,
(size_t) sizeof(struct elt_list),
elt_list_compare);
qsort(elt_list.data(), (size_t)count_elts,
sizeof(struct elt_list), elt_list_compare);
elt_list_combine();
}
for (j = 0; j < count_elts; j++)
@ -3759,8 +3757,8 @@ system_total_elt_secondary(const char *total_name)
if (count_elts > 0)
{
qsort(elt_list, (size_t) count_elts,
(size_t) sizeof(struct elt_list), elt_list_compare);
qsort(elt_list.data(), (size_t)count_elts,
sizeof(struct elt_list), elt_list_compare);
elt_list_combine();
}
/*
@ -3851,8 +3849,8 @@ solution_sum_secondary(const char *total_name)
}
if (count_elts > 0)
{
qsort(elt_list, (size_t) count_elts,
(size_t) sizeof(struct elt_list), elt_list_compare);
qsort(elt_list.data(), (size_t)count_elts,
sizeof(struct elt_list), elt_list_compare);
elt_list_combine();
}
/*
@ -3968,8 +3966,8 @@ system_total_solids(cxxExchange *exchange_ptr,
if (count_elts > 0)
{
qsort(elt_list, (size_t) count_elts,
(size_t) sizeof(struct elt_list), elt_list_compare);
qsort(elt_list.data(), (size_t)count_elts,
sizeof(struct elt_list), elt_list_compare);
elt_list_combine();
}
return (OK);

View File

@ -726,8 +726,8 @@ sum_diffuse_layer(cxxSurfaceCharge *charge_ptr)
if (count_elts > 0)
{
qsort(elt_list, (size_t) count_elts,
(size_t) sizeof(struct elt_list), elt_list_compare);
qsort(elt_list.data(), (size_t) count_elts,
sizeof(struct elt_list), elt_list_compare);
elt_list_combine();
}
return (OK);

View File

@ -60,9 +60,6 @@ initialize(void)
cell_data[i].print = FALSE;
}
space((void **) ((void *) &elt_list), INIT, &max_elts,
sizeof(struct elt_list));
inverse = (struct inverse *) PHRQ_malloc((size_t) sizeof(struct inverse));
if (inverse == NULL) malloc_error();
count_inverse = 0;

View File

@ -140,7 +140,7 @@ parse_eq(char *eqn, struct elt_list **elt_ptr, int association)
/*
* Sort elements in reaction and combine
*/
qsort(elt_list, (size_t) count_elts, (size_t) sizeof(struct elt_list),
qsort(elt_list.data(), (size_t) count_elts, sizeof(struct elt_list),
elt_list_compare);
if (elt_list_combine() == ERROR)
return (ERROR);
@ -228,7 +228,7 @@ check_eqn(int association)
/*
* Sort elements in reaction and combine
*/
qsort(elt_list, (size_t) count_elts, (size_t) sizeof(struct elt_list),
qsort(elt_list.data(), (size_t) count_elts, sizeof(struct elt_list),
elt_list_compare);
if (elt_list_combine() == ERROR)
return (ERROR);
@ -607,10 +607,9 @@ get_elts_in_species(char **t_ptr, LDBLE coef)
{
return (ERROR);
}
if (count_elts >= max_elts)
if (count_elts >= (int)elt_list.size())
{
space((void **) ((void *) &elt_list), count_elts, &max_elts,
sizeof(struct elt_list));
elt_list.resize((size_t)count_elts + 1);
}
elt_list[count_elts].elt = element_store(element);
if (get_num(t_ptr, &d) == ERROR)
@ -622,10 +621,9 @@ get_elts_in_species(char **t_ptr, LDBLE coef)
/*
* Expand working space for elements if necessary
*/
if (count_elts >= max_elts)
if (count_elts >= (int)elt_list.size())
{
space((void **) ((void *) &elt_list), count_elts, &max_elts,
sizeof(struct elt_list));
elt_list.resize((size_t)count_elts + 1);
}
continue;
}
@ -875,10 +873,9 @@ get_secondary_in_species(char **t_ptr, LDBLE coef)
/*
* Expand working space for elements if necessary
*/
if (count_elts >= max_elts)
if (count_elts >= (int)elt_list.size())
{
space((void **) ((void *) &elt_list), count_elts, &max_elts,
sizeof(struct elt_list));
elt_list.resize((size_t)count_elts + 1);
}
continue;
}

View File

@ -5303,8 +5303,8 @@ write_mb_eqn_x(void)
}
if (count_elts > 0)
{
qsort(elt_list, (size_t) count_elts,
(size_t) sizeof(struct elt_list), elt_list_compare);
qsort(elt_list.data(), (size_t)count_elts,
sizeof(struct elt_list), elt_list_compare);
elt_list_combine();
}
return (OK);
@ -5356,10 +5356,9 @@ write_mb_for_species_list(int n)
{
if (strcmp(elt_list[i].elt->name, "O(-2)") == 0)
{
if (count_elts >= max_elts)
if (count_elts >= (int)elt_list.size())
{
space((void **) ((void *) &elt_list), count_elts, &max_elts,
sizeof(struct elt_list));
elt_list.resize((size_t)count_elts + 1);
}
elt_list[count_elts].elt = element_h_one;
elt_list[count_elts].coef = elt_list[i].coef * 2;
@ -5368,8 +5367,8 @@ write_mb_for_species_list(int n)
}
if (count_elts > 0)
{
qsort(elt_list, (size_t) count_elts,
(size_t) sizeof(struct elt_list), elt_list_compare);
qsort(elt_list.data(), (size_t)count_elts,
sizeof(struct elt_list), elt_list_compare);
elt_list_combine();
}
s[n]->next_sys_total =
@ -5419,10 +5418,9 @@ write_phase_sys_total(int n)
{
if (strcmp(elt_list[i].elt->name, "O(-2)") == 0)
{
if (count_elts >= max_elts)
if (count_elts >= (int)elt_list.size())
{
space((void **) ((void *) &elt_list), count_elts, &max_elts,
sizeof(struct elt_list));
elt_list.resize((size_t)count_elts + 1);
}
elt_list[count_elts].elt = element_h_one;
elt_list[count_elts].coef = elt_list[i].coef * 2;
@ -5431,8 +5429,8 @@ write_phase_sys_total(int n)
}
if (count_elts > 0)
{
qsort(elt_list, (size_t) count_elts,
(size_t) sizeof(struct elt_list), elt_list_compare);
qsort(elt_list.data(), (size_t)count_elts,
sizeof(struct elt_list), elt_list_compare);
elt_list_combine();
}
phases[n]->next_sys_total =
@ -6545,8 +6543,8 @@ change_hydrogen_in_elt_list(LDBLE charge)
found_o = -1;
coef_h = 0.0;
coef_o = 0.0;
qsort(elt_list, (size_t) count_elts,
(size_t) sizeof(struct elt_list), elt_list_compare);
qsort(elt_list.data(), (size_t)count_elts,
sizeof(struct elt_list), elt_list_compare);
elt_list_combine();
for (j = 0; j < count_elts; j++)
{
@ -6571,8 +6569,8 @@ change_hydrogen_in_elt_list(LDBLE charge)
elt_list[count_elts].elt = s_hplus->primary->elt;
elt_list[count_elts].coef = coef;
count_elts++;
qsort(elt_list, (size_t) count_elts,
(size_t) sizeof(struct elt_list), elt_list_compare);
qsort(elt_list.data(), (size_t)count_elts,
sizeof(struct elt_list), elt_list_compare);
elt_list_combine();
return (OK);
}

View File

@ -318,8 +318,8 @@ print_diffuse_layer(cxxSurfaceCharge *charge_ptr)
*/
if (count_elts > 0)
{
qsort(elt_list, (size_t)count_elts,
(size_t) sizeof(struct elt_list), elt_list_compare);
qsort(elt_list.data(), (size_t)count_elts,
sizeof(struct elt_list), elt_list_compare);
elt_list_combine();
}
/*

View File

@ -1028,8 +1028,8 @@ add_gas_phase(cxxGasPhase *gas_phase_ptr)
*/
if (count_elts > 0)
{
qsort(elt_list, (size_t) count_elts,
(size_t) sizeof(struct elt_list), elt_list_compare);
qsort(elt_list.data(), (size_t) count_elts,
sizeof(struct elt_list), elt_list_compare);
elt_list_combine();
}
/*

View File

@ -292,7 +292,8 @@ clean_up(void)
/* miscellaneous work space */
elt_list = (struct elt_list *) free_check_null(elt_list);
//elt_list = (struct elt_list *) free_check_null(elt_list);
elt_list.clear();
trxn.token = (struct rxn_token_temp *) free_check_null(trxn.token);
mb_unknowns = (struct unknown_list *) free_check_null(mb_unknowns);
line = (char *) free_check_null(line);
@ -586,8 +587,8 @@ elt_list_save(void)
*/
if (count_elts > 0)
{
qsort(elt_list, (size_t) count_elts,
(size_t) sizeof(struct elt_list), elt_list_compare);
qsort(elt_list.data(), (size_t)count_elts,
sizeof(struct elt_list), elt_list_compare);
elt_list_combine();
}
/*

View File

@ -550,8 +550,8 @@ fill_tally_table(int *n_user, int index_conservative, int n_buffer)
{
add_elt_list(exchange_ptr->Get_exchange_comps()[j].Get_totals(), 1.0);
}
qsort(elt_list, (size_t) count_elts,
(size_t) sizeof(struct elt_list), elt_list_compare);
qsort(elt_list.data(), (size_t) count_elts,
sizeof(struct elt_list), elt_list_compare);
elt_list_combine();
elt_list_to_tally_table(tally_table[i].total[n_buffer]);
}
@ -572,8 +572,8 @@ fill_tally_table(int *n_user, int index_conservative, int n_buffer)
{
add_elt_list(surface_ptr->Get_surface_comps()[j].Get_totals(), 1.0);
}
qsort(elt_list, (size_t) count_elts,
(size_t) sizeof(struct elt_list), elt_list_compare);
qsort(elt_list.data(), (size_t) count_elts,
sizeof(struct elt_list), elt_list_compare);
elt_list_combine();
elt_list_to_tally_table(tally_table[i].total[n_buffer]);
}
@ -643,8 +643,8 @@ fill_tally_table(int *n_user, int index_conservative, int n_buffer)
add_elt_list(phase_ptr->next_elt, (*gc)[l].Get_moles());
}
qsort(elt_list, (size_t) count_elts,
(size_t) sizeof(struct elt_list), elt_list_compare);
qsort(elt_list.data(), (size_t) count_elts,
sizeof(struct elt_list), elt_list_compare);
elt_list_combine();
elt_list_to_tally_table(tally_table[i].total[n_buffer]);
break;
@ -921,8 +921,8 @@ build_tally_table(void)
strcpy(token, phase_ptr->formula);
add_elt_list(phase_ptr->next_elt, 1.0);
}
qsort(elt_list, (size_t) count_elts,
(size_t) sizeof(struct elt_list), elt_list_compare);
qsort(elt_list.data(), (size_t) count_elts,
sizeof(struct elt_list), elt_list_compare);
elt_list_combine();
tally_table[n].formula = elt_list_save();
}
@ -973,8 +973,8 @@ build_tally_table(void)
paren_count = 0;
strcpy(token, phase_ptr->formula);
add_elt_list(phase_ptr->next_elt, 1.0);
qsort(elt_list, (size_t) count_elts,
(size_t) sizeof(struct elt_list), elt_list_compare);
qsort(elt_list.data(), (size_t)count_elts,
sizeof(struct elt_list), elt_list_compare);
elt_list_combine();
tally_table[n].formula = elt_list_save();
}
@ -1041,8 +1041,8 @@ build_tally_table(void)
free_check_null(temp_name);
}
}
qsort(elt_list, (size_t) count_elts,
(size_t) sizeof(struct elt_list), elt_list_compare);
qsort(elt_list.data(), (size_t)count_elts,
sizeof(struct elt_list), elt_list_compare);
elt_list_combine();
tally_table[n].formula = elt_list_save();
}

View File

@ -1287,8 +1287,8 @@ tidy_inverse(void)
*/
if (count_elts > 0)
{
qsort(elt_list, (size_t) count_elts,
(size_t) sizeof(struct elt_list), elt_list_compare);
qsort(elt_list.data(), (size_t) count_elts,
sizeof(struct elt_list), elt_list_compare);
elt_list_combine();
}
/*
@ -3495,8 +3495,8 @@ tidy_min_exchange(void)
error_msg(error_string, CONTINUE);
continue;
}
qsort(elt_list, (size_t) count_elts,
(size_t) sizeof(struct elt_list), elt_list_compare);
qsort(elt_list.data(), (size_t)count_elts,
sizeof(struct elt_list), elt_list_compare);
elt_list_combine();
for (jj = 0; jj < count_elts; jj++)
{
@ -3675,8 +3675,8 @@ update_min_exchange(void)
error_msg(error_string, CONTINUE);
continue;
}
qsort(elt_list, (size_t)count_elts,
(size_t)sizeof(struct elt_list), elt_list_compare);
qsort(elt_list.data(), (size_t)count_elts,
sizeof(struct elt_list), elt_list_compare);
elt_list_combine();
for (jj = 0; jj < count_elts; jj++)
{
@ -3900,8 +3900,8 @@ tidy_min_surface(void)
free_check_null(temp_formula);
}
}
qsort(elt_list, (size_t) count_elts,
(size_t) sizeof(struct elt_list), elt_list_compare);
qsort(elt_list.data(), (size_t)count_elts,
sizeof(struct elt_list), elt_list_compare);
elt_list_combine();
/* Makes no sense: sorbed species need not be in mineral structure... */
/* But elements that can desorb into solution must be in mineral */
@ -4273,8 +4273,8 @@ tidy_kin_surface(void)
/* save kinetics formula */
if (count_elts > 0)
{
qsort(elt_list, (size_t) count_elts,
(size_t) sizeof(struct elt_list), elt_list_compare);
qsort(elt_list.data(), (size_t)count_elts,
sizeof(struct elt_list), elt_list_compare);
elt_list_combine();
}
elt_list_kinetics = elt_list_save();
@ -4302,8 +4302,8 @@ tidy_kin_surface(void)
}
if (count_elts > 0)
{
qsort(elt_list, (size_t) count_elts,
(size_t) sizeof(struct elt_list), elt_list_compare);
qsort(elt_list.data(), (size_t)count_elts,
sizeof(struct elt_list), elt_list_compare);
elt_list_combine();
}
for (int j = 0; j < count_elts; j++)

View File

@ -19,10 +19,9 @@ add_elt_list(struct elt_list *elt_list_ptr, LDBLE coef)
for (elt_list_ptr1 = elt_list_ptr; elt_list_ptr1->elt != NULL;
elt_list_ptr1++)
{
if (count_elts >= max_elts)
if (count_elts >= (int)elt_list.size())
{
space((void **) ((void *) &elt_list), count_elts, &max_elts,
sizeof(struct elt_list));
elt_list.resize((size_t)count_elts + 1);
}
elt_list[count_elts].elt = elt_list_ptr1->elt;
elt_list[count_elts].coef = elt_list_ptr1->coef * coef;
@ -65,10 +64,9 @@ add_elt_list_multi_surf(struct elt_list *elt_list_ptr, LDBLE coef, struct elemen
for (elt_list_ptr1 = elt_list_ptr; elt_list_ptr1->elt != NULL;
elt_list_ptr1++)
{
if (count_elts >= max_elts)
if (count_elts >= (int)elt_list.size())
{
space((void **) ((void *) &elt_list), count_elts, &max_elts,
sizeof(struct elt_list));
elt_list.resize((size_t)count_elts + 1);
}
if (elt_list_ptr1->elt == surf_elt_ptr)
{
@ -93,10 +91,9 @@ add_elt_list_multi_surf(struct elt_list *elt_list_ptr, LDBLE coef, struct elemen
for (elt_list_ptr1 = elt_list_ptr; elt_list_ptr1->elt != NULL;
elt_list_ptr1++)
{
if (count_elts >= max_elts)
if (count_elts >= (int)elt_list.size())
{
space((void **) ((void *) &elt_list), count_elts, &max_elts,
sizeof(struct elt_list));
elt_list.resize((size_t)count_elts + 1);
}
if (elt_list_ptr1->elt == surf_elt_ptr)
{
@ -115,10 +112,9 @@ add_elt_list(const cxxNameDouble & nd, LDBLE coef)
cxxNameDouble::const_iterator cit = nd.begin();
for ( ; cit != nd.end(); cit++)
{
if (count_elts >= max_elts)
if (count_elts >= (int)elt_list.size())
{
space((void **) ((void *) &elt_list), count_elts, &max_elts,
sizeof(struct elt_list));
elt_list.resize((size_t)count_elts + 1);
}
elt_list[count_elts].elt = element_store(cit->first.c_str());
elt_list[count_elts].coef = cit->second * coef;