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:
parent
f08e9a2629
commit
7b3551e3a8
@ -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
|
||||||
|
@ -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;
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user