]> git.ipfire.org Git - thirdparty/git.git/commit - combine-diff.c
combine-diff: simplify intersect_paths() further
authorJunio C Hamano <gitster@pobox.com>
Tue, 28 Jan 2014 21:55:59 +0000 (13:55 -0800)
committerJunio C Hamano <gitster@pobox.com>
Mon, 24 Feb 2014 22:44:57 +0000 (14:44 -0800)
commit7b1004b0ba6637e8c299ee8f927de5426139495c
tree6127fed901c8d8d52db795bb4e7fe7b278c6787f
parentaf82c7880f1a3df1655092da11c80603260384a0
combine-diff: simplify intersect_paths() further

Linus once said:

    I actually wish more people understood the really core low-level
    kind of coding. Not big, complex stuff like the lockless name
    lookup, but simply good use of pointers-to-pointers etc. For
    example, I've seen too many people who delete a singly-linked
    list entry by keeping track of the "prev" entry, and then to
    delete the entry, doing something like

if (prev)
    prev->next = entry->next;
else
    list_head = entry->next;

    and whenever I see code like that, I just go "This person
    doesn't understand pointers". And it's sadly quite common.

    People who understand pointers just use a "pointer to the entry
    pointer", and initialize that with the address of the
    list_head. And then as they traverse the list, they can remove
    the entry without using any conditionals, by just doing a "*pp =
    entry->next".

Applying that simplification lets us lose 7 lines from this function
even while adding 2 lines of comment.

I was tempted to squash this into the original commit, but because
the benchmarking described in the commit log is without this
simplification, I decided to keep it a separate follow-up patch.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
combine-diff.c