AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TEdit + Steuerzeichen + XML = Exception

Ein Thema von Whookie · begonnen am 2. Jul 2025 · letzter Beitrag vom 7. Jul 2025
 
QuickAndDirty

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

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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz