![]() |
Insert/Delete mit PChar
Hallo zusammen
Ich habe folgende zwei Funktionen:
Delphi-Quellcode:
Wie lassen sich diese optimieren? Vorallem die Umwege über Insert und Delete gefallen mir nicht... :?
function InsertBuffer(var Dest: PChar; const DestSize: Integer;
const Buffer: PChar; const BufferSize: Integer; const Index: Integer): Integer; var S: string; begin SetString(S, Dest, DestSize); FreeMem(Dest, DestSize); Insert(Buffer, S, Index+1); Result:= Length(S); GetMem(Dest, Result); Move(S[1], Dest^, Result); end; function DeleteBuffer(var Dest: PChar; const DestSize: Integer; const Index, Count: Integer): Integer; var S: string; begin SetString(S, Dest, DestSize); FreeMem(Dest, DestSize); Delete(S, Index+1, Count); Result:= Length(S); GetMem(Dest, Result); Move(S[1], Dest^, Result); end; Gruss Shaman |
Re: Insert/Delete mit PChar
Das kann man doch besser machen? So ist es verdammt langsam :(
|
Re: Insert/Delete mit PChar
Ich habs schliesslich selbst rausgefunden :wink:. So gehts ein bisschen schneller:
Delphi-Quellcode:
Gruss
procedure InsertBuffer(var Dest: PChar; const DestSize: Integer;
const Buffer: PChar; const BufferSize: Integer; const Index: Integer); var Dest2: PChar; begin GetMem(Dest2, BufferSize + DestSize); Move(Dest^, Dest2^, Index); Move(Buffer^, (Dest2 + Index)^, BufferSize); Move((Dest + Index)^, (Dest2 + Index + BufferSize)^, DestSize - Index); FreeMem(Dest, DestSize); Dest:= Dest2; end; function DeleteBuffer(var Dest: PChar; const DestSize: Integer; const Index, Count: Integer): Integer; var Dest2: PChar; begin GetMem(Dest2, DestSize - Count); Move(Dest^, Dest2^, Index); Move((Dest + Index + Count)^, (Dest2 + Index)^, DestSize - Index - Count); FreeMem(Dest, DestSize); Dest:= Dest2; end; Shaman |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:02 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