Re: [PATCH v2 06/11] ref-filter: introduce color_atom_parser()
From: Karthik Nayak <hidden>
Date: 2016-06-15 23:07:31
On Thu, Dec 17, 2015 at 2:51 AM, Eric Sunshine [off-list ref] wrote:
On Wed, Dec 16, 2015 at 10:29 AM, Karthik Nayak [off-list ref] wrote:quoted
Introduce color_atom_parser() which will parse a "color" atom and store its color in the "use_atom" structure for further usage inSame comment as last time: s/use_atom/used_atom/
Will change.
quoted
'populate_value()'.s/'//g
Will do.
More below...quoted
Helped-by: Ramsay Jones [off-list ref] Signed-off-by: Karthik Nayak <redacted> ---diff --git a/ref-filter.c b/ref-filter.c@@ -29,6 +29,9 @@ typedef enum { FIELD_STR, FIELD_ULONG, FIELD_TIME } cmp_type; static struct used_atom { const char *str; cmp_type type; + union { + const char *color; + } u; } *used_atom; static int used_atom_cnt, need_tagged, need_symref; static int need_color_reset_at_eol;@@ -53,6 +56,13 @@ static int match_atom_name(const char *name, const char *atom_name, const char * +static void color_atom_parser(struct used_atom *atom) +{ + match_atom_name(atom->str, "color", &atom->u.color); + if (!atom->u.color) + die(_("expected format: %%(color:<color>)")); +} +@@ -833,12 +846,10 @@ static void populate_value(struct ref_array_item *ref) refname = branch_get_push(branch, NULL); if (!refname) continue; - } else if (match_atom_name(name, "color", &valp)) { + } else if (starts_with(name, "color:")) { char color[COLOR_MAXLEN] = ""; - if (!valp) - die(_("expected format: %%(color:<color>)")); - if (color_parse(valp, color) < 0) + if (color_parse(atom->u.color, color) < 0)It would make a lot more sense to invoke color_parse() with the unchanging argument to "color:" just once in color_atom_parser() rather than doing it here repeatedly. (Also, you'd drop 'const' from used_atom.u.color declaration.)
This makes sense, I'll put have color_parse() in color_atom_parser(). This would also require us to allocate memory once in color_atom_parser.
Does v->s get freed each time through the loop? If not, then, assuming you parse the color just once in color_atom_parser(), then you could just assign the parsed color directly to v->s rather than duplicating it.
No it doesn't. Yup will do. -- Regards, Karthik Nayak