[Include] bCini6 - Rбpida e funcional! (Cache include - Salvamento de arquivos)
#1

bCini6 - Rбpida e funcional! (Cache include - Salvamento de arquivos)

Tуpico da primeira versгo da bCini (15/10/2013).

Bom, continuei otimizando ainda mais a include bCini... Digo que foi um auge muito grande para mim no SA-MP, pois aprendi muito com ela;

Vamos lб com as sintaxes:

. Funзхes NATIVAS:

bCini6_Open - fopen
bCini6_Exists - fexist
bCini6_Write - fwrite
bCini6_Read - fread
bCini6_Close - fclose
bCini6_Delete - fremove


. Funзхes SET:

bCini6_SetText(nome do arquivo,nome da linha,string); // Define a string de alguma linha de tal arquivo.
bCini6_SetInt(nome do arquivo,nome da linha,int); // Define o intenger de alguma linha de tal arquivo.
bCini6_SetBool(nome do arquivo,nome da linha,bool); // Define o bool de alguma linha de tal arquivo.
bCini6_SetFloat(nome do arquivo,nome da linha,float); // Define o float de alguma linha de tal arquivo.


. Funзхes GET:

bCini6_ReadText(nome do arquivo,nome da linha); // Lк a string de alguma linha de tal arquivo.
bCini6_ReadInt(nome do arquivo,nome da linha); // Lк o intenger de alguma linha de tal arquivo.
bCini6_ReadBool(nome do arquivo,nome da linha); // Lк o bool de alguma linha de tal arquivo.
bCini6_ReadFloat(nome do arquivo,nome da linha); // Lк o float de alguma linha de tal arquivo.


. Funзхes SET & GET:

bCini6_IsSet(nome do arquivo,nome da linha); // Verif. se alguma linha existe.
bCini6_DeleteSet(nome do arquivo,nome da linha); // Deleta alguma linha.
bCini6_Console(nome do arquivo); // Exibe todo o arquivo no console
bCini6_Copy(arquivo 1,arquivo 2,bool:delete_archive); // Copia um arquivo e deleta o primeiro arquivo logo em seguida, caso o delete_archive seja TRUE.


Obs: Use a funзгo bCini6_CloseArchive(); no fim do gamemode (OnGameModeExit).

pawn Код:
// Include bCini6

#define bCini6_Open fopen
#define bCini6_Exists fexist
#define bCini6_Write fwrite
#define bCini6_Read fread
#define bCini6_Close fclose

#define bCini6_Create(%0) if(!bCini6_Exists(%0)) bCini6_Close(bCini6_Open(%0,io_write)) && bCini6_OpenArchive(%0)
#define bCini6_Delete(%0) if(bCini6_Exists(%0)) fremove(%0)

// Include definitions

#define bCini6_Lines 100
#define bCini6_Capacity 64

#define bCini6_Separator "="

#define bCini6_Console_Fail "O arquivo nгo existe! "
#define bCini6_Console_Up "Console do arquivo "

// Variables

stock bCini6_Archive_Line_Value[bCini6_Lines][bCini6_Capacity];
stock bCini6_Archive_Value[bCini6_Lines][bCini6_Capacity];

stock bCini6_Archive_Name[bCini6_Capacity];

stock bCini6_Archive_Lines;
stock bCini6_Archive_Line_ID;

stock bool:bCini6_Archive_Has_Been_Used;

// Functions

stock Include_bCini6[bCini6_Capacity];

#define bCini6_SetInt(%0,%1,%2) format(Include_bCini6,sizeof(Include_bCini6),"%d",%2) && bCini6_SetText(%0,%1,Include_bCini6)
#define bCini6_SetBool(%0,%1,%2) format(Include_bCini6,sizeof(Include_bCini6),"%d",%2) && bCini6_SetText(%0,%1,Include_bCini6)
#define bCini6_SetFloat(%0,%1,%2) format(Include_bCini6,sizeof(Include_bCini6),"%f",%2) && bCini6_SetText(%0,%1,Include_bCini6)

#define bCini6_CleanArchive(%0) if(bCini6_Exists(%0)) bCini6_OpenArchive(%0); for(new i; i < bCini6_Archive_Lines; ++i) bCini6_DeleteSet(%0,bCini6_Archive_Line_Value[i])
#define bCini6_Log(%0,%1) new File:bCini6_Archive = bCini6_Open(%0,io_append); bCini6_Write(bCini6_Archive,%1) && bCini6_Close(bCini6_Archive)

stock bCini6_SetText(archive[],line[],value[])
{
    if(bCini6_Archive_Lines == bCini6_Lines)
    {
        return 1;
    }
    if(!bCini6_Exists(archive))
    {
        bCini6_Create(archive);
    }
    if(!line[0])
    {
        strcat(line,"(null)",7);
    }
    if(!value[0])
    {
        strcat(value,"(null)",7);
    }
    bCini6_OpenArchive(archive);

    new bCini6_1,bCini6_2,bCini6_Archive[bCini6_Capacity];

    format(bCini6_Archive,sizeof(bCini6_Archive),"%s%s%s\r\n",line,bCini6_Separator,value);

    bCini6_1 = strlen(bCini6_Archive);
    bCini6_2 = strlen(value);

    if(!bCini6_IsSet(archive,line))
    {
        strmid(bCini6_Archive_Line_Value[bCini6_Archive_Lines],bCini6_Archive,0,bCini6_1,bCini6_1+1);
        strmid(bCini6_Archive_Value[bCini6_Archive_Lines],value,0,bCini6_2,bCini6_2+1);

        ++bCini6_Archive_Lines;
    }
    else
    {
        strmid(bCini6_Archive_Line_Value[bCini6_Archive_Line_ID],bCini6_Archive,0,bCini6_1,bCini6_1+1);
        strmid(bCini6_Archive_Value[bCini6_Archive_Line_ID],value,0,bCini6_2,bCini6_2+1);
    }
    bCini6_Archive_Has_Been_Used = true;
    return 1;
}
stock bCini6_ReadText(archive[],line[])
{
    if(!bCini6_Exists(archive) || !bCini6_IsSet(archive,line) || !line[0])
    {
        return bCini6_Archive_Value[bCini6_Archive_Lines];
    }
    return bCini6_Archive_Value[bCini6_Archive_Line_ID];
}
stock bCini6_ReadInt(archive[],line[])
{
    if(!bCini6_Exists(archive) || !bCini6_IsSet(archive,line) || !line[0])
    {
        return strval(bCini6_Archive_Value[bCini6_Archive_Lines]);
    }
    return strval(bCini6_Archive_Value[bCini6_Archive_Line_ID]);
}
#define bCini6_ReadFloat(%0,%1) floatstr(bCini6_ReadText(%0,%1))

stock bCini6_ReadBool(archive[],line[])
{
    if(!bCini6_Exists(archive) || !bCini6_IsSet(archive,line) || !line[0])
    {
        return bool:strval(bCini6_Archive_Value[bCini6_Archive_Lines]);
    }
    return bool:strval(bCini6_Archive_Value[bCini6_Archive_Line_ID]);
}
stock bCini6_IsSet(archive[],line[])
{
    if(!bCini6_Exists(archive) || !line[0])
    {
        return 0;
    }
    new bCini6_Line_Set[bCini6_Capacity];

    bCini6_OpenArchive(archive);

    bCini6_Archive_Line_ID = bCini6_Archive_Lines;

    for(new i; i < bCini6_Archive_Lines; ++i)
    {
        if(bCini6_Archive_Line_Value[i][0])
        {
            strmid(bCini6_Line_Set,bCini6_Archive_Line_Value[i],0,strfind(bCini6_Archive_Line_Value[i],bCini6_Separator),bCini6_Capacity);

            if(strcmp(bCini6_Line_Set,line,true) == 0)
            {
                bCini6_Archive_Line_ID = i;
                return 1;
            }
        }
    }
    return 0;
}
stock bCini6_DeleteSet(archive[],line[])
{
    if(!bCini6_Exists(archive) || !bCini6_IsSet(archive,line))
    {
        return 1;
    }
    bCini6_Archive_Line_Value[bCini6_Archive_Line_ID][0] = 0;
    bCini6_Archive_Value[bCini6_Archive_Line_ID][0] = 0;

    bCini6_Archive_Has_Been_Used = true;
    return 1;
}
stock bCini6_Console(archive[])
{
    if(!bCini6_Exists(archive))
    {
        printf("%s(%s)",bCini6_Console_Fail,archive);
        return 1;
    }
    bCini6_OpenArchive(archive);

    printf("%s%s:\r\n",bCini6_Console_Up,archive);

    for(new i; i < bCini6_Archive_Lines; ++i)
    {
        if(bCini6_Archive_Line_Value[i][0])
        {
            print(bCini6_Archive_Line_Value[i]);
        }
    }
    return 1;
}
stock bCini6_Copy(archive[],archive2[],bool:delete_archive)
{
    if(!bCini6_Exists(archive))
    {
        return 1;
    }
    bCini6_OpenArchive(archive);

    new File:bCini6_Archive_Used = bCini6_Open(archive2,io_write);

    for(new i; i < bCini6_Archive_Lines; ++i)
    {
        if(bCini6_Archive_Line_Value[i][0])
        {
            bCini6_Write(bCini6_Archive_Used,bCini6_Archive_Line_Value[i]);

            bCini6_Archive_Line_Value[i][0] = 0;
            bCini6_Archive_Value[i][0] = 0;
        }
    }
    bCini6_Close(bCini6_Archive_Used);

    if(delete_archive)
    {
        bCini6_Delete(archive);
    }
    return 1;
}
// Open & Close

stock bCini6_OpenArchive(archive[])
{
    if(!bCini6_Exists(archive) || bCini6_Archive_Name[0] && strcmp(bCini6_Archive_Name[0],archive,true) == 0)
    {
        return 1;
    }
    bCini6_CloseArchive();

    new bCini6_1,i,bCini6_Archive[bCini6_Capacity],File:bCini6_Archive_Used = bCini6_Open(archive,io_read);

    bCini6_1 = strlen(archive);

    strmid(bCini6_Archive_Name,archive,0,bCini6_1,bCini6_1+1);

    bCini6_Archive_Lines = 1;

    while(bCini6_Read(bCini6_Archive_Used,bCini6_Archive))
    {
        if(bCini6_Archive[0])
        {
            if(bCini6_Archive[0] >= 256)
            {
                strdel(bCini6_Archive,0,1);
            }
            i = strlen(bCini6_Archive);

            strmid(bCini6_Archive_Line_Value[bCini6_Archive_Lines],bCini6_Archive,0,i,i+1);

            if(bCini6_Archive[i-1] == '\r' || bCini6_Archive[i-1] == '\n')
            {
                bCini6_Archive[i-1] = 0;
            }
            if(bCini6_Archive[i-2] == '\r' || bCini6_Archive[i-2] == '\n')
            {
                bCini6_Archive[i-2] = 0;
            }
            i = strlen(bCini6_Archive);

            strmid(bCini6_Archive_Value[bCini6_Archive_Lines],bCini6_Archive,strfind(bCini6_Archive,bCini6_Separator)+1,i,i+1);

            ++bCini6_Archive_Lines;
        }
    }
    bCini6_Close(bCini6_Archive_Used);
    return 1;
}
stock bCini6_CloseArchive()
{
    if(!bCini6_Exists(bCini6_Archive_Name) || !bCini6_Archive_Has_Been_Used)
    {
        if(bCini6_Archive_Has_Been_Used)
        {
            for(new i; i < bCini6_Archive_Lines; ++i)
            {
                if(bCini6_Archive_Line_Value[i][0])
                {
                    bCini6_Archive_Line_Value[i][0] = 0;
                    bCini6_Archive_Value[i][0] = 0;
                }
            }
            bCini6_Archive_Has_Been_Used = false;
        }
        bCini6_Archive_Name[0] = 0;
        bCini6_Archive_Lines = 0;

        return 1;
    }
    if(bCini6_Archive_Has_Been_Used)
    {
        new File:bCini6_Archive_Used = bCini6_Open(bCini6_Archive_Name,io_write);

        for(new i; i < bCini6_Archive_Lines; ++i)
        {
            if(bCini6_Archive_Line_Value[i][0])
            {
                bCini6_Write(bCini6_Archive_Used,bCini6_Archive_Line_Value[i]);

                bCini6_Archive_Line_Value[i][0] = 0;
                bCini6_Archive_Value[i][0] = 0;
            }
        }
        bCini6_Close(bCini6_Archive_Used);
        bCini6_Archive_Has_Been_Used = false;
    }
    bCini6_Archive_Name[0] = 0;
    bCini6_Archive_Lines = 0;

    return 1;
}
// End of the include
Testes de velocidade

Pensei apenas em melhorar o que tinha feito da bCini5, para a bCini6.

Alйm da velocidade ter aumentado um tantinho bбsico, a funcionalidade melhorou em alguns aspectos!



Crйditos

Biel_COP (me): Idealizaзгo total da include.
Willian Luigi: Ajuda nas duas primeiras versхes da include.
ipsBruno: Ajuda na primeira versгo da include.
zSuYaNw: Ajuda na funзгo de criar arquivos.
DracoBlue: Lуgica proposta nas 3 primeiras versхes da include.
Reply
#2

Hum , muito bom ...


PHP код:
This forum requires that you wait 120 seconds between postsPlease try again in 28 seconds
Reply
#3

Confesso que atй admiro a sua vontade de melhorar ainda isto e nгo ter desistido. Comeзou com as primeiras versхes muito ruins mas lб foi melhorando atй a atual versгo.

Sistema de salvamento hoje em dia em ini dado аs possibilidades que o povo tem para salvar em SQLite ou mysql e ruim usar ini.

Porйm para quem insistir em usar esta include jб nгo ta tгo mб assim para usar para isso.

Lhe dou os parabйns por isso.

Cumprimentos
Reply
#4

Sim, PT.

Anyway, pretendo ainda fazer mais uma funзгo usando o C++, a funзгo de criar pastas! ;3
Reply
#5

Massa, admiro muito a sua vontade de aperfeiзoar.
Reply
#6

Obrigado pelos crйditos Biel, pretendo olhar direitinho a sua include mais tarde...
Reply
#7

Quote:
Originally Posted by ipsNan
Посмотреть сообщение
Obrigado pelos crйditos Biel, pretendo olhar direitinho a sua include mais tarde...
Disponha, meu grande brother Willian!
Reply
#8

Ai sim em... Parabйns Biel.
Reply
#9

Quote:
Originally Posted by Ever_SH
Посмотреть сообщение
Ai sim em... Parabйns Biel.
Nуis, Ever! ;3
Reply
#10

Bom trabalho, tem muito oque melhorar, porйm estб otimo com parado pela primeira versгo.
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)