Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   старый добрый swap() — возможен вообще? (http://www.flasher.ru/forum/showthread.php?t=150730)

expl 17.02.2011 21:52

Цитата:

Zebestov, а что, неужели в Haxe нет аналога ref?
Аналога нет, но может макросами сделать swap получится?

Zebestov 17.02.2011 21:53

О! Пошла жара ) извраты конечно )) но можно попробовать. Хотя кроме компактности эти хитрости больше ничего не дают. Заменить одно присваивание на сложение и вычитание боюсь никак не оптимизация ) но прикольно!

Добавлено через 5 минут
В HaXe я еще начинающий, так что не в курсе что там и как. Прошелся по докам — указателей не обнаружил.

Rzer 17.02.2011 22:01

Zebestov, что ты возмущаешься?
Код AS3:

var a:int = 10;
                        var b:int = 20;
                        var m:uint;
                        var i:int;
 
                        m = getTimer();
 
                        for (i = 0; i < 1000000; i++) {
                                a = a + b - (b = a);
                        }
 
                        trace(getTimer() - m);
 
                        //////////
 
                        var s:int;
 
                        m = getTimer();
 
                        for (i = 0; i < 1000000; i++) {
                                s = a;
                                a = b;
                                b = s;
                        }
 
                        trace(getTimer() - m);

Output
114
184

=)

Zebestov 17.02.2011 22:07

Отлично! Мой случай правда Number, но там тоже в среднем ваш алгоритм быстрее на 35-40%

Rzer 17.02.2011 22:19

Ладно, обманул я тебя =) Не быстрее, только в дебаг версии так получается, где номер строки отслеживается. Запишешь в одну строчку s = a; a = b; b = s; и уже медленнее

Zebestov 17.02.2011 22:22

Хха! Век живи ) я не знал об этом нюансе.

Котяра 18.02.2011 00:18

в дебаг версии вообще не стоит сравнивать быстродействие.

nuToH 18.04.2011 02:46

вот еще вариант для int:
Код AS1/AS2:

var a:int = -15;
var b:int = 99;
b = b ^ a ^ (a = b);
trace('a: ' + a); //a: 99
trace('b: ' + b); //b: -15

...
по идее b = a ^ 0 & (a = b); будет быстрее


Часовой пояс GMT +4, время: 16:48.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.