Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите разобраться с inc/dec [D6, Win2k]


Андрусь ©   (2002-09-03 12:51:00) 

Привет всем! Такая вот проблемка возникла:есть у меня процедуры 2х типов, различие между ними только в том, что первая исп. процедуру inc,вторая dec. Возникло естеств. желание не писать 2 проц.,а передавать параметром процедуру.
Сделал так -

type
TChangeProcedure=procedure (var item:integer);

Procedure ChangeProcedure(var item:integer);
Procedure TestChange(ChangeProcedure:TChangeProcedure);
.............................................

procedure TestChange(ChangeProcedure:TChangeProcedure);
var i:integer;
begin
i:=0;
ChangeProcedure(i);
end;

procedure ChangeProcedure(var item: integer);
begin
inc(item);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
TestChange(@ChangeProcedure);
end;


Всё там работает,но хотелось бы передавать сами проц.inc и dec. Я так понимаю тип просто не такой,а исх.inc/dec не видно.
Зараннее всем большое спасибо!


valery_f   (2002-09-03 15:02:00) [1]

Учитывая "накладные расходы" на вызов процедур, imho проще с inc/dec разбираться на месте, а еще лучше - определить переменную и записывать в нее "1" или "-1":

//инициализация
if ???
then increment := 1 //работаем на увеличение
else increment := -1; //работаем на уменьшение

//использование
inc(нечто,increment);


Alx2   (2002-09-03 14:29:00) [2]

Пошло-поехало :))
Внесу свою дурную лепту:

>RV © (03.09.02 14:20)
dec(x,-1);
dec(x);
8)

>Anatoly Podgoretsky © (03.09.02 13:57)
>А еще лучше вместо ChangeProcedure(x) сразу написать inc(x)
почему именно inc ? 8)

PS Сорри за мусор.


Dimka Maslov   (2002-09-03 14:26:00) [3]

procedure Inc(var X: Integer);
asm
inc dword ptr [eax]
end;

procedure Dec(var X: Integer);
asm
dec dword ptr [eax]
end;


RV   (2002-09-03 14:20:00) [4]

inc(x);
inc(x,-1);


Anatoly Podgoretsky   (2002-09-03 13:57:00) [5]

А еще лучше вместо ChangeProcedure(x) сразу написать inc(x)


Ученик   (2002-09-03 13:47:00) [6]

А поменять + на -, и использовать одну ?


Alx2   (2002-09-03 12:58:00) [7]

>Андрусь © (03.09.02 12:56)
Ну если очень хочется, можно свои аналоги написаять для inc и dec (синтаксис в их есть Help). Но эффективность снизится.


Андрусь   (2002-09-03 12:56:00) [8]

Т.е. в моем случае ничего не придумаешь.


Виктор Щербаков   (2002-09-03 12:53:00) [9]

Исходников inc и dec нет. Эти функции встроенные. Т.е. компилятор, встретив их, генерирует код.


Alx2   (2002-09-03 12:52:00) [10]

inc и dec не процедуры. это а-ля макросы


Наверх

Титульная страница Поиск, карта сайта Написать письмо