diff --git a/Phreeqc.cpp b/Phreeqc.cpp index 1ba97b95..47122dcf 100644 --- a/Phreeqc.cpp +++ b/Phreeqc.cpp @@ -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 diff --git a/Phreeqc.h b/Phreeqc.h index 8979be00..4dcc12d6 100644 --- a/Phreeqc.h +++ b/Phreeqc.h @@ -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; int count_elts; /* number of elements in elt_list = position of next */ - int max_elts; /*---------------------------------------------------------------------- * Reaction *---------------------------------------------------------------------- */ diff --git a/basicsubs.cpp b/basicsubs.cpp index f3d97f24..a54440cc 100644 --- a/basicsubs.cpp +++ b/basicsubs.cpp @@ -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); diff --git a/integrate.cpp b/integrate.cpp index 1dbd5200..c4488a65 100644 --- a/integrate.cpp +++ b/integrate.cpp @@ -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); diff --git a/mainsubs.cpp b/mainsubs.cpp index 50c6085c..10654610 100644 --- a/mainsubs.cpp +++ b/mainsubs.cpp @@ -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; diff --git a/parse.cpp b/parse.cpp index 4bd6a255..22e00495 100644 --- a/parse.cpp +++ b/parse.cpp @@ -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; } diff --git a/prep.cpp b/prep.cpp index 1a657395..131cbb62 100644 --- a/prep.cpp +++ b/prep.cpp @@ -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); } diff --git a/print.cpp b/print.cpp index b006afc4..4cd48a86 100644 --- a/print.cpp +++ b/print.cpp @@ -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(); } /* diff --git a/step.cpp b/step.cpp index a785b367..d9cf2715 100644 --- a/step.cpp +++ b/step.cpp @@ -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(); } /* diff --git a/structures.cpp b/structures.cpp index 30863ade..57011da8 100644 --- a/structures.cpp +++ b/structures.cpp @@ -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(); } /* diff --git a/tally.cpp b/tally.cpp index 56a0c83b..ea45226f 100644 --- a/tally.cpp +++ b/tally.cpp @@ -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(); } diff --git a/tidy.cpp b/tidy.cpp index 72404df6..38e90ffc 100644 --- a/tidy.cpp +++ b/tidy.cpp @@ -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++) diff --git a/utilities.cpp b/utilities.cpp index 49870995..86992a8b 100644 --- a/utilities.cpp +++ b/utilities.cpp @@ -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;