aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Rostedt <srostedt@redhat.com>2010-02-10 18:34:40 -0500
committerSteven Rostedt <rostedt@goodmis.org>2010-02-10 18:34:40 -0500
commitf4258f18687ea19e38eccb8c7badb451d3d2d5e2 (patch)
tree370c8d678199087bd9f8a4f9b45374f4fb7316f0
parentbdd0561e19389a10901240dc907a969d9f97c898 (diff)
trace-graph: Add plot_list to hold the plots on a hash
Add an intermediate list item for hashs to let a plot be assigned to more that one hash. Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
-rw-r--r--trace-graph.h8
-rw-r--r--trace-plot.c20
2 files changed, 19 insertions, 9 deletions
diff --git a/trace-graph.h b/trace-graph.h
index f7bc117..f8d582c 100644
--- a/trace-graph.h
+++ b/trace-graph.h
@@ -81,7 +81,6 @@ struct plot_callbacks {
81}; 81};
82 82
83struct graph_plot { 83struct graph_plot {
84 struct graph_plot *next; /* for hash */
85 int pos; 84 int pos;
86 char *label; 85 char *label;
87 const struct plot_callbacks *cb; 86 const struct plot_callbacks *cb;
@@ -93,9 +92,14 @@ struct graph_callbacks {
93 graph_filter_cb *filter; 92 graph_filter_cb *filter;
94}; 93};
95 94
95struct plot_list {
96 struct plot_list *next;
97 struct graph_plot *plot;
98};
99
96struct plot_hash { 100struct plot_hash {
97 struct plot_hash *next; 101 struct plot_hash *next;
98 struct graph_plot *plots; 102 struct plot_list *plots;
99 gint val; 103 gint val;
100}; 104};
101 105
diff --git a/trace-plot.c b/trace-plot.c
index 5f0ab75..37b5cfc 100644
--- a/trace-plot.c
+++ b/trace-plot.c
@@ -155,8 +155,10 @@ static struct plot_hash *find_hash(struct plot_hash **array, gint val)
155static void add_hash(struct plot_hash **array, struct graph_plot *plot, gint val) 155static void add_hash(struct plot_hash **array, struct graph_plot *plot, gint val)
156{ 156{
157 struct plot_hash *hash; 157 struct plot_hash *hash;
158 struct plot_list *list;
158 gint key; 159 gint key;
159 160
161 list = malloc_or_die(sizeof(*list));
160 hash = find_hash(array, val); 162 hash = find_hash(array, val);
161 if (!hash) { 163 if (!hash) {
162 hash = g_new0(typeof(*hash), 1); 164 hash = g_new0(typeof(*hash), 1);
@@ -167,25 +169,29 @@ static void add_hash(struct plot_hash **array, struct graph_plot *plot, gint val
167 array[key] = hash; 169 array[key] = hash;
168 } 170 }
169 171
170 plot->next = hash->plots; 172 list->next = hash->plots;
171 hash->plots = plot; 173 list->plot = plot;
174
175 hash->plots = list;
172} 176}
173 177
174static void remove_hash(struct plot_hash **array, struct graph_plot *plot, gint val) 178static void remove_hash(struct plot_hash **array, struct graph_plot *plot, gint val)
175{ 179{
176 struct plot_hash *hash, **phash; 180 struct plot_hash *hash, **phash;
177 struct graph_plot **pplot; 181 struct plot_list **pplot;
182 struct plot_list *list;
178 gint key; 183 gint key;
179 184
180 hash = find_hash(array, val); 185 hash = find_hash(array, val);
181 pplot = &hash->plots; 186 pplot = &hash->plots;
182 187
183 while (*pplot) { 188 while ((list = *pplot)) {
184 if (*pplot == plot) { 189 if (list->plot == plot) {
185 *pplot = plot->next; 190 *pplot = list->next;
191 free(list);
186 break; 192 break;
187 } 193 }
188 pplot = &(*pplot)->next; 194 pplot = &list->next;
189 } 195 }
190 196
191 if (hash->plots) 197 if (hash->plots)