Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.05.06;
Скачать: CL | DM;

Вниз

Как проще?   Найти похожие ветки 

 
Pavia ©   (2011-12-27 20:03) [0]

Надо около 200 функций переделать в процедуры. Как проще сделать?

Из
//Яркость
function Brightness(bm:TByteMap; a:Integer):TByteMap;
{25-50 тик на пиксель 3 канала}
var
i:Integer;
p,p1:PByteArray;
c:integer;
LL:Integer;
begin
Result:=Nil;

if (bm<>nil)then
 begin
 Result:=TByteMap.Create(bm.UnitFormat);
 Result.Fast:=True;
 Result.Width:=bm.Width;
 Result.Height:=bm.Height;
 Result.Fast:=False;
 ...
 end;
end;

в


procedure Brightness(r:TByteMap; bm:TByteMap; a:Integer);
{25-50 тик на пиксель 3 канала}
var
i:Integer;
p,p1:PByteArray;
c:integer;
LL:Integer;
begin

if (bm<>nil) and (CmpFormat(r,bm)=True) then
 begin
 if (r=nil)  then // для ряда функций ещё предусмотреть случай (r=bm)
   begin
   r:=TByteMap.Create(bm.UnitFormat);
   r.Fast:=True;
   r.Width:=bm.Width;
   r.Height:=bm.Height;
   r.Fast:=False;
   end;
 ...
 end else
 begin
  r.free;
  r:=nil;
 end;
end;


 
CRLF   (2011-12-27 20:07) [1]


> procedure Brightness(out r:TByteMap; bm:TByteMap; a:Integer);


 
Андреевич   (2011-12-27 20:50) [2]


> CRLF   (27.12.11 20:07) [1]

если класс - то смысл?


 
Игорь Шевченко ©   (2011-12-27 20:55) [3]

Андреевич   (27.12.11 20:50) [2]

В приведенном в посте [0] коде смысла вообще нету. В [1] хоть какой-то есть


 
Pavia ©   (2011-12-27 21:01) [4]


> В приведенном в посте [0] коде смысла вообще нету. В [1]
> хоть какой-то есть

Смысл есть. На вход подается искодное изображение и изображение под результат. Но я ещё толком не определился стоит ли создавать объект в процедуре или вообще воздержаться.

[1] не имеет смысла. Правильнее var.


 
Андреевич   (2011-12-27 21:01) [5]

есть там смысл, возвращается объект или null в зависимости от первого параметра


 
Андреевич   (2011-12-27 21:02) [6]


> Но я ещё толком не определился стоит ли создавать объект
> в процедуре или вообще воздержаться.

я бы воздержался :)


 
Pavia ©   (2011-12-27 21:03) [7]


> есть там смысл, возвращается объект или null в зависимости
> от первого параметра

Это я уже проходил от этого решено отказаться в пользу получения объекта из вне. Просто пока не доконца отказываюсь. Если объект nil то он создаётся.


 
Медвежонок Пятачок ©   (2011-12-27 21:10) [8]

а может 200 функций не трогать, а написать 200 процедур-оберток?


 
Андреевич   (2011-12-27 21:13) [9]

можно пхп скриптом обработать, регулярку сделав =)


 
Игорь Шевченко ©   (2011-12-27 21:59) [10]


> [1] не имеет смысла.


почему же ?


 
AlexDn ©   (2011-12-27 22:27) [11]

Что то я не понял, функции вообще одинаковые?


 
antonn ©   (2011-12-27 22:30) [12]


> Что то я не понял, функции вообще одинаковые?

функция и процедура одинаковы, ему нужно функцию в процедуру "переобъявить" :)


 
Плохиш ©   (2011-12-27 22:34) [13]


> Андреевич   (27.12.11 21:01) [5]
>
> есть там смысл, возвращается объект или null в зависимости
> от первого параметра

Чего, чего в коде [0] возвращается? И куда?


 
antonn ©   (2011-12-27 22:38) [14]

туда, откуда ее вызывали


 
Компромисс ©   (2011-12-28 10:06) [15]

Медвежонок Пятачок ©   (27.12.11 21:10) [8]

+1

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

type TIntegerFunction = function(bm:TByteMap; a:Integer):TByteMap;

procedure callFunc(var destination: ByteMap; var source: TByteMap;  func: TIntegerFunction; a:Integer);

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

В других языках я  бы вообще использовал одну-единтсвенную
procedure callFunc(var destination: ByteMap; var source: TByteMap;  func: TFunction; extraParams:Array=null);
но насколько я помню, Delphi такого не позволяет.


 
CRLF   (2011-12-28 11:26) [16]

Топикстартер ничего не сказал, насколько функции различны между собой (по сигнатуре), без этого рассуждать о том, "позволяет ли Delphi", -- бессмысленно имхо.


 
Компромисс ©   (2011-12-28 11:40) [17]

CRLF   (28.12.11 11:26) [16]

В каком нибудь action script, даже если все сигнатуры уникальны, использовалась бы всего одна оболочка, которая вызывалась бы как callWrapper(brightness, resultMap, sourceMap, [12, "Vasya", new Date()]);


 
CRLF   (2011-12-28 11:45) [18]

:-) Ну вопрос-то был не "на каком языке как решалась бы такая задача", а "как сделать на делфи".


 
Компромисс ©   (2011-12-28 11:49) [19]

CRLF   (28.12.11 11:45) [18]

Я не помню, позволяет ли это Delphi. А вдруг позволяет (особенно новые версии)? Вот я и посоветовал.


 
CRLF   (2011-12-28 12:12) [20]

Параметры типа array of const (четвёртый параметр в твоём примере) -- позволяет. Третий параметр -- не, не позволит передать ЛЮБУЮ функцию. В крайнем случае можно передать указатель и плясать с бубном для передачи фактических параметров.


 
Компромисс ©   (2011-12-28 12:31) [21]

CRLF   (28.12.11 12:12) [20]

Ясно. Спасибо за ликбез.


 
han_malign   (2011-12-29 13:31) [22]


> можно пхп скриптом обработать, регулярку сделав =)

- в Delphi:
Replace text
Text to find: function{.*\(}{.*\)}{.*;}
Replace with: procedure\0var r\2\1;
[+] Regular expressions


 
alexdn ©   (2011-12-29 14:17) [23]

> han_malign   (29.12.11 13:31) [22]
> - в Delphi:
> Replace text
меня вот гложут сомнения, визуальная среда не будет ли путать процедуры, если они соответственно будут обьявлены сверху, а потом вот так просто текст будет изменен.


 
QAZ   (2011-12-29 17:38) [24]


> Надо около 200 функций переделать в процедуры. Как проще
> сделать?

проще (а нафига?) ниче не менять


 
CRLF   (2011-12-30 17:34) [25]

http://forum.vingrad.ru/forum/s/26da6231c3da6d8887ae9ab6ce7abde9/topic-224977/anchor-entry1622290/15.html
вот, кстати, несложный способ вызова функции с произвольной сигнатурой


 
CRLF   (2011-12-30 17:44) [26]

вру. это для published методов.



Страницы: 1 вся ветка

Текущий архив: 2012.05.06;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.014 c
15-1325149872
ЛЕГЕНДА
2011-12-29 13:11
2012.05.06
клик мышкой при наведение на врага


4-1256757673
istok20
2009-10-28 22:21
2012.05.06
uac и автозагрузка...


15-1325190602
Юрий
2011-12-30 00:30
2012.05.06
С днем рождения ! 30 декабря 2011 пятница


2-1326020364
Gu
2012-01-08 14:59
2012.05.06
dllmain vs init-final


2-1325856082
Gu
2012-01-06 17:21
2012.05.06
messagebox