Показано с 1 по 4 из 4

Тема: rBits [поддержка массивов 16, 8, 4, 2 и 1-bit]

  1. #1
    Пользователь Аватар для Dobermann
    Регистрация
    06.07.2013
    Сообщений
    31
    Репутация: 3

    Звание: пока не определено

    rBits [поддержка массивов 16, 8, 4, 2 и 1-bit]

    Инклуд поможет Вам сэкономить много памяти, если использовать его эффективно и с умом.


    Пределы Integer

    1-Bit 2-Bit 4-Bit 8-Bit 16-Bit
    Limit 1 ─ 0x1 3 ─ 0x3 15 ─ 0xF 255 ─ 0xFF 65535 ─ 0xFFFF

    Использование:

    Вы просто используете BitX и заменяете X с нужном размером бит, затем имя, а затем размер между скобками < >

    К примеру создадим 4-битовый массив b4_Nibble с размером 32:



    new
    Bit4: b4_Nibble <32>
    ;


    Запись и чтение данных

    Это позволит установить b4_Nibble с индексом от 0 до 4.

    Bit4_Set(b4_Nibble, 0, 4);


    Это вернет значение b4_Nibble 0, который будет 4 в этом случае.

    Bit4_Get(b4_Nibble, 0);


    Примеры

    Часто скриптеры, делают такие вещи:


    #include <a_samp>

    new
    bool: g_PlayerSpawned[MAX_PLAYERS]
    ;

    public OnPlayerSpawn(playerid) {
    g_PlayerSpawned[playerid] = true;
    }

    public OnPlayerDeath(playerid) {
    g_PlayerSpawned[playerid] = false;
    }

    public OnPlayerDisconnect(playerid, reason) {
    g_PlayerSpawned[playerid] = false;
    }

    stock IsPlayerSpawned(playerid) {
    return g_PlayerSpawned[playerid];
    }

    . AMX размер после компиляции составляет 726 байт. Ничего особенного, но как вы можете видеть, мы здесь используем 32-битных переменных только 0 и 1, так что это пустая трата множественной памяти.

    Наиболее актуальный битный тип в этом случае был бы 1-бит:



    #include <a_samp>
    #include <rBits>

    new
    Bit1: g_PlayerSpawned <MAX_PLAYERS>
    ;

    public OnPlayerSpawn(playerid) {
    Bit1_Set(g_PlayerSpawned, playerid, true);
    }

    public OnPlayerDeath(playerid) {
    Bit1_Set(g_PlayerSpawned, playerid, false);
    }

    public OnPlayerDisconnect(playerid, reason) {
    Bit1_Set(g_PlayerSpawned, playerid, false);
    }

    stock IsPlayerSpawned(playerid) {
    return Bit1_Get(g_PlayerSpawned, playerid);
    }

    . AMX Размер этого после компиляции только 473 байт. Наверное, не имеет большого значения прямо сейчас, но представьте себе, работа с большими массивами или просто еще пару массивов, как этот.


    Просмотр файла: http://pastebin.com/5hr6mfMt

    Скачать: http://www.solidfiles.com/d/d4affae5d4/




    FAQ

    Как использовать в enum?


    enum e_Bit1_Data {
    e_bSpawned,
    e_bIsDeath,
    e_bInDM,
    // ...
    };

    new
    g_Bit1_Data[e_Bit1_Data] <MAX_PLAYERS>
    ;

    Bit1_Set(g_Bit1_Data[e_bSpawned], playerid, true);
    Bit1_Get(g_Bit1_Data[e_bSpawned], playerid);


    Как увеличить / уменьшить значение?

    Bit4_Set(b4_Nibble, 0, Bit4_Get(b4_Nibble, 0) + 1);


    источник счастья: sa-mp.com

  2. #2
    Проверенный Аватар для frog163
    Регистрация
    12.04.2010
    Адрес
    Samara
    Возраст
    31
    Сообщений
    4,548
    Репутация: 365

    Звание: - очень-очень хороший человек

    Re: rBits [поддержка массивов 16, 8, 4, 2 и 1-bit]

    А кто автор статьи на sa-mp.com?

    И кстати, лови amx на 357 байт
    PHP код:
    #include <a_samp>
         
    new
        
    boolg_PlayerSpawned[MAX_PLAYERS char]
    ;
     
    public 
    OnPlayerSpawn(playerid) {
        
    g_PlayerSpawned{playerid} = true;
    }
     
    public 
    OnPlayerDeath(playerid) {
        
    g_PlayerSpawned{playerid} = false;
    }
     
    public 
    OnPlayerDisconnect(playeridreason) {
        
    g_PlayerSpawned{playerid} = false;
    }
     
    stock IsPlayerSpawned(playerid) {
        return 
    g_PlayerSpawned{playerid};

    Ничто не ограничивает полет мысли программиста так, как компилятор, сцуко!
    Если в предложении собеседника различного рода смайлов больше чем слов - однозначно, что этот индивид страдает критической, неизлечимой и при этом прогрессирующей формой долбоебизма © лурка
    PAWN Compiler делает то, что вы приказали ему сделать, а не то, что вы хотели, чтобы он сделал..

  3. #3
    Пользователь Аватар для Dobermann
    Регистрация
    06.07.2013
    Сообщений
    31
    Репутация: 3

    Звание: пока не определено

    Re: rBits [поддержка массивов 16, 8, 4, 2 и 1-bit]

    /*
    SA-MP rBits Include
    Copyright © 2011-2012 RyDeR`
    */

  4. #4
    Проверенный Аватар для frog163
    Регистрация
    12.04.2010
    Адрес
    Samara
    Возраст
    31
    Сообщений
    4,548
    Репутация: 365

    Звание: - очень-очень хороший человек

    Re: rBits [поддержка массивов 16, 8, 4, 2 и 1-bit]

    Хм, думал Романиус, ну да ладно. (http://forum.sa-mp.com/showpost.php?...&postcount=291)
    Ничто не ограничивает полет мысли программиста так, как компилятор, сцуко!
    Если в предложении собеседника различного рода смайлов больше чем слов - однозначно, что этот индивид страдает критической, неизлечимой и при этом прогрессирующей формой долбоебизма © лурка
    PAWN Compiler делает то, что вы приказали ему сделать, а не то, что вы хотели, чтобы он сделал..

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •