Форум: "Прочее";
Текущий архив: 2012.05.06;
Скачать: [xml.tar.bz2];
ВнизКак проще? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.003 c