From 7b3551e3a8f7278e123757987570c72f1216acc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20B=C3=ADlka?= Date: Fri, 28 Feb 2014 22:45:33 +0100 Subject: [PATCH] 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. --- benchtests/bench-strtok.c | 59 ++------------------------------------- string/strtok.c | 6 +++- 2 files changed, 8 insertions(+), 57 deletions(-) diff --git a/benchtests/bench-strtok.c b/benchtests/bench-strtok.c index 5e80c1a775..f2f3f575cd 100644 --- a/benchtests/bench-strtok.c +++ b/benchtests/bench-strtok.c @@ -20,66 +20,13 @@ #define TEST_NAME "strtok" #include "bench-string.h" -char * -simple_strtok (char *s1, char *s2) -{ - static char *saveptr; - char *token; - ssize_t i = 0, j = 0; - int found = 0; - size_t s2len = strlen (s2); +#define STRTOK strtok_string +#include - 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 *); -IMPL (simple_strtok, 0) +IMPL (strtok_string, 0) IMPL (strtok, 1) static void diff --git a/string/strtok.c b/string/strtok.c index f7f709908f..225344003e 100644 --- a/string/strtok.c +++ b/string/strtok.c @@ -22,6 +22,10 @@ static char *olds; #undef strtok +#ifndef STRTOK +# define STRTOK strtok +#endif + /* Parse S into tokens separated by characters in DELIM. If S is NULL, the last string strtok() was called with is used. For example: @@ -32,7 +36,7 @@ static char *olds; // s = "abc\0=-def\0" */ char * -strtok (s, delim) +STRTOK (s, delim) char *s; const char *delim; {