Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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.002 c
2-1325903132
Gu
2012-01-07 06:25
2012.05.06
имена функций длл


15-1325500426
Делфиец
2012-01-02 14:33
2012.05.06
win7 64 выполнить от имени администратора


15-1325149872
ЛЕГЕНДА
2011-12-29 13:11
2012.05.06
клик мышкой при наведение на врага


2-1326069317
Gu
2012-01-09 04:35
2012.05.06
x64 str


15-1325228984
ЛЕГЕНДА
2011-12-30 11:09
2012.05.06
клик мышью при определенном событии





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский