Einzelnen Beitrag anzeigen

Benutzerbild von mleyen
mleyen

Registriert seit: 10. Aug 2007
609 Beiträge
 
FreePascal / Lazarus
 
#7

Re: Delphi 2007 - UpperCase(), LowerCase() Implementierung

  Alt 9. Aug 2009, 00:43
{$STRINGCHECKS OFF} // grrr... Wir wollen diesen Unsinn nicht, der den Code Das existiert bei mit gar nicht:
-> [DCC Fehler] mlUtils.pas(6165): E1030 Ungültige Compileranweisung: 'STRINGCHECKS'

Hier aber nochmal die Deutsche Version (ö,ä,ü) + LowerCase:

Delphi-Quellcode:
procedure UpCaseFst(var S: string); overload;
var
  P: PChar;
  Len: Integer;
begin
  { Garantieren, dass keine andere String-Referenz auf unseren Speicher zeigt (Copy-on-Write) }
  UniqueString(S);
              
  Len := Length(S); // nur aufbläht, verlangsamt und für Delphi und gescheite
  P := PChar(S);
  for Len := Len downto 1 do
  begin
    case P^ of // Delphi 2009 Workaround für "in ['a'..'z']" Warnung, gleicher Maschinencode
      'a'..'z':
        P^ := Char(Ord(P^) xor $20); // Die Eigenschaften der ASCII-Tabelle ausnutzen
      'ö': P^ := 'Ö';
      'ä': P^ := 'Ä';
      'ü': P^ := 'Ü';
    end;
    Inc(P);
  end;
end;
Delphi-Quellcode:
procedure LwCaseFst(var S: string); overload;
var
  P: PChar;
  Len: Integer;
begin
  { Garantieren, dass keine andere String-Referenz auf unseren Speicher zeigt (Copy-on-Write) }
  UniqueString(S);

  Len := Length(S); // nur aufbläht, verlangsamt und für Delphi und gescheite
  P := PChar(S);
  for Len := Len downto 1 do
  begin
    case P^ of // Delphi 2009 Workaround für "in ['a'..'z']" Warnung, gleicher Maschinencode
      'A'..'Z': P^ := Char(Ord(P^) or $20); // Die Eigenschaften der ASCII-Tabelle ausnutzen
      'Ö': P^ := 'ö';
      'Ä': P^ := 'ä';
      'Ü': P^ := 'ü';
    end;
    Inc(P);
  end;
end;
Ob das jetzt immernoch die Highendoptimierung ist, weiß ich nicht.
  Mit Zitat antworten Zitat