Forum > FPC development

[CLOSED] Improvement of TFPCustomImage.FindHandlerFromExtension

(1/1)

lagprogramming:
packages/fcl-image/src/fpimage.inc has the following function:

--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---class function TFPCustomImage.FindHandlerFromExtension(extension: String  ): TIHData;var s : string;    r : integer;begin  if extension='' then    Exit(nil);  extension := lowercase (extension);  if (extension <> '') and (extension[1] = '.') then    delete (extension,1,1);  with ImageHandlers do    begin      r := count-1;      s := dumchar  + extension + dumchar;      while (r >= 0) do        begin        Result := GetData(r);        if (pos(s, dumchar+Result.Fextension+dumchar) <> 0) then          Exit;        dec (r);        end;    end;  Result := nil;end;The patch at the end of the message changes the above code to

--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---class function TFPCustomImage.FindHandlerFromExtension(extension: String  ): TIHData;var s : string;    r : integer;begin  if extension <> '' then    begin    extension := lowercase (extension);    if extension[1] = '.' then      delete (extension,1,1);    with ImageHandlers do      begin        r := count-1;        s := dumchar  + extension + dumchar;        while (r >= 0) do          begin          Result := GetData(r);          if (pos(s, dumchar+Result.Fextension+dumchar) <> 0) then            Exit;          dec (r);          end;      end;    end;  Result := nil;end;


--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---begin  if extension='' then    Exit(nil);  //CODE  Result := nil;end;is changed to

--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---begin  if extension<>'' then    begin    //CODE    end;  Result := nil;end;and after that

--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---if (extension <> '') and (extension[1] = '.') thenis replaced with

--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---if extension[1] = '.' then
The modified pascal code avoids duplicate nil assignments to function's result and also avoids the duplicate check for a nil(empty) extension variable. Obviously, the compiler produces better code for the modified pascal sources than for the original.
I've tried to keep the original code formatting style, here is the patch.

--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---diff --git a/packages/fcl-image/src/fpimage.inc b/packages/fcl-image/src/fpimage.incindex 531c4ec219..b4fb9dac24 100644--- a/packages/fcl-image/src/fpimage.inc+++ b/packages/fcl-image/src/fpimage.inc@@ -274,22 +274,23 @@ class function TFPCustomImage.FindHandlerFromExtension(extension: String var s : string;     r : integer; begin-  if extension='' then-    Exit(nil);-  extension := lowercase (extension);-  if (extension <> '') and (extension[1] = '.') then-    delete (extension,1,1);-  with ImageHandlers do+  if extension <> '' then     begin-      r := count-1;-      s := dumchar  + extension + dumchar;-      while (r >= 0) do-        begin-        Result := GetData(r);-        if (pos(s, dumchar+Result.Fextension+dumchar) <> 0) then-          Exit;-        dec (r);-        end;+    extension := lowercase (extension);+    if extension[1] = '.' then+      delete (extension,1,1);+    with ImageHandlers do+      begin+        r := count-1;+        s := dumchar  + extension + dumchar;+        while (r >= 0) do+          begin+          Result := GetData(r);+          if (pos(s, dumchar+Result.Fextension+dumchar) <> 0) then+            Exit;+          dec (r);+          end;+      end;     end;   Result := nil; end;

Navigation

[0] Message Index

Go to full version