Browse Source

+ Optimizations for lower/uppercase functions

git-svn-id: trunk@380 -
michael 20 years ago
parent
commit
7fb254755d
1 changed files with 33 additions and 19 deletions
  1. 33 19
      rtl/objpas/sysutils/sysstr.inc

+ 33 - 19
rtl/objpas/sysutils/sysstr.inc

@@ -63,30 +63,44 @@ end ;
 {   UpperCase returns a copy of S where all lowercase characters ( from a to z )
 {   UpperCase returns a copy of S where all lowercase characters ( from a to z )
     have been converted to uppercase   }
     have been converted to uppercase   }
 
 
-function UpperCase(const S: string): string;
-var i: integer;
-begin
-result := S;
-i := Length(S);
-while i <> 0 do begin
-   if (result[i] in ['a'..'z']) then result[i] := char(byte(result[i]) - 32);
-   Dec(i);
-   end;
-end;
 
 
+Function UpperCase(Const S : String) : String;
+
+Var
+  i : Integer;
+  P : PChar;
+    
+begin
+  Result := S;
+  UniqueString(Result);
+  P:=Pchar(Result);
+  for i := 1 to Length(Result) do
+    begin
+    if (P^ in ['a'..'z']) then P^ := char(byte(p^) - 32);
+      Inc(P);
+    end;
+end;
+                            
 {   LowerCase returns a copy of S where all uppercase characters ( from A to Z )
 {   LowerCase returns a copy of S where all uppercase characters ( from A to Z )
     have been converted to lowercase  }
     have been converted to lowercase  }
 
 
-function LowerCase(const S: string): string;
-var i: integer;
-begin
-result := S;
-i := Length(result);
-while i <> 0 do begin
-   if (result[i] in ['A'..'Z']) then result[i] := char(byte(result[i]) + 32);
-   dec(i);
-   end;
+Function Lowercase(Const S : String) : String;
+
+Var
+  i : Integer;
+  P : PChar;
+    
+begin
+  Result := S;
+  UniqueString(Result);
+  P:=Pchar(Result);
+  for i := 1 to Length(Result) do
+    begin
+    if (P^ in ['A'..'Z']) then P^ := char(byte(p^) + 32);
+      Inc(P);
+    end;
 end;
 end;
+                            
 
 
 {   CompareStr compares S1 and S2, the result is the based on
 {   CompareStr compares S1 and S2, the result is the based on
     substraction of the ascii values of the characters in S1 and S2
     substraction of the ascii values of the characters in S1 and S2