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

Реклама


**Как получить V.I.P** (Перейти)
Чтобы заказать рекламу на Pro-Pawn.Ru, обращайтесь в Skype.
Баннерная реклама 200руб/мес, Текстовая 100руб/мес.
Показано с 1 по 8 из 8
  1. #1
    Аватар для Seviel
    Пользователь

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

    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
    Сообщений
    599
    Репутация:
    287 ±
    Слишком просто

    Название не очень, поскольку мы лишь меняем значения, а не переменные местами.
    Более того, мы можем использовать 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
    Адрес
    Минск, БССР
    Сообщений
    140
    Репутация:
    7 ±
    Цитата Сообщение от 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,003
    Репутация:
    682 ±
    Лучше просто назвать swap, как в C++.

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

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

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

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

  9. #7
    Аватар для untonyst
    Модератор

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

    Дембель первого декабря.

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

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

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

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


 

 

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

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

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

Ваши права

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