[Off] strdel e strins veloz
#5

Sobre o strdel eu fiz 4 versхes e a velocidade tem vindo a aumentar.

pawn Код:
#define MAX_STRING (128)
   
stock bstrdel(string[], start, end, size = sizeof string)
{
    static buffer[MAX_STRING];
    strmid(buffer,string,0,(start-1),size);
    strmid(string,string,end,size,size);
    strins(string,buffer,0,size);
    buffer[0] = EOS;
}

static buffer2[MAX_STRING];
static buffer3[MAX_STRING];

stock bstrdel2(string[], start, end, size = sizeof string)
{
    strmid(buffer2, string, end, size, size);
    string[start] = EOS;
    strins(string, buffer2, start-1, end);
}

stock bstrdel3(string[], start, end, size = sizeof string)
{
    strmid(buffer3, string, (end + 1), size, size);
    string[start] = EOS;
    strcat(string,buffer3,size);
}

stock bstrdel4(string[], start, end)
{

    while(start != end)
    {
        string[start] = EOS;
        start++;
    }
}
Eu cheguei ao ponto de criar uma variavel fora da funзгo para adquirir mais velocidade, eis os testes usando a bench mark do slice.

Код:
[22:39:05] Bench for sa-mp: executes, by average 575.58 times/ms.
[22:39:05] Bench for b1: executes, by average, 401.24 times/ms.
[22:39:05] Bench for b2: executes, by average, 430.16 times/ms
[22:39:05] Bench for b3: executes, by average,410.03 times/ms
[22:39:05] Bench for b4: executes, by average, 488.89 times/ms
Sobre os testes eu foquei-me mais em resolver strings que necessitam de um strdel no meio, ex: Hello my World, vocк quer tirar esse my entгo foi isso que eu fiz, assim й bastante mais eficaz porque se funciona com caracteres no meio funcionarб no fim.

cуdigo que fiz para as benchmark:

pawn Код:
#include <a_samp>

#define START_BENCH(%0); {new __a=%0,__b=0,__c,__d=GetTickCount(),__e=1;do{}\
    while(__d==GetTickCount());__c=GetTickCount();__d=__c;while(__c-__d<__a||\
    __e){if(__e){if(__c-__d>=__a){__e=0;__c=GetTickCount();do{}while(__c==\
    GetTickCount());__c=GetTickCount();__d=__c;__b=0;}}{


#define FINISH_BENCH(%0); }__b++;__c=GetTickCount();}printf(" Bench for "\
    %0": executes, by average, %.2f times/ms.",floatdiv(__b,__a));}

#define MAX_STRING (128)
   
stock bstrdel(string[], start, end, size = sizeof string)
{
    static buffer[MAX_STRING];
    strmid(buffer,string,0,(start-1),size);
    strmid(string,string,end,size,size);
    strins(string,buffer,0,size);
    buffer[0] = EOS;
}

static buffer2[MAX_STRING];
static buffer3[MAX_STRING];

stock bstrdel2(string[], start, end, size = sizeof string)
{
    strmid(buffer2, string, end, size, size);
    string[start] = EOS;
    strins(string, buffer2, start-1, end);
}

stock bstrdel3(string[], start, end, size = sizeof string)
{
    strmid(buffer3, string, (end + 1), size, size);
    string[start] = EOS;
    strcat(string,buffer3,size);
}

stock bstrdel4(string[], start, end)
{

    while(start != end)
    {
        string[start] = EOS;
        start++;
    }
}

main()
{
    new
        str1[] = "hello my world",
        str2[] = "hello my world",
        str3[] = "hello my world",
        str4[] = "hello my world",
        str5[] = "hello my world"
    ;
   
    START_BENCH(1000);
    {
        strdel(str1, 6, 8);
    }
    FINISH_BENCH("sa-mp");
   
    START_BENCH(1000);
    {
        bstrdel(str2, 6, 8);
    }
    FINISH_BENCH("b1");
   
    START_BENCH(1000);
    {
        bstrdel2(str3, 6, 8);
    }
    FINISH_BENCH("b2");
   
    START_BENCH(1000);
    {
        bstrdel3(str4, 6, 8);
    }
    FINISH_BENCH("b3");
   
    START_BENCH(1000);
    {
        bstrdel4(str5, 6, 8);
    }
    FINISH_BENCH("b4");
   
    //strdel(str1, 6, 8);
    printf("SAMP: %s",str1);
    //
    //bstrdel(str2, 6, 8);
    printf("b1: %s",str2);
    //
    //bstrdel2(str3, 6, 8);
    printf("b2: %s",str3);
    //
    //bstrdel3(str4, 6, 8);
    printf("b3: %s",str4);
   
    //bstrdel4(str5, 6, 8);
    printf("b5: %s",str4);
   
   
}
Bruno quando vocк executar o cуdigo no print vir isto:

Код:
[22:39:05] SAMP: hello 
[22:39:05] b1: hello
[22:39:05] b2: hello 
[22:39:05] b3: hello 
[22:39:05] b5: hello
Nгo sei porque acontece mas sei que й um bug por que isso acontece com o strdel e tudo xD
Se quiser verificar o funcionamento sу colocar a benchmark dentro dos /* */ e tirar os outros // , sу falta-me mais 100ms vou tentar ver como posso fazer de forma mais rбpida

Sobre o strins ainda nгo fiz mas tentarei tambйm
Reply


Messages In This Thread
strdel e strins veloz - by ipsBruno - 30.09.2013, 06:28
Re: strdel e strins veloz - by ipsBruno - 30.09.2013, 09:23
Re: strdel e strins veloz - by SeV_ - 30.09.2013, 15:29
Re: strdel e strins veloz - by arakuta - 30.09.2013, 16:21
Re: strdel e strins veloz - by RebeloX - 30.09.2013, 21:43

Forum Jump:


Users browsing this thread: 1 Guest(s)