Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.

Реклама


**Как получить V.I.P** (Перейти)
Чтобы заказать рекламу на Pro-Pawn.Ru, обращайтесь в Skype.
Баннерная реклама 200руб/мес, Текстовая 100руб/мес.
Показано с 1 по 7 из 7
  1. #1
    Аватар для Daniel_Cortez
    new fuck_logic[0] = EOS;

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    1,662
    Репутация:
    2145 ±

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

    Здравствуйте, ув. пользователи Pro-Pawn.ru
    Сегодня я расскажу вам об использовании инклуда y_stringhash. Этот инклуд предназначен для вычисления хеш-суммы из строк, причём возможно вычисление хеша на этапе компиляции скрипта.
    Хеш-сумма - это результат обработки массива данных (в нашем случае - строки), который представляет собой целое число.
    Как известно, операции по сравнению чисел проходят гораздо быстрее, чем сравнения строк (strcmp), поэтому, если одна и та же строка сравнивается несколько раз, strcmp можно заменить вычислением хеша и его последующим сравнением.

    Пример:

    Старый код:
    PHP код:
        if(strcmp(string"Pro") == 0)
        {
            
    // ...
        
    }
        else if(
    strcmp(string"Pawn") == 0)
        {
            
    // ...
        

    Новый код:
    PHP код:
        switch(YHash(stringfalsehash_fnv1))
        {
            case 
    _I@f<Pro>:
            {
                
    // ...
            
    }
            case 
    _I@f<Pawn>:
            {
                
    // ...
            
    }
        } 
    P.S.: В данном уроке используется не совсем стандартный способ, т.к. стандартный метод (YHash(str) и _I<str>) с некоторыми символами работает неправильно и часто выдаёт коллизии.

    Функции инклуда:
    • YHash - возвращает хеш-сумму заданной строки. Рекомендуется к использованию со строками, значение которых не известно во время компиляции (например, cmdtext в OnPlayerCommandText).
      Синтаксис:
      PHP код:
      YHash(str[], bool:sensitive=truee_HASH_TYPE:type=hash_bernstein); 
      • str - строка, хеш которой следует получить.
      • sensitive - чувствительность к регистру. Если параметр будет иметь значение false, хеш из строки "Pawn" будет совпадать с хешем из "PAWN", "pawn" и т.п. По умолчанию имеет значение true.
      • type - алгоритм хеширования. По умолчанию используется хеш "bernstein", однако с ним велика вероятность коллизий, потому рекомендуется использовать алгоритмы "fnv1" и "fnv1a".


    • _H - макрос для вычисления хешей из строк, значение которых известно во время компиляции. Данная версия чувствительна к регистру: _H<Pawn> и _H<pawn> дадут разные результаты.
      Поскольку алгоритм "bernstein" сравнительно часто выдаёт коллизии, рекомендуются альтернативы, в которых используются алгоритмы "fnv1" и "fnv1a" - макросы [email protected] и [email protected] соответственно (см. пример использования в начале статьи).
      Внимание! Макрос не работает с русскими буквами и многими другими символами.
      Список всех разрешённых символов:
      PHP код:
      abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_ 
      В данный список входят все латинские буквы, цифры, пробел и знак подчёркивания. Остальные символы использовать нельзя.

    • _I - то же самое, что и _H, однако результаты не чувствительны к регистру: _I<Pawn> и _I<pawn> будут совпадать.
      По уже описанной выше причине, рекомендуется использовать альтернативные варианты [email protected] и [email protected].


    Установка:
    1. Инклуд y_stringhash является частью библиотеки YSI.
      Скачать самую последнюю версию можно здесь:
    2. Скачав архив, извлеките из него папку "pawno" в папку с вашим модом.
    3. В самое начало скрипта ко всем инклудам добавьте:
      PHP код:
      #include <YSI\y_stringhash> 
    4. ...
    5. PROFIT


    Автор инклуда: Y_Less
    Статью подготовил: Daniel_Cortez
    При написании статьи использовались примеры из статьи: http://forum.sa-mp.com/showthread.php?t=169354

    Специально для Pro-Pawn.ru
    Копирование данной статьи на других ресурсах без разрешения автора запрещено!
    Индивидуально в PM и Skype по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
    SA-MP 0.4 is a lie

  2. 8 пользователя(ей) сказали cпасибо:
    #Vito (26.03.2014)DeimoS (26.03.2014)kushichka (10.07.2016)Londlem (26.03.2014)Osetin (26.03.2014)Salvacore (26.03.2014)^_^ (26.03.2014)Пельмень (11.05.2014)
  3. #2
    Аватар для Salvacore
    Инжунер-погромист

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Адрес
    Аҧсуа бызшәа
    Сообщений
    2,282
    Репутация:
    417 ±
    Спасибо:3

  4. #3
    Аватар для #Vito
    #define

    Статус
    Оффлайн
    Регистрация
    14.09.2013
    Адрес
    Одесса
    Сообщений
    129
    Репутация:
    38 ±
    Пригодится, спасибо :)
    Skype: vitya.saveliev


  5. #4
    Аватар для Kenny_Dalglish
    Заблокирован

    Статус
    Оффлайн
    Регистрация
    24.02.2014
    Сообщений
    179
    Репутация:
    -1 ±
    C:\Users\Danil\Desktop\Дани\Дани\Inspire DeathMatch [0.3z]\pawno\include\YSI/y_stringhash.inc(70) : fatal error 100: cannot read from file: "internal\y_version"
    Последний раз редактировалось Daniel_Cortez; 15.04.2014 в 14:22. Причина: прекратите цитировать длинные посты, по 100 раз перелистывать после вас приходится! //DC

  6. #5
    Аватар для Spectrum
    Пользователь

    Статус
    Оффлайн
    Регистрация
    14.04.2014
    Адрес
    Omsk, Russia
    Сообщений
    351
    Репутация:
    49 ±
    Цитата Сообщение от Kenny_Dalglish Посмотреть сообщение
    C:\Users\Danil\Desktop\Дани\Дани\Inspire DeathMatch [0.3z]\pawno\include\YSI/y_stringhash.inc(70) : fatal error 100: cannot read from file: "internal\y_version"
    инклуд не найден в папке

  7. #6
    Аватар для Kenny_Dalglish
    Заблокирован

    Статус
    Оффлайн
    Регистрация
    24.02.2014
    Сообщений
    179
    Репутация:
    -1 ±
    Цитата Сообщение от Spectrum Посмотреть сообщение
    инклуд не найден в папке
    Это я знаю. Но и где мне его взять я скачал по ссылку

  8. #7
    Аватар для A N D R E Y
    Пользователь

    Статус
    Оффлайн
    Регистрация
    07.12.2013
    Сообщений
    149
    Репутация:
    14 ±
    Цитата Сообщение от Kenny_Dalglish Посмотреть сообщение
    Это я знаю. Но и где мне его взять я скачал по ссылку
    Создайте папку YSI в папке пано и киньте туда скачанный файл и компильте, и будет счастье.

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Метки этой темы

Ваши права

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