From: Michael Haggerty <mhagger@alum.mit.edu>
To: Jeff King <peff@peff.net>
Cc: Junio C Hamano <gitster@pobox.com>,
git@vger.kernel.org, Michael Haggerty <mhagger@alum.mit.edu>
Subject: [PATCH 2/4] strbuf_split_buf(): simplify iteration
Date: Sun, 4 Nov 2012 07:46:52 +0100 [thread overview]
Message-ID: <1352011614-29334-3-git-send-email-mhagger@alum.mit.edu> (raw)
In-Reply-To: <1352011614-29334-1-git-send-email-mhagger@alum.mit.edu>
While iterating, update str and slen to keep track of the part of the
string that hasn't been processed yet rather than computing things
relative to the start of the original string. This eliminates one
local variable, reduces the scope of another, and reduces the amount
of arithmetic needed within the loop.
Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
---
strbuf.c | 23 ++++++++++-------------
1 file changed, 10 insertions(+), 13 deletions(-)
diff --git a/strbuf.c b/strbuf.c
index 5256c2a..c7cd529 100644
--- a/strbuf.c
+++ b/strbuf.c
@@ -110,25 +110,22 @@ struct strbuf **strbuf_split_buf(const char *str, size_t slen, int delim, int ma
{
struct strbuf **ret = NULL;
size_t nr = 0, alloc = 0;
- const char *n, *p;
struct strbuf *t;
- p = n = str;
- while (n < str + slen) {
- int len;
- if (max <= 0 || nr + 1 < max)
- n = memchr(n, delim, slen - (n - str));
- else
- n = NULL;
- if (!n)
- n = str + slen - 1;
- len = n - p + 1;
+ while (slen) {
+ int len = slen;
+ if (max <= 0 || nr + 1 < max) {
+ const char *end = memchr(str, delim, slen);
+ if (end)
+ len = end - str + 1;
+ }
t = xmalloc(sizeof(struct strbuf));
strbuf_init(t, len);
- strbuf_add(t, p, len);
+ strbuf_add(t, str, len);
ALLOC_GROW(ret, nr + 2, alloc);
ret[nr++] = t;
- p = ++n;
+ str += len;
+ slen -= len;
}
ALLOC_GROW(ret, nr + 1, alloc); /* In case string was empty */
ret[nr] = NULL;
--
1.8.0
next prev parent reply other threads:[~2012-11-04 6:47 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-11-04 6:46 [PATCH 0/4] Simplify and document strbuf_split() functions Michael Haggerty
2012-11-04 6:46 ` [PATCH 1/4] strbuf_split_buf(): use ALLOC_GROW() Michael Haggerty
2012-11-04 11:41 ` Jeff King
2012-11-06 7:54 ` Michael Haggerty
2012-11-08 16:38 ` Jeff King
2012-11-04 6:46 ` Michael Haggerty [this message]
2012-11-04 6:46 ` [PATCH 3/4] strbuf_split*(): rename "delim" parameter to "terminator" Michael Haggerty
2012-11-04 6:46 ` [PATCH 4/4] strbuf_split*(): document functions Michael Haggerty
2012-11-04 11:50 ` [PATCH 0/4] Simplify and document strbuf_split() functions Jeff King
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=1352011614-29334-3-git-send-email-mhagger@alum.mit.edu \
--to=mhagger@alum.mit.edu \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=peff@peff.net \
/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).