Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 2 1 2 ПоследняяПоследняя
Показано с 1 по 10 из 11
  1. #1
    Аватар для Seviel
    Пользователь

    Статус
    Оффлайн
    Регистрация
    23.12.2016
    Адрес
    Казахстан
    Сообщений
    148
    Репутация:
    26 ±

    SwapVars - меняем данные целочисленных переменных местами.

    Описание:
    SwapVars - меняет данные в целочисленных переменных местами(более лучшая версия данной функций находится в первом комментарии)

    Параметры:
    FisrtVar - первая переменная
    SecondVar - вторая переменная

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

    Код:
    PHP код:
    stock SwapVars(&FisrtVar, &SecondVar)
    {
        new 
    UnrealVar FisrtVar;
        
    FisrtVar SecondVar;
        
    SecondVar UnrealVar;

    Пример использования:
    PHP код:
    public OnGameModeInit()
    {
        new 
    73;
        
    SwapVars(ab);
        
    printf("\ta: %d;b: %d"ab);
        return 
    true;



    Я лишь хотел показать свою функцию, к сожалению моих знаний не хватило для более лучшей реализаций, но хочу поблагодарить VVWVV за более лучшую реализацию и название, спасибо.

    Автор: Seviel
    Последний раз редактировалось Seviel; 09.07.2017 в 22:23.

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

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

    Название не очень, поскольку мы лишь меняем значения, а не переменные местами.
    Более того, мы можем использовать AMX-инструкции для быстрого перемещения значений между адресами.
    PHP код:
    stock swapvals(&var1, &var2) {
         
    #emit lref.s.pri var1
         #emit lref.s.alt var2
         #emit sref.s.pri var2
         #emit sref.s.alt var1

    В данном случае мы не затрагиваем стек, а лишь используем регистры, что позволяет сделать код быстрее.

  3. 2 пользователя(ей) сказали cпасибо:
    Seviel (07.07.2017) Web (07.07.2017)
  4. #3
    Аватар для Fallen A.
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Адрес
    Минск, БССР
    Сообщений
    236
    Репутация:
    19 ±
    Цитата Сообщение от VVWVV Посмотреть сообщение
    Слишком просто

    Название не очень, поскольку мы лишь меняем значения, а не переменные местами.
    Более того, мы можем использовать AMX-инструкции для быстрого перемещения значений между адресами.
    PHP код:
    stock swapvals(&var1, &var2) {
         
    #emit lref.s.pri var1
         #emit lref.s.alt var2
         #emit sref.s.pri var2
         #emit sref.s.alt var1

    В данном случае мы не затрагиваем стек, а лишь используем регистры, что позволяет сделать код быстрее.
    В тему не вдавался, поэтому просто спрошу: безопасно ли это?

  5. #4
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Лучше просто назвать swap, как в C++.

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

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Цитата Сообщение от Fallen A. Посмотреть сообщение
    В тему не вдавался, поэтому просто спрошу: безопасно ли это?
    С JIT плагином должен работать. Более того, компилятор просто не пропустит код, если вы передали вместо переменной, например, функцию, а тем более какое-либо значение, которое может вызвать поломку скрипта. Поэтому это более-менее безопасно.

  7. Пользователь сказал cпасибо:
    Osetin (08.07.2017)
  8. #6
    Аватар для Fallen A.
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Адрес
    Минск, БССР
    Сообщений
    236
    Репутация:
    19 ±
    Цитата Сообщение от VVWVV Посмотреть сообщение
    С JIT плагином должен работать. Более того, компилятор просто не пропустит код, если вы передали вместо переменной, например, функцию, а тем более какое-либо значение, которое может вызвать поломку скрипта. Поэтому это более-менее безопасно.
    Благодарю за ответ.

  9. #7
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Еще вариант:
    PHP код:
    stock SwapVars(&FisrtVar, &SecondVar)
    {
        
    FisrtVar FisrtVar SecondVar - (SecondVar FisrtVar);


  10. #8
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от Anton Styazhkin Посмотреть сообщение
    Еще вариант:
    PHP код:
    stock SwapVars(&FisrtVar, &SecondVar)
    {
        
    FisrtVar FisrtVar SecondVar - (SecondVar FisrtVar);

    По производительности проигрывает.

    Кстати, ещё так можно:
    PHP код:
    stock SwapVars(&FisrtVar, &SecondVar)
    {
        
    FisrtVar ^= SecondVar;
        
    SecondVar ^= FisrtVar;
        
    FisrtVar ^= SecondVar;


  11. #9
    Аватар для Glant
    Пользователь

    Статус
    Оффлайн
    Регистрация
    31.07.2014
    Сообщений
    54
    Репутация:
    3 ±
    PHP код:
    #define swap(%0,%1)    %0 = %0 + %1 - (%1 = %0) 
    aka Ronix

  12. #10
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Glant Посмотреть сообщение
    PHP код:
    #define swap(%0,%1)    %0 = %0 + %1 - (%1 = %0) 
    Выше уже давали такой вариант (вся разница только в том, что в виде функции) и указали, что вариант проигрывает в скорости
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

 

 
Страница 1 из 2 1 2 ПоследняяПоследняя

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

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

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

Ваши права

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