Make strtok benchmark competive.

We include a generic version of strtok to result which could be faster
when underlying primitives are better optimized than current version.
This commit is contained in:
Ondřej Bílka 2014-02-28 22:45:33 +01:00
parent f08e9a2629
commit 7b3551e3a8
2 changed files with 8 additions and 57 deletions

View File

@ -20,66 +20,13 @@
#define TEST_NAME "strtok" #define TEST_NAME "strtok"
#include "bench-string.h" #include "bench-string.h"
char * #define STRTOK strtok_string
simple_strtok (char *s1, char *s2) #include <string/strtok.c>
{
static char *saveptr;
char *token;
ssize_t i = 0, j = 0;
int found = 0;
size_t s2len = strlen (s2);
if (s1 == NULL)
s1 = saveptr;
if (s1 == NULL || *s1 == '\0')
return NULL;
while (!found)
{
if (s1[i] == '\0')
{
saveptr = NULL;
return NULL;
}
for (j = 0; j < s2len; j++)
{
if (s1[i] == s2[j])
{
i++;
found = 0;
break;
}
found = 1;
}
}
token = s1 + i;
i++;
found = 0;
while (!found)
{
if (s1[i] == '\0')
{
saveptr = NULL;
return token;
}
for (j = 0; j < s2len; j++)
{
if (s1[i] == s2[j])
{
found = 1;
break;
}
}
i++;
}
s1[i - 1] = '\0';
saveptr = s1 + i;
return token;
}
typedef char *(*proto_t) (const char *, const char *); typedef char *(*proto_t) (const char *, const char *);
IMPL (simple_strtok, 0) IMPL (strtok_string, 0)
IMPL (strtok, 1) IMPL (strtok, 1)
static void static void

View File

@ -22,6 +22,10 @@ static char *olds;
#undef strtok #undef strtok
#ifndef STRTOK
# define STRTOK strtok
#endif
/* Parse S into tokens separated by characters in DELIM. /* Parse S into tokens separated by characters in DELIM.
If S is NULL, the last string strtok() was called with is If S is NULL, the last string strtok() was called with is
used. For example: used. For example:
@ -32,7 +36,7 @@ static char *olds;
// s = "abc\0=-def\0" // s = "abc\0=-def\0"
*/ */
char * char *
strtok (s, delim) STRTOK (s, delim)
char *s; char *s;
const char *delim; const char *delim;
{ {