Forum: Object-Pascal / Delphi-Language
Delphi
by Bjoerk,
9. Jun 2014
Ich hab mir jetzt TStrings/ TStringList doch mal näher angeschaut (ist strukturell sehr ähnlich TList (die kenne ich fast auswendig)). Schon erstaunlich daß man von einer Klasse ableitet die überhaupt keine Items hat? BTW, was ich auch nie verstehe warum man da nicht MaxListSize TStringItems erzeugt? (oder doch)?
TStringList = class;
PStringItem = ^TStringItem;
TStringItem = record...
Forum: Object-Pascal / Delphi-Language
Delphi
by Bjoerk,
9. Jun 2014
FItems: array of string; (Siehe auch #1)
Forum: Object-Pascal / Delphi-Language
Delphi
by Bjoerk,
8. Jun 2014
Ok. Thanx. Dann kann man das aber so nicht machen (Integerüberlauf). Ich lass es jetzt sein. :wall:
function TMyStringList.MoveBytes(const Index: integer): integer;
var
I: integer;
begin
Result := 0;
for I := Index to FCount - 1 do
Inc(Result, Length(FItems) * SizeOf(Char));
Forum: Object-Pascal / Delphi-Language
Delphi
by Bjoerk,
8. Jun 2014
function StrMove(Dest: PChar; const Source: PChar; Count: Cardinal): PChar;
begin
Result := Dest;
Move(Source^, Dest^, Count);
end;
Da kann man doch auch gleich Move(Source, Dest, Count) schreiben, oder?
My Problem is, ich wäß ned was (hier) als Count anzusetzen is? :oops:
Forum: Object-Pascal / Delphi-Language
Delphi
by Bjoerk,
8. Jun 2014
Ok. aber was ist dann mit dem Referenzzähler?
Ich bin mit wegen den strings nicht sicher und bezweifele langsam ob das so geht und ob’s überhaupt an dem Finalize liegt? Mir scheint man kann auch bei strings nicht so moven? Bei Shortstring funktionierst hingegen einwandfrei?
Ich poste mal die Klasse:
destructor TMyStringList.Destroy;
begin
Clear;
Forum: Object-Pascal / Delphi-Language
Delphi
by Bjoerk,
8. Jun 2014
Nee. Leider. Hatte auch schon SetLength(FItems, 0) probiert. Macht es nicht. Das Move scheint wohl so auch nicht zu gehen selbst wenn ich die Puffergröße in Bytes genau ausrechne?
Forum: Object-Pascal / Delphi-Language
Delphi
by Bjoerk,
8. Jun 2014
Du meinst bei Fillchar? OK, hab ich geändert. Speicherloch bleibt aber?
FillChar(FItems, Length(FItems) * SizeOf(char), 0);
Forum: Object-Pascal / Delphi-Language
Delphi
by Bjoerk,
8. Jun 2014
Ich hab manche Routinen die Geschwindigkeitsoptimiert sind und verwende da deshalb (gelegentlich) eigene Stringlisten (FItems: array of string). Jetzt wollte ich mal fragen ob die Moves und FillChars so richtig sind und ob der Compiler was mit SizeOf(string) anfangen kann? :gruebel:
procedure TMyStringList.Insert(const Index: integer; const Value: string);
var
N: integer;
begin
...