Thread (45 messages) 45 messages, 10 authors, 2016-06-15

Re: [PATCH/RFC v3 6/8] Add case insensitivity support when using git ls-files

From: Jonathan Nieder <hidden>
Date: 2016-06-15 22:49:41

Johannes Sixt wrote:
On Sonntag, 3. Oktober 2010, Thomas Adam wrote:
quoted
It's a real shame about the code duplication here.  Can we not avoid
it just by doing:

unsigned char c1 = (ignore_case) ? tolower(*match) : *match;
unisgned char c2 = (ignore_case) ? tolower(*name) : *name;

I appreciate that to some it might look like perl golf, but...
It has been discussed, and IIRC, the concensus was to keep the code 
duplication because this is an inner loop.
Did anyone time it?  If it really is not dwarfed by other computation,
then how about (warning: ugly!)

static inline int step(unsigned char c1, unsigned char c2,
                       const char **match, const char **name, int *namelen)
{
	if (c1 == '\0' || is_glob_special(c1))
		return 1;	/* break */
	if (c1 != c2)
		return 0;	/* found mismatch! */
	(*match)++;
	(*name)++;
	(*namelen)--;
	return 2;	/* continue */
}
...

int r = 1;
if (!ignore_case) {
	while ((r = step(*match, *name, &match, &name, &namelen)) == 2)
		; /* matches so far */
} else {
	while ((r = step(tolower(*match), tolower(*name),
	                 &match, &name, &namelen)) == 2)
		; /* matches so far */
}
if (!r)	/* found mismatch! */
	return 0;
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help