Skip to content

Commit ea0aa55

Browse files
authored
Merge pull request #60 from masatake/more-inline
Make one more function inine and use a table instead of switch/case
2 parents 2275e9d + 7661a7f commit ea0aa55

2 files changed

Lines changed: 39 additions & 27 deletions

File tree

NEWS.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
# Version XXX
22

3-
- imporve performance; put inline keyword on a hot spot function.
3+
- improve performance; put inline keyword on hot spot functions.
44

5-
- before this change
5+
- before this change (0.4.0)
66

77
```
8-
$ /bin/time ./readtags -t ~/.citre/kernel82.tags -l > /dev/null
9-
9.59user 0.42system 0:10.06elapsed 99%CPU (0avgtext+0avgdata 2819340maxresident)k
10-
0inputs+0outputs (0major+44149minor)pagefaults 0swaps
8+
$ /bin/time ~/bin/readtags -t ~/.citre/kernel82.tags -l > /dev/null
9+
7.68user 0.15system 0:07.88elapsed 99%CPU (0avgtext+0avgdata 2819592maxresident)k
10+
0inputs+0outputs (0major+44138minor)pagefaults 0swaps
1111
```
1212

1313
- after this change
1414

1515
```
16-
$ /bin/time ./readtags -t ~/.citre/kernel82.tags -l > /dev/null
17-
7.82user 0.43system 0:08.30elapsed 99%CPU (0avgtext+0avgdata 2819688maxresident)k
18-
0inputs+0outputs (0major+44138minor)pagefaults 0swaps
16+
$ /bin/time ~/bin/readtags -t ~/.citre/kernel82.tags -l > /dev/null
17+
4.67user 0.19system 0:04.89elapsed 99%CPU (0avgtext+0avgdata 2819612maxresident)k
18+
0inputs+0outputs (0major+44137minor)pagefaults 0swaps
1919
```
2020

2121
# Version 0.4.0

readtags.c

Lines changed: 31 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -156,10 +156,22 @@ static int xdigitValue (unsigned char digit)
156156
return 0;
157157
}
158158

159+
static unsigned char altchars[0x100] = {
160+
['\\'] = '\\',
161+
['a'] = '\a', /* u-ctags extension */
162+
['b'] = '\b', /* u-ctags extension */
163+
['f'] = '\f', /* u-ctags extension */
164+
['n'] = '\n',
165+
['r'] = '\r',
166+
['t'] = '\t',
167+
['v'] = '\v', /* u-ctags extension */
168+
};
169+
159170
/*
160171
* Reads the first character from the string, possibly un-escaping it, and
161172
* advances *s to the start of the next character.
162173
*/
174+
163175
READTAGS_INLINE
164176
int readTagCharacter (const char **const s)
165177
{
@@ -170,28 +182,27 @@ int readTagCharacter (const char **const s)
170182

171183
if (c == '\\')
172184
{
185+
unsigned char a;
173186
switch (*p)
174187
{
175-
case 't': c = '\t'; p++; break;
176-
case 'r': c = '\r'; p++; break;
177-
case 'n': c = '\n'; p++; break;
178-
case '\\': c = '\\'; p++; break;
179-
/* Universal-CTags extensions */
180-
case 'a': c = '\a'; p++; break;
181-
case 'b': c = '\b'; p++; break;
182-
case 'v': c = '\v'; p++; break;
183-
case 'f': c = '\f'; p++; break;
184-
case 'x':
185-
if (isxdigit (p[1]) && isxdigit (p[2]))
188+
default:
189+
a = altchars[*p];
190+
if (a) {
191+
c = a;
192+
p++;
193+
}
194+
break;
195+
case 'x':
196+
if (isxdigit (p[1]) && isxdigit (p[2]))
197+
{
198+
int val = (xdigitValue (p[1]) << 4) | xdigitValue (p[2]);
199+
if (val < 0x80)
186200
{
187-
int val = (xdigitValue (p[1]) << 4) | xdigitValue (p[2]);
188-
if (val < 0x80)
189-
{
190-
p += 3;
191-
c = val;
192-
}
201+
p += 3;
202+
c = val;
193203
}
194-
break;
204+
}
205+
break;
195206
}
196207
}
197208

@@ -541,7 +552,8 @@ static unsigned int countContinuousBackslashesBackward(const char *from,
541552
* It is converted to 0x9 and occupies one byte.
542553
* memmove called here for shortening the line
543554
* buffer. */
544-
static char *unescapeInPlace (char *q, char **tab, size_t *p_len)
555+
READTAGS_INLINE
556+
char *unescapeInPlace (char *q, char **tab, size_t *p_len)
545557
{
546558
char *p = q;
547559

0 commit comments

Comments
 (0)