From: Karthik Nayak <karthik.188@gmail.com>
To: git@vger.kernel.org
Cc: matthieu.moy@grenoble-inp.fr, gitster@pobox.com,
Karthik Nayak <Karthik.188@gmail.com>
Subject: [PATCH/RFC 02/10] ref-filter: introduce struct used_atom
Date: Thu, 12 Nov 2015 01:14:28 +0530 [thread overview]
Message-ID: <1447271075-15364-3-git-send-email-Karthik.188@gmail.com> (raw)
In-Reply-To: <1447271075-15364-1-git-send-email-Karthik.188@gmail.com>
Introduce the 'used_array' structure which would replace the existing
implementation of 'used_array' (which a list of atoms). This helps us
parse atom's before hand and store required details into the
'used_array' for future usage.
Signed-off-by: Karthik Nayak <Karthik.188@gmail.com>
---
ref-filter.c | 62 +++++++++++++++++++++++++++++++-----------------------------
1 file changed, 32 insertions(+), 30 deletions(-)
diff --git a/ref-filter.c b/ref-filter.c
index fbbda17..748a2fe 100644
--- a/ref-filter.c
+++ b/ref-filter.c
@@ -16,6 +16,23 @@
typedef enum { FIELD_STR, FIELD_ULONG, FIELD_TIME } cmp_type;
+/*
+ * An atom is a valid field atom listed below, possibly prefixed with
+ * a "*" to denote deref_tag().
+ *
+ * We parse given format string and sort specifiers, and make a list
+ * of properties that we need to extract out of objects. ref_array_item
+ * structure will hold an array of values extracted that can be
+ * indexed with the "atom number", which is an index into this
+ * array.
+ */
+static struct used_atom {
+ const char *str;
+ cmp_type type;
+} *used_atom;
+static int used_atom_cnt, need_tagged, need_symref;
+static int need_color_reset_at_eol;
+
static struct {
const char *name;
cmp_type cmp_type;
@@ -93,21 +110,6 @@ struct atom_value {
};
/*
- * An atom is a valid field atom listed above, possibly prefixed with
- * a "*" to denote deref_tag().
- *
- * We parse given format string and sort specifiers, and make a list
- * of properties that we need to extract out of objects. ref_array_item
- * structure will hold an array of values extracted that can be
- * indexed with the "atom number", which is an index into this
- * array.
- */
-static const char **used_atom;
-static cmp_type *used_atom_type;
-static int used_atom_cnt, need_tagged, need_symref;
-static int need_color_reset_at_eol;
-
-/*
* Used to parse format string and sort specifiers
*/
int parse_ref_filter_atom(const char *atom, const char *ep)
@@ -123,8 +125,8 @@ int parse_ref_filter_atom(const char *atom, const char *ep)
/* Do we have the atom already used elsewhere? */
for (i = 0; i < used_atom_cnt; i++) {
- int len = strlen(used_atom[i]);
- if (len == ep - atom && !memcmp(used_atom[i], atom, len))
+ int len = strlen(used_atom[i].str);
+ if (len == ep - atom && !memcmp(used_atom[i].str, atom, len))
return i;
}
@@ -151,12 +153,11 @@ int parse_ref_filter_atom(const char *atom, const char *ep)
at = used_atom_cnt;
used_atom_cnt++;
REALLOC_ARRAY(used_atom, used_atom_cnt);
- REALLOC_ARRAY(used_atom_type, used_atom_cnt);
- used_atom[at] = xmemdupz(atom, ep - atom);
- used_atom_type[at] = valid_atom[i].cmp_type;
+ used_atom[at].str = xmemdupz(atom, ep - atom);
+ used_atom[at].type = valid_atom[i].cmp_type;
if (*atom == '*')
need_tagged = 1;
- if (!strcmp(used_atom[at], "symref"))
+ if (!strcmp(used_atom[at].str, "symref"))
need_symref = 1;
return at;
}
@@ -316,7 +317,7 @@ int verify_ref_format(const char *format)
at = parse_ref_filter_atom(sp + 2, ep);
cp = ep + 1;
- if (skip_prefix(used_atom[at], "color:", &color))
+ if (skip_prefix(used_atom[at].str, "color:", &color))
need_color_reset_at_eol = !!strcmp(color, "reset");
}
return 0;
@@ -360,7 +361,7 @@ static void grab_common_values(struct atom_value *val, int deref, struct object
int i;
for (i = 0; i < used_atom_cnt; i++) {
- const char *name = used_atom[i];
+ const char *name = used_atom[i].str;
struct atom_value *v = &val[i];
if (!!deref != (*name == '*'))
continue;
@@ -384,7 +385,7 @@ static void grab_tag_values(struct atom_value *val, int deref, struct object *ob
struct tag *tag = (struct tag *) obj;
for (i = 0; i < used_atom_cnt; i++) {
- const char *name = used_atom[i];
+ const char *name = used_atom[i].str;
struct atom_value *v = &val[i];
if (!!deref != (*name == '*'))
continue;
@@ -406,7 +407,7 @@ static void grab_commit_values(struct atom_value *val, int deref, struct object
struct commit *commit = (struct commit *) obj;
for (i = 0; i < used_atom_cnt; i++) {
- const char *name = used_atom[i];
+ const char *name = used_atom[i].str;
struct atom_value *v = &val[i];
if (!!deref != (*name == '*'))
continue;
@@ -536,7 +537,7 @@ static void grab_person(const char *who, struct atom_value *val, int deref, stru
const char *wholine = NULL;
for (i = 0; i < used_atom_cnt; i++) {
- const char *name = used_atom[i];
+ const char *name = used_atom[i].str;
struct atom_value *v = &val[i];
if (!!deref != (*name == '*'))
continue;
@@ -574,7 +575,7 @@ static void grab_person(const char *who, struct atom_value *val, int deref, stru
if (!wholine)
return;
for (i = 0; i < used_atom_cnt; i++) {
- const char *name = used_atom[i];
+ const char *name = used_atom[i].str;
struct atom_value *v = &val[i];
if (!!deref != (*name == '*'))
continue;
@@ -664,7 +665,7 @@ static void grab_sub_body_contents(struct atom_value *val, int deref, struct obj
unsigned long sublen = 0, bodylen = 0, nonsiglen = 0, siglen = 0;
for (i = 0; i < used_atom_cnt; i++) {
- const char *name = used_atom[i];
+ const char *name = used_atom[i].str;
struct atom_value *v = &val[i];
const char *valp = NULL;
if (!!deref != (*name == '*'))
@@ -787,7 +788,8 @@ static void populate_value(struct ref_array_item *ref)
/* Fill in specials first */
for (i = 0; i < used_atom_cnt; i++) {
- const char *name = used_atom[i];
+ struct used_atom *atom = &used_atom[i];
+ const char *name = atom->str;
struct atom_value *v = &ref->value[i];
int deref = 0;
const char *refname;
@@ -1446,7 +1448,7 @@ static int cmp_ref_sorting(struct ref_sorting *s, struct ref_array_item *a, stru
{
struct atom_value *va, *vb;
int cmp;
- cmp_type cmp_type = used_atom_type[s->atom];
+ cmp_type cmp_type = used_atom[s->atom].type;
get_ref_atom_value(a, s->atom, &va);
get_ref_atom_value(b, s->atom, &vb);
--
2.6.2
next prev parent reply other threads:[~2015-11-11 19:44 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-11 19:44 [PATCH/RFC 00/10] ref-filter: use parsing functions Karthik Nayak
2015-11-11 19:44 ` [PATCH/RFC 01/10] ref-filter: introduce a parsing function for each atom in valid_atom Karthik Nayak
2015-11-23 23:44 ` Eric Sunshine
2015-11-25 12:10 ` Karthik Nayak
2015-11-25 19:41 ` Eric Sunshine
2015-11-26 18:01 ` Karthik Nayak
2015-12-11 22:18 ` Junio C Hamano
2015-12-12 16:05 ` Karthik Nayak
2015-11-11 19:44 ` Karthik Nayak [this message]
2015-12-01 23:00 ` [PATCH/RFC 02/10] ref-filter: introduce struct used_atom Eric Sunshine
2015-11-11 19:44 ` [PATCH/RFC 03/10] ref-fitler: bump match_atom() name to the top Karthik Nayak
2015-11-11 19:44 ` [PATCH/RFC 04/10] ref-filter: skip deref specifier in match_atom_name() Karthik Nayak
2015-12-01 23:11 ` Eric Sunshine
2015-12-03 6:34 ` Karthik Nayak
2015-11-11 19:44 ` [PATCH/RFC 05/10] ref-filter: introduce color_atom_parser() Karthik Nayak
2015-12-01 23:27 ` Eric Sunshine
2015-12-03 13:35 ` Karthik Nayak
2015-12-13 6:05 ` Eric Sunshine
2015-12-13 18:46 ` Karthik Nayak
2015-11-11 19:44 ` [PATCH/RFC 06/10] strbuf: introduce strbuf_split_str_without_term() Karthik Nayak
2015-12-02 8:04 ` Eric Sunshine
2015-12-03 18:12 ` Karthik Nayak
2015-12-11 22:31 ` Junio C Hamano
2015-12-12 16:04 ` Karthik Nayak
2015-11-11 19:44 ` [PATCH/RFC 07/10] ref-filter: introduce align_atom_parser() Karthik Nayak
2015-12-02 21:23 ` Eric Sunshine
2015-12-07 17:00 ` Karthik Nayak
2015-11-11 19:44 ` [PATCH/RFC 08/10] ref-filter: introduce remote_ref_atom_parser() Karthik Nayak
2015-12-13 0:53 ` Eric Sunshine
2015-12-13 6:02 ` Karthik Nayak
2015-12-13 6:15 ` Eric Sunshine
2015-12-13 8:32 ` Karthik Nayak
2015-12-13 8:45 ` Eric Sunshine
2015-12-13 8:53 ` Karthik Nayak
2015-11-11 19:44 ` [PATCH/RFC 09/10] ref-filter: introduce contents_atom_parser() Karthik Nayak
2015-12-13 3:10 ` Eric Sunshine
2015-12-13 4:41 ` Eric Sunshine
2015-12-13 19:36 ` Karthik Nayak
2015-12-13 19:33 ` Karthik Nayak
2015-11-24 21:48 ` [PATCH/RFC 00/10] ref-filter: use parsing functions Jeff King
2015-11-25 12:07 ` Karthik Nayak
2015-11-25 13:44 ` [PATCH/RFC 10/10] ref-filter: introduce objectname_atom_parser() Karthik Nayak
2015-12-13 4:49 ` Eric Sunshine
2015-12-13 19:40 ` Karthik Nayak
2015-12-11 22:49 ` [PATCH/RFC 00/10] ref-filter: use parsing functions Junio C Hamano
2015-12-13 5:40 ` Eric Sunshine
2015-12-13 9:31 ` Karthik Nayak
2015-12-13 21:55 ` Eric Sunshine
2015-12-16 14:45 ` Karthik Nayak
2015-12-14 19:06 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1447271075-15364-3-git-send-email-Karthik.188@gmail.com \
--to=karthik.188@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=matthieu.moy@grenoble-inp.fr \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).