From ac2c9f2cbc8421706f14090bd2d6436834fe68ba Mon Sep 17 00:00:00 2001 From: rlar Date: Wed, 1 Jun 2016 20:04:48 +0200 Subject: [PATCH] avoid excessive and expensive invocations of vec_rebuild_lookup_table() see https://sourceforge.net/p/ngspice/support-requests/20/ reported by Marlize Schoeman in ticket #20 --- src/frontend/vectors.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/frontend/vectors.c b/src/frontend/vectors.c index 4069b065a..f5817910c 100644 --- a/src/frontend/vectors.c +++ b/src/frontend/vectors.c @@ -773,7 +773,12 @@ vec_new(struct dvec *d) if (plot_cur == NULL) { fprintf(cp_err, "vec_new: Internal Error: no cur plot\n"); } - plot_cur->pl_lookup_valid = FALSE; + if (plot_cur->pl_lookup_valid && d->v_name) { + char *lower_name = copy(d->v_name); + strtolower(lower_name); + nghash_insert(plot_cur->pl_lookup_table, lower_name, d); + tfree(lower_name); + } if ((d->v_flags & VF_PERMANENT) && (plot_cur->pl_scale == NULL)) plot_cur->pl_scale = d; if (!d->v_plot) @@ -837,7 +842,12 @@ vec_free_x(struct dvec *v) /* Now we have to take this dvec out of the plot list. */ if (pl != NULL) { - pl->pl_lookup_valid = FALSE; + if (pl->pl_lookup_valid) { + char *lower_name = copy(v->v_name); + strtolower(lower_name); + nghash_deleteItem(pl->pl_lookup_table, lower_name, v); + tfree(lower_name); + } if (pl->pl_dvecs == v) { pl->pl_dvecs = v->v_next; } else {