Ich veröffentliche hier mal meine strtok-Version, die ich vor langer Zeit erstellt habe. Diese macht 1:1 das Gleiche wie die originale strtok-Funktion, nur mit dem Unterschied, dass sie mehr als doppelt so schnell ist.
Original: http://wiki.sa-mp.com/wiki/Strtok
v2.0 by Jeffry:
stock strtok(const string[], &index) //©Jeffry
{
new result[20], length = strlen(string), i = index;
while ((i < length) && (string[i] == ' ')) i++;
strmid(result,string,i,((index = strfind(string, " ", false, i)) == -1) ? (index = length) : (index) , 20);
index++;
return result;
}
Man kann einfach die alte strtok Funktion mit der Meinen ersetzen, mehr ist nicht notwendig.
ZitatZeit-Tests [07/09/2014 15:22:34] Original: 3233ms
[07/09/2014 15:22:36] Jeffry: 1455ms
new idx, t;
new params[16] = "abc def ghi";
t = GetTickCount();
for(new i=0; i<1000000; i++)
{
idx = 0;
strtok_Original(params, idx);
strtok_Original(params, idx);
strtok_Original(params, idx);
}
printf("Original: %dms", GetTickCount() - t);
t = GetTickCount();
for(new i=0; i<1000000; i++)
{
idx = 0;
strtok_Jeffry(params, idx);
strtok_Jeffry(params, idx);
strtok_Jeffry(params, idx);
}
printf("Jeffry: %dms", GetTickCount() - t);
Die Tests wurden mit einem Intel® Core™ i7-3770 Prozessor durchgeführt.
for(new i=0; i<1000000; i++)
{
idx = 0;
strtok_Jeffry(params, idx);
strtok_Jeffry(params, idx);
strtok_Jeffry(params, idx);
}
printf("Jeffry: %dms", GetTickCount() - t);
Die Tests wurden mit einem Intel® Core™ i7-3770 Prozessor durchgeführt.
Keywords: strtok