Răsfoiți Sursa

* optimze case
* few formatting changes

florian 3 ani în urmă
părinte
comite
38c06e64c7
1 a modificat fișierele cu 14 adăugiri și 11 ștergeri
  1. 14 11
      rtl/inc/sstrings.inc

+ 14 - 11
rtl/inc/sstrings.inc

@@ -1161,6 +1161,10 @@ var
   UnsignedUpper: UInt64;
   RolledOverAt: integer;
   RollOverPoint: ValUInt;
+const
+  ValueArray : array['0'..'f'] of byte = (0,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0,0,10,11,12,13,14,15,
+                                          0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+                                          10,11,12,13,14,15);
 begin
   fpc_Val_SInt_ShortStr := 0;
   Temp:=0;
@@ -1194,30 +1198,29 @@ begin
 
   while Code<=Length(s) do
    begin
-     case s[Code] of
-       '0'..'9' : u:=Ord(S[Code])-Ord('0');
-       'A'..'F' : u:=Ord(S[Code])-(Ord('A')-10);
-       'a'..'f' : u:=Ord(S[Code])-(Ord('a')-10);
+     u:=16;
+     case s[code] of
+       '0'..'f' : u:=ValueArray[S[Code]];
        #0 : break;
      else
-      u:=16;
+       ;
      end;
 
      Prev := Temp;
      Temp := Temp*ValUInt(base);
      If (u >= base) or
         (ValUInt(maxNewValue-u) < Temp) or
-        (prev > maxPrevValue)
-        or ((Temp+u)>UnsignedUpper) Then
+        (prev > maxPrevValue) or
+        ((Temp+u)>UnsignedUpper) Then
        Begin
          fpc_Val_SInt_ShortStr := 0;
          Exit
        End;
      if (not RolledOver) and ((Temp+u)>RollOverPoint) then
-     begin
-       RolledOver := True;
-       RolledOverAt := Code;
-     end;
+       begin
+         RolledOver := True;
+         RolledOverAt := Code;
+       end;
      Temp:=Temp+u;
      inc(code);
    end;