Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 8 из 8
  1. #1
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±

    GetNumberOfArguments - быстрая реализация numargs

    Описание:
    Вычисляет количество аргументов в функции.

    Параметры:
    -

    Возвращаемое значение:
    Возвращает количество аргументов в функции.

    Плюсы реализации:
    • Быстрое вычисление количества аргументов. Таким образом, это функция быстрее numargs с JIT в 3 раза, а без него в 2 раза.

    Минусы реализации:
    • N/A

    Код:
    PHP код:
    stock
        GetNumberOfArguments
    ()
    {
        
    #emit load.s.pri 0x0 // узнаем FRM прежней функции.
        #emit add.c 0x8 // смещение на 8 байт.
        #emit load.i // читаем.
        #emit shr.c.pri 2 // побитовый сдвиг в право - деление на 4
        #emit retn // возвращаем.
        
    return 0;

    Пример использования:
    PHP код:
    main()
    {
        
    printf("Arguments: %d"GetNumberOfArguments());
        
        
    SomeFunction(1345);
    }

    stock
        SomeFunction
    (...)
    {
        
    printf("Arguments: %d"GetNumberOfArguments());

    См. также:

    Автор: VVWVV

    Исключительно для pro-pawn.ru

    Копирование данной статьи на других ресурсах без разрешения автора запрещено.
    Последний раз редактировалось VVWVV; 30.12.2016 в 04:18.

  2. 5 пользователя(ей) сказали cпасибо:
    #Djuga (17.07.2018) Daniel_Cortez (24.12.2016) Osetin (24.12.2016) Seregamil (24.12.2016) [ForD] (24.12.2016)
  3. #2
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Здорово видеть, что всё больше и больше людей на форуме начинают работать с #emit. Вот только непонятно, в чём профит записывать числа в хексе, если они не отрицательные. Тем более, что в SHR операнд записан в десятичном виде.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  4. #3
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Здорово видеть, что всё больше и больше людей на форуме начинают работать с #emit. Вот только непонятно, в чём профит записывать числа в хексе, если они не отрицательные. Тем более, что в SHR операнд записан в десятичном виде.
    Да, это хорошо. Впрочем, я давно уже начал с ним работать.

    Профит в том, что мне так удобнее видеть, где смещения, а где десятичные числа.
    Последний раз редактировалось VVWVV; 24.12.2016 в 14:40.

  5. #4
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от VVWVV Посмотреть сообщение
    Профит в том, что мне так удобнее видеть, где смещения, а где десятичные числа.
    Да, только это не очень стыкуется с требованием записывать все отрицательные числа в шестнадцатеричном виде (компилятор не понимает знака "-" в #emit). Например, число -1 придётся записать как 0xFFFFFFFF и ты будешь путать его со смещением.
    Мало того, непостоянство между записью в хексе и в десятичном виде со стороны может показаться понтокодом.

    Впрочем, решать тебе, моё дело лишь предупредить.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  6. 2 пользователя(ей) сказали cпасибо:
    Osetin (24.12.2016) VVWVV (24.12.2016)
  7. #5
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Да, только это не очень стыкуется с требованием записывать все отрицательные числа в шестнадцатеричном виде (компилятор не понимает знака "-" в #emit). Например, число -1 придётся записать как 0xFFFFFFFF и ты будешь путать его со смещением.
    Мало того, непостоянство между записью в хексе и в десятичном виде со стороны может показаться понтокодом.

    Впрочем, решать тебе, моё дело лишь предупредить.
    Спасибо за совет. Однако такого ещё не происходило.

    Кстати, Y-Less недавно затрагивал эту тему на гитхабе. Если честно, то я надеюсь, что Zeex починит это.

  8. #6
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Обновлена функция под новый оператор __emit.
    1. //pro-pawn.ru/showthread.php?14689
    2. #define GetNumberOfArguments(%1) (emit(load.s.pri 8, shr.c.pri 2))
    Последний раз редактировалось VVWVV; 18.07.2018 в 13:06.

  9. #7
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от VVWVV Посмотреть сообщение
    1. load.s.pri 5
    Это точно не ошибка?
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  10. #8
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Это точно не ошибка?
    Да, это ошибка... Код изменил..

 

 

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

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

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

Ваши права

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