Einzelnen Beitrag anzeigen

QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
2.046 Beiträge
 
Delphi 12 Athens
 
#1

AW: TEdit + Steuerzeichen + XML = Exception

  Alt 7. Jul 2025, 15:27
Na gut, es würde alles noch ein bisschen schneller gehen, wenn man bis zum Maximum optimiert:
Ginge das hier auch???
Ab wann wäre es sinnvoll?
Delphi-Quellcode:
Function BL_GE(const x,y:Integer):Integer;Inline;
Begin
  Result := (x - y + 1) div (abs(x - y) + 1);
End;
Function BL_LE(const x,y:Integer):Integer;Inline;
Begin
  Result := BL_GE(y,x);
End;
Function BL_E(const x,y:Integer):Integer;Inline;
Begin
  Result := BL_GE(x, y) * BL_LE(x, y);
End;
Function BL_NE(const x,y:Integer):Integer;Inline;
Begin
  Result := 1 - BL_E(x,y);
End;
Function BL_L(const x,y:Integer):Integer;Inline;
Begin
  Result := 1 - BL_GE(x, y); // ODER BL_LE(x, y) - BL_E(x, y)
End;
Function BL_G(const x,y:Integer):Integer;Inline;
Begin
  Result := 1 - BL_LE(x, y); // ODER BL_GE(x, y) - BL_E(x, y)
End;
function SanitizeXML_Branchless(const AValue: String): String;
var
  Src, SrcEnd, Dest: PChar;
  Len, Keep: Integer;
  Ch: Integer;
begin
  Len := Length(AValue);
  SetLength(Result, Len);
  Src := PChar(AValue);
  Dest := PChar(Result);
  SrcEnd := Src + Len;

  while Src < SrcEnd do
  begin
    Ch := Ord(Src^);

    // Prüfen, ob das Zeichen in einem der gültigen Bereiche liegt.
    // Das Ergebnis ist 1 für gültige Zeichen, sonst 0.
    Keep := BL_E(Ch, 9) or // #9
            BL_E(Ch, 10) or // #10
            BL_E(Ch, 13) or // #13
            (BL_GE(Ch, 32) and BL_LE(Ch, $D7FF)) or // #32..#$D7FF
            (BL_GE(Ch, $E000) and BL_LE(Ch, $FFFD)); // #$E000..#$FFFD

    // Den Pointer nur dann erhöhen, wenn das Zeichen behalten wird.
    // Anstatt einer bedingten Anweisung (if Keep = 1) wird der Pointer
    // um den Wert von 'Keep' verschoben (entweder um 1 oder 0).
    Dest^ := Src^;
    Dest := Dest + Keep;

    Inc(Src);
  end;

  SetLength(Result, Dest - PChar(Result));
end;
Andreas
Nobody goes there anymore. It's too crowded!

Geändert von QuickAndDirty ( 7. Jul 2025 um 15:33 Uhr)
  Mit Zitat antworten Zitat