summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Andres Klode <jak@debian.org>2015-12-29 03:19:51 +0100
committerJulian Andres Klode <jak@debian.org>2015-12-29 03:19:51 +0100
commit98eb4e9eec4e2e1fc62fe018d536b89f5524cd21 (patch)
treef65268d06ad96aa08a90a321475600c59a6bead3
parent0748f03aca4db260ad964b44519e0971647d1e9d (diff)
downloadapt-98eb4e9eec4e2e1fc62fe018d536b89f5524cd21.tar.gz
Turn tolower_ascii() and isspace_ascii() into inline functions
To preserve compatibility, the new inline functions have _inline as a suffix, and a macro defines the old names to refer to the inline variants. The old functions are still preserved for binary compatibility. Also simplify the implementation of both functions.
-rw-r--r--apt-pkg/contrib/strutl.cc14
-rw-r--r--apt-pkg/contrib/strutl.h18
2 files changed, 21 insertions, 11 deletions
diff --git a/apt-pkg/contrib/strutl.cc b/apt-pkg/contrib/strutl.cc
index 457bd73a2..60e3156f1 100644
--- a/apt-pkg/contrib/strutl.cc
+++ b/apt-pkg/contrib/strutl.cc
@@ -1369,17 +1369,17 @@ string StripEpoch(const string &VerStr)
return VerStr.substr(i+1);
}
/*}}}*/
+
// tolower_ascii - tolower() function that ignores the locale /*{{{*/
// ---------------------------------------------------------------------
/* This little function is the most called method we have and tries
therefore to do the absolut minimum - and is notable faster than
standard tolower/toupper and as a bonus avoids problems with different
locales - we only operate on ascii chars anyway. */
+#undef tolower_ascii
int tolower_ascii(int const c)
{
- if (c >= 'A' && c <= 'Z')
- return c + 32;
- return c;
+ return tolower_ascii_inline(c);
}
/*}}}*/
@@ -1389,14 +1389,10 @@ int tolower_ascii(int const c)
therefore to do the absolut minimum - and is notable faster than
standard isspace() and as a bonus avoids problems with different
locales - we only operate on ascii chars anyway. */
+#undef isspace_ascii
int isspace_ascii(int const c)
{
- return (c == ' '
- || c == '\f'
- || c == '\n'
- || c == '\r'
- || c == '\t'
- || c == '\v');
+ return isspace_ascii_inline(c);
}
/*}}}*/
diff --git a/apt-pkg/contrib/strutl.h b/apt-pkg/contrib/strutl.h
index 6d1a1d7ee..a8bbc38af 100644
--- a/apt-pkg/contrib/strutl.h
+++ b/apt-pkg/contrib/strutl.h
@@ -105,8 +105,22 @@ void ioprintf(std::ostream &out,const char *format,...) APT_PRINTF(2);
void strprintf(std::string &out,const char *format,...) APT_PRINTF(2);
char *safe_snprintf(char *Buffer,char *End,const char *Format,...) APT_PRINTF(3);
bool CheckDomainList(const std::string &Host, const std::string &List);
-int tolower_ascii(int const c) APT_CONST APT_HOT;
-int isspace_ascii(int const c) APT_CONST APT_HOT;
+
+/* Do some compat mumbo jumbo */
+#define tolower_ascii tolower_ascii_inline
+#define isspace_ascii isspace_ascii_inline
+
+APT_CONST APT_HOT
+static inline int tolower_ascii_inline(int const c)
+{
+ return (c >= 'A' && c <= 'Z') ? c + 32 : c;
+}
+APT_CONST APT_HOT
+static inline int isspace_ascii_inline(int const c)
+{
+ // 9='\t',10='\n',11='\v',12='\f',13='\r',32=' '
+ return (c >= 9 && c <= 13) || c == ' ';
+}
std::string StripEpoch(const std::string &VerStr);