From de1ba62395e62c05a2ea225b782dd321538539e2 Mon Sep 17 00:00:00 2001 From: David Parkhurst Date: Mon, 15 Mar 2021 13:21:14 -0600 Subject: [PATCH] vector s --- Phreeqc.cpp | 12 +---------- Phreeqc.h | 4 +--- mainsubs.cpp | 4 +--- model.cpp | 2 +- pitzer.cpp | 57 +++++++++++++++++++++++++------------------------- prep.cpp | 6 +++--- sit.cpp | 48 +++++++++++++++++++++--------------------- step.cpp | 2 +- structures.cpp | 19 ++++------------- tidy.cpp | 10 ++++----- 10 files changed, 69 insertions(+), 95 deletions(-) diff --git a/Phreeqc.cpp b/Phreeqc.cpp index f364038e..19e24943 100644 --- a/Phreeqc.cpp +++ b/Phreeqc.cpp @@ -726,9 +726,6 @@ void Phreeqc::init(void) max_logk = MAX_S; moles_per_kilogram_string= NULL; pe_string = NULL; - s = NULL; - count_s = 0; - max_s = MAX_S; // auto s_diff_layer; s_x = NULL; count_s_x = 0; @@ -1717,14 +1714,7 @@ Phreeqc::InternalCopy(const Phreeqc *pSrc) } count_logk = pSrc->count_logk; // s, species - count_s = 0; - //max_s = pSrc->max_s; - - //s = (struct species **) free_check_null(s); - //s = (struct species **) PHRQ_malloc(sizeof(struct species *)*size_t(max_s)); - - space((void **)((void *)&s), pSrc->max_s, &max_s, sizeof(struct species *)); - for (int i = 0; i < pSrc->count_s; i++) + for (int i = 0; i < (int)pSrc->s.size(); i++) { struct species *s_ptr = s_store(pSrc->s[i]->name, pSrc->s[i]->z, FALSE); memcpy(s_ptr, pSrc->s[i], sizeof(struct species)); diff --git a/Phreeqc.h b/Phreeqc.h index d54d2a6a..fb793c03 100644 --- a/Phreeqc.h +++ b/Phreeqc.h @@ -1483,9 +1483,7 @@ protected: char *moles_per_kilogram_string; char *pe_string; - struct species **s; - int count_s; - int max_s; + std::vector s; std::vector< std::map < std::string, cxxSpeciesDL > > s_diff_layer; struct species **s_x; diff --git a/mainsubs.cpp b/mainsubs.cpp index 9c8d98b9..690b2573 100644 --- a/mainsubs.cpp +++ b/mainsubs.cpp @@ -88,8 +88,6 @@ initialize(void) space((void **) ((void *) &trxn.token), INIT, &max_trxn, sizeof(struct rxn_token_temp)); - space((void **) ((void *) &s), INIT, &max_s, sizeof(struct species *)); - space((void **) ((void *) &logk), INIT, &max_logk, sizeof(struct logk *)); /* @@ -98,7 +96,7 @@ initialize(void) hcreate_multi((unsigned) max_logk, &logk_hash_table); hcreate_multi((unsigned) MAX_ELTS, &master_isotope_hash_table); hcreate_multi((unsigned) MAX_ELTS, &elements_hash_table); - hcreate_multi((unsigned) max_s, &species_hash_table); + hcreate_multi((unsigned) MAX_S, &species_hash_table); hcreate_multi((unsigned) MAX_PHASES, &phases_hash_table); // one save_values save_values = diff --git a/model.cpp b/model.cpp index dcb5736f..cda8234d 100644 --- a/model.cpp +++ b/model.cpp @@ -5028,7 +5028,7 @@ surface_model(void) if (dl_type_x != cxxSurface::NO_DL && same_model == FALSE) { s_diff_layer.clear(); - for (i = 0; i < count_s; i++) + for (i = 0; i < (int)s.size(); i++) { std::map < std::string, cxxSpeciesDL > dl; s_diff_layer.push_back(dl); diff --git a/pitzer.cpp b/pitzer.cpp index c911633e..d6209f3b 100644 --- a/pitzer.cpp +++ b/pitzer.cpp @@ -65,19 +65,18 @@ pitzer_tidy(void) */ if (spec != NULL) spec = (struct species **) free_check_null(spec); - spec = - (struct species **) - PHRQ_malloc((size_t) (3 * count_s * sizeof(struct species *))); + spec = (struct species **) + PHRQ_malloc((size_t) (3 * s.size() * sizeof(struct species *))); if (spec == NULL) malloc_error(); - for (i = 0; i < 3 * count_s; i++) + for (i = 0; i < 3 * (int)s.size(); i++) spec[i] = NULL; cations = spec; - neutrals = &(spec[count_s]); - anions = &(spec[2 * count_s]); - MAXCATIONS = count_s; - FIRSTANION = 2 * count_s; - MAXNEUTRAL = count_s; + neutrals = &(spec[s.size()]); + anions = &(spec[2 * s.size()]); + MAXCATIONS = (int)s.size(); + FIRSTANION = 2 * (int)s.size(); + MAXNEUTRAL = (int)s.size(); count_cations = 0; count_anions = 0; count_neutrals = 0; @@ -88,22 +87,22 @@ pitzer_tidy(void) */ if (IPRSNT != NULL) IPRSNT = (int *) free_check_null(IPRSNT); - IPRSNT = (int *) PHRQ_malloc((size_t) (3 * count_s * sizeof(int))); + IPRSNT = (int *) PHRQ_malloc((size_t) (3 * s.size() * sizeof(int))); if (IPRSNT == NULL) malloc_error(); if (M != NULL) M = (LDBLE *) free_check_null(M); - M = (LDBLE *) PHRQ_malloc((size_t) (3 * count_s * sizeof(LDBLE))); + M = (LDBLE *) PHRQ_malloc((size_t) (3 * s.size() * sizeof(LDBLE))); if (M == NULL) malloc_error(); if (LGAMMA != NULL) LGAMMA = (LDBLE *) free_check_null(LGAMMA); - LGAMMA = (LDBLE *) PHRQ_malloc((size_t) (3 * count_s * sizeof(LDBLE))); + LGAMMA = (LDBLE *) PHRQ_malloc((size_t) (3 * s.size() * sizeof(LDBLE))); if (LGAMMA == NULL) malloc_error(); - for (i = 0; i < count_s; i++) + for (i = 0; i < (int)s.size(); i++) { if (s[i] == s_eminus) continue; @@ -159,9 +158,9 @@ pitzer_tidy(void) } } - for (i = 2 * count_s; i < 2 * count_s + count_anions - 1; i++) + for (i = 2 * (int)s.size(); i < 2 * (int)s.size() + count_anions - 1; i++) { - for (j = i + 1; j < 2 * count_s + count_anions; j++) + for (j = i + 1; j < 2 * (int)s.size() + count_anions; j++) { sprintf(line, "%s %s 1", spec[i]->name, spec[j]->name); pzp_ptr = pitz_param_read(line, 2); @@ -574,7 +573,7 @@ ISPEC(const char *name) */ { int i; - for (i = 0; i < 3 * count_s; i++) + for (i = 0; i < 3 * (int)s.size(); i++) { if (spec[i] == NULL) continue; @@ -923,7 +922,7 @@ pitzer(void) C TRANSFER DATA FROM TO M C */ - for (i = 0; i < 3 * count_s; i++) + for (i = 0; i < 3 * (int)s.size(); i++) { IPRSNT[i] = FALSE; M[i] = 0.0; @@ -954,7 +953,7 @@ pitzer(void) C */ PTEMP(TK); - for (i = 0; i < 2 * count_s + count_anions; i++) + for (i = 0; i < 2 * (int)s.size() + count_anions; i++) { LGAMMA[i] = 0.0; if (IPRSNT[i] == TRUE) @@ -1155,7 +1154,7 @@ pitzer(void) F_var = (z0 == 1 ? F1 : (z0 == 2.0 ? F2 : F)); LGAMMA[i] += z0 * z0 * F_var + z0 * CSUM; } - for (i = 2 * count_s; i < 2 * count_s + count_anions; i++) + for (i = 2 * (int)s.size(); i < 2 * (int)s.size() + count_anions; i++) { if (!IPRSNT[i]) continue; @@ -1176,7 +1175,7 @@ pitzer(void) C CORRECTED ERROR IN PHIMAC, NOVEMBER, 1989 C */ - for (i = 0; i < 2 * count_s + count_anions; i++) + for (i = 0; i < 2 * (int)s.size() + count_anions; i++) { if (IPRSNT[i] == TRUE) { @@ -1198,7 +1197,7 @@ pitzer(void) */ /*s_h2o->la=log10(AW); */ mu_x = I; - for (i = 0; i < 2 * count_s + count_anions; i++) + for (i = 0; i < 2 * (int)s.size() + count_anions; i++) { if (IPRSNT[i] == FALSE) continue; @@ -2627,12 +2626,12 @@ pitzer_make_lists(void) max = count_cations; break; case 1: - min = count_s; - max = count_s + count_neutrals; + min = (int)s.size(); + max = (int)s.size() + count_neutrals; break; case 2: - min = 2*count_s; - max = 2*count_s + count_anions; + min = 2* (int)s.size(); + max = 2* (int)s.size() + count_anions; break; } for (int i = min; i < max; i++) @@ -2647,19 +2646,19 @@ pitzer_make_lists(void) continue; IPRSNT[i] = TRUE; s_list.push_back(i); - if (i < count_s) + if (i < (int)s.size()) { cation_list.push_back(i); } - if (i >= count_s && i < 2*count_s) + if (i >= (int)s.size() && i < 2* (int)s.size()) { neutral_list.push_back(i); } - if (i >= 2*count_s) + if (i >= 2* (int)s.size()) { anion_list.push_back(i); } - if (i < count_s || i >= 2*count_s) + if (i < (int)s.size() || i >= 2* (int)s.size()) { ion_list.push_back(i); } diff --git a/prep.cpp b/prep.cpp index 63c6e822..e966eed8 100644 --- a/prep.cpp +++ b/prep.cpp @@ -1205,7 +1205,7 @@ build_model(void) count_s_x = 0; compute_gfw("H2O", &gfw_water); gfw_water *= 0.001; - for (i = 0; i < count_s; i++) + for (i = 0; i < (int)s.size(); i++) { if (s[i]->type > H2O && s[i]->type != EX && s[i]->type != SURF) continue; @@ -1810,7 +1810,7 @@ clear(void) */ solution_ptr = use.Get_solution_ptr(); - for (i = 0; i < count_s; i++) + for (i = 0; i < (int)s.size(); i++) { s[i]->in = FALSE; } @@ -4832,7 +4832,7 @@ setup_unknowns(void) max_unknowns++; if (pitzer_model == TRUE || sit_model == TRUE) { - max_unknowns += count_s; + max_unknowns += (int)s.size(); } /* diff --git a/sit.cpp b/sit.cpp index e636e423..22fbdd42 100644 --- a/sit.cpp +++ b/sit.cpp @@ -39,16 +39,16 @@ sit_tidy(void) * allocate pointers to species structures */ if (spec != NULL) spec = (struct species **) free_check_null(spec); - spec = (struct species **) PHRQ_malloc((size_t) (3 * count_s * sizeof(struct species *))); + spec = (struct species **) PHRQ_malloc((size_t) (3 * s.size() * sizeof(struct species *))); if (spec == NULL) malloc_error(); - for (i = 0; i < 3 * count_s; i++) spec[i] = NULL; + for (i = 0; i < 3 * (int)s.size(); i++) spec[i] = NULL; cations = spec; - neutrals = &(spec[count_s]); - anions = &(spec[2 * count_s]); - sit_MAXCATIONS = count_s; - sit_FIRSTANION = 2 * count_s; - sit_MAXNEUTRAL = count_s; + neutrals = &(spec[s.size()]); + anions = &(spec[2 * s.size()]); + sit_MAXCATIONS = (int)s.size(); + sit_FIRSTANION = 2 * (int)s.size(); + sit_MAXNEUTRAL = (int)s.size(); sit_count_cations = 0; sit_count_anions = 0; sit_count_neutrals = 0; @@ -57,17 +57,17 @@ sit_tidy(void) * allocate other arrays for SIT */ if (sit_IPRSNT != NULL) sit_IPRSNT = (int *) free_check_null(sit_IPRSNT); - sit_IPRSNT = (int *) PHRQ_malloc((size_t) (3 * count_s * sizeof(int))); + sit_IPRSNT = (int *) PHRQ_malloc((size_t) (3 * s.size() * sizeof(int))); if (sit_IPRSNT == NULL) malloc_error(); if (sit_M != NULL) sit_M = (LDBLE *) free_check_null(sit_M); - sit_M = (LDBLE *) PHRQ_malloc((size_t) (3 * count_s * sizeof(LDBLE))); + sit_M = (LDBLE *) PHRQ_malloc((size_t) (3 * s.size() * sizeof(LDBLE))); if (sit_M == NULL) malloc_error(); if (sit_LGAMMA != NULL) sit_LGAMMA = (LDBLE *) free_check_null(sit_LGAMMA); - sit_LGAMMA = (LDBLE *) PHRQ_malloc((size_t) (3 * count_s * sizeof(LDBLE))); + sit_LGAMMA = (LDBLE *) PHRQ_malloc((size_t) (3 * s.size() * sizeof(LDBLE))); if (sit_LGAMMA == NULL) malloc_error(); - for (i = 0; i < count_s; i++) + for (i = 0; i < (int)s.size(); i++) { if (s[i] == s_eminus) continue; @@ -149,7 +149,7 @@ sit_ISPEC(const char *name) */ { int i; - for (i = 0; i < 3 * count_s; i++) + for (i = 0; i < 3 * (int)s.size(); i++) { if (spec[i] == NULL) continue; @@ -340,7 +340,7 @@ sit(void) sit_M[i] = 0.0; } } - //for (i = 0; i < 3 * count_s; i++) + //for (i = 0; i < 3 * (int)s.size(); i++) //{ // sit_IPRSNT[i] = FALSE; // sit_M[i] = 0.0; @@ -368,7 +368,7 @@ sit(void) XI = XI + sit_M[i] * spec[i]->z * spec[i]->z; OSUM = OSUM + sit_M[i]; } - //for (i = 0; i < 2 * count_s + sit_count_anions; i++) + //for (i = 0; i < 2 * (int)s.size() + sit_count_anions; i++) //{ // sit_LGAMMA[i] = 0.0; // if (sit_IPRSNT[i] == TRUE) @@ -462,7 +462,7 @@ sit(void) // z0 = spec[i]->z; // sit_LGAMMA[i] += z0 * z0 * F; //} - //for (i = 2 * count_s; i < 2 * count_s + sit_count_anions; i++) + //for (i = 2 * (int)s.size(); i < 2 * (int)s.size() + sit_count_anions; i++) //{ // z0 = spec[i]->z; // sit_LGAMMA[i] += z0 * z0 * F; @@ -488,7 +488,7 @@ sit(void) int i = s_list[j]; spec[i]->lg_pitzer = sit_LGAMMA[i]; } -// for (i = 0; i < 2 * count_s + sit_count_anions; i++) +// for (i = 0; i < 2 * (int)s.size() + sit_count_anions; i++) // { // if (sit_IPRSNT[i] == FALSE) continue; // spec[i]->lg_pitzer = sit_LGAMMA[i]; @@ -1447,12 +1447,12 @@ sit_make_lists(void) max = sit_count_cations; break; case 1: - min = count_s; - max = count_s + sit_count_neutrals; + min = (int)s.size(); + max = (int)s.size() + sit_count_neutrals; break; case 2: - min = 2*count_s; - max = 2*count_s + sit_count_anions; + min = 2*(int)s.size(); + max = 2*(int)s.size() + sit_count_anions; break; } for (int i = min; i < max; i++) @@ -1466,19 +1466,19 @@ sit_make_lists(void) continue; sit_IPRSNT[i] = TRUE; s_list.push_back(i); - if (i < count_s) + if (i < (int)s.size()) { cation_list.push_back(i); } - if (i >= count_s && i < 2*count_s) + if (i >= (int)s.size() && i < 2*(int)s.size()) { neutral_list.push_back(i); } - if (i >= 2*count_s) + if (i >= 2*(int)s.size()) { anion_list.push_back(i); } - if (i < count_s || i >= 2*count_s) + if (i < (int)s.size() || i >= 2*(int)s.size()) { ion_list.push_back(i); } diff --git a/step.cpp b/step.cpp index e4d83ac6..19094bcf 100644 --- a/step.cpp +++ b/step.cpp @@ -326,7 +326,7 @@ xsolution_zero(void) } if (pitzer_model == TRUE || sit_model == TRUE) { - for (i = 0; i < count_s; i++) + for (i = 0; i < (int)s.size(); i++) { s[i]->lg = 0.0; } diff --git a/structures.cpp b/structures.cpp index ee8ba3fb..41e83140 100644 --- a/structures.cpp +++ b/structures.cpp @@ -64,12 +64,11 @@ clean_up(void) /* species */ - for (j = 0; j < count_s; j++) + for (j = 0; j < (int)s.size(); j++) { s_free(s[j]); s[j] = (struct species *) free_check_null(s[j]); } - s = (struct species **) free_check_null(s); /* master species */ @@ -311,7 +310,6 @@ clean_up(void) title_x = (char *) free_check_null(title_x); last_title_x.clear(); count_master = 0; - count_s = 0; count_logk = 0; count_rates = 0; count_inverse = 0; @@ -1962,11 +1960,7 @@ s_delete(int i) s_free(s[i]); s[i] = (struct species *) free_check_null(s[i]); - for (j = i; j < (count_s - 1); j++) - { - s[j] = s[j + 1]; - } - count_s--; + s.erase(s.begin() + i); return (OK); } @@ -2158,13 +2152,8 @@ s_store(const char *name, LDBLE l_z, int replace_if_found) } else { - n = count_s++; - /* make sure there is space in s */ - if (count_s >= max_s) - { - space((void **) ((void *) &s), count_s, &max_s, - sizeof(struct species *)); - } + n = (int)s.size(); + s.resize((size_t)n + 1); /* Make new species structure */ s[n] = s_alloc(); s_ptr = s[n]; diff --git a/tidy.cpp b/tidy.cpp index 0625df42..1d9219e8 100644 --- a/tidy.cpp +++ b/tidy.cpp @@ -150,7 +150,7 @@ tidy_model(void) /* species */ if (new_model == TRUE) { - qsort(s, (size_t) count_s, (size_t) sizeof(struct species *), s_compare); + qsort(s.data(), s.size(), sizeof(struct species *), s_compare); /* master species */ qsort(master, (unsigned) count_master, sizeof(struct master *), master_compare); @@ -453,7 +453,7 @@ check_species_input(void) int return_value; return_value = OK; - for (i = 0; i < count_s; i++) + for (i = 0; i < (int)s.size(); i++) { if (s[i]->next_elt == NULL) { @@ -2304,7 +2304,7 @@ tidy_species(void) /* * Set secondary and primary pointers in species structures */ - for (i = 0; i < count_s; i++) + for (i = 0; i < (int)s.size(); i++) { s[i]->number = i; s[i]->primary = NULL; @@ -2396,7 +2396,7 @@ tidy_species(void) /* * Rewrite all species to secondary species */ - for (i = 0; i < count_s; i++) + for (i = 0; i < (int)s.size(); i++) { count_trxn = 0; if (s[i]->primary != NULL || s[i]->secondary != NULL) @@ -2487,7 +2487,7 @@ tidy_species(void) /* * Calculate H and O if alternate mass balance is given */ - for (i = 0; i < count_s; i++) + for (i = 0; i < (int)s.size(); i++) { if (s[i]->next_secondary != NULL) {