On Tue, Nov 24, 2015 at 9:28 AM, Eric Covener <cove...@gmail.com> wrote:
> On Tue, Nov 24, 2015 at 10:21 AM, Jim Jagielski <j...@jagunet.com> wrote: > > For these types of paths, where we use a switch/case against > > the 1st char of the token, the real reason why we used that > > impl was to avoid the (expected) expensive string comparison. > > Maybe naively, I thought we were saving some potential function > call overhead here rather than some strcasecmp overhead. > In part, but also in this specific case; while (token) { *** A switch here short circuits three function calls; if (!ap_casecmpstrn(token, "no-cache", 8)) { if (token[8] == '=') { cc->no_cache_header = 1; } else if (!token[8]) { cc->no_cache = 1; } } else if (!ap_casecmpstr(token, "no-store")) { cc->no_store = 1; } else if (!ap_casecmpstr(token, "no-transform")) { cc->no_transform = 1; } *** A switch here short circuits four function calls; else if (!ap_casecmpstrn(token, "max-age", 7)) { if (token[7] == '=' && !apr_strtoff(&offt, token + 8, &endp, 10) && endp > token + 8 && !*endp) { cc->max_age = 1; cc->max_age_value = offt; } } else if (!ap_casecmpstr(token, "must-revalidate")) { cc->must_revalidate = 1; } else if (!ap_casecmpstrn(token, "max-stale", 9)) { if (token[9] == '=' && !apr_strtoff(&offt, token + 10, &endp, 10) && endp > token + 10 && !*endp) { cc->max_stale = 1; cc->max_stale_value = offt; } else if (!token[9]) { cc->max_stale = 1; cc->max_stale_value = -1; } } else if (!ap_casecmpstrn(token, "min-fresh", 9)) { if (token[9] == '=' && !apr_strtoff(&offt, token + 10, &endp, 10) && endp > token + 10 && !*endp) { cc->min_fresh = 1; cc->min_fresh_value = offt; } } *** Plus the overhead if each function call itself, it is still sensible to narrow out several groups of tokens (could even use if s[0]=='n' s[1]=='o' tests) Does it make sense to expose the ap_tolower_ascii() function? We could call it ap_tolower_plaintext() or something else to distinguish that it isn't lowercasing extended characters? Or is the case 'N': case 'n': syntax easier to follow?