Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Objektliste "kopieren" (https://www.delphipraxis.net/123973-objektliste-kopieren.html)

Alaitoc 12. Nov 2008 13:17


Objektliste "kopieren"
 
Hallöchen,

kurze Frage...wie übergibt man Items von einer TTokenListe (TObjectList) zu einem Funktionsresult TTokenListe (TObjectList)?
Also kopiere alle Items von Index bis Count aus der TTokenListe und gib es wieder.

Delphi-Quellcode:
function CopyToken(TokenList:TTokenList;Index,Count:Integer):TTokenList;
begin

end;
MfG Alaitoc

mkinzler 12. Nov 2008 13:20

Re: Objektliste "kopieren"
 
.Assign()

DeddyH 12. Nov 2008 13:21

Re: Objektliste "kopieren"
 
Würde ich etwa so machen:
Delphi-Quellcode:
procedure CopyToken(const Dest, Src: TTokenList;Index,Count:Integer);
var i: integer;
begin
  for i := Index to Count do
    Dest.Add(Src.Items[i]);
end;

alzaimar 12. Nov 2008 13:23

Re: Objektliste "kopieren"
 
Sollen die Objekte in der Liste geklont werden oder willst Du nur die Referenzen duplizieren? Hat die TObjectList die Eigenschaft 'OwnsObjects' auf 'True' gesetzt?

@DeddyH: Bei OwnsObjects=True ergibt das ja schonmal Probleme, wenn eine der Listen freigegeben wird...

DeddyH 12. Nov 2008 13:28

Re: Objektliste "kopieren"
 
Zitat:

Zitat von alzaimar
@DeddyH: Bei OwnsObjects=True ergibt das ja schonmal Probleme, wenn eine der Listen freigegeben wird...

Ist mir klar, aber das ist IMO eher ein Design-Problem.

Alaitoc 12. Nov 2008 13:36

Re: Objektliste "kopieren"
 
So mal zum allgemeinen Verständnis mal mein Programm, ich markier hier mal die relevanten Stellen.

Delphi-Quellcode:
procedure TMathParser.Parsen(TokenList:TTokenList;BinaryNode:PTBinaryNode);
begin
  if TokenPos(tkAdd,TokenList)>0 then
  begin
    BinaryNode:=CreateBinNode(TokenList,TokenPos(tkAdd,TokenList),BinaryNode);
    Parsen(SubTokenA(TokenList,tkAdd),BinaryNode);//!!!!!!!!
    Parsen(SubTokenB(TokenList,tkAdd),BinaryNode);//!!!!!!!!
  end
  else if TokenPos(tkSub,TokenList)>0 then
  begin
    ...
    ...
    ...
    ...
    ...
Delphi-Quellcode:
function SubTokenA(TokenList:TTokenList;Token:TTokens):TTokenList;
begin
 result:=CopyToken(TokenList,0,TokenPos(Token,TokenList));
end;

function SubTokenB(TokenList:TTokenList;Token:TTokens):TTokenList;
begin
  result:=CopyTokenEnd(TokenList,TokenPos(Token,Tokenlist)+1)
end;
Delphi-Quellcode:
function CopyToken(TokenList:TTokenList;Index,Count:Integer):TTokenList;
begin

end;
Im ersten Teil durchsucht er die Liste nach Tokens um daraus dann einen binären Baum zu erstellen, dabei teilt er immer durch SubTokenA und SubTokenB die Liste in zwei Hälften, dieses "Teilen" soll CopyToken übernehmen...indem es alle Items von Index bis Count kopiert und als Liste wiedergibt.

Ich muss hier halt wissen wie ich den Teil der Liste kopiere ohne mir ein Speicherloch zu kreieren, denn das hab ich bisher ganz gut hingekriegt auch wenn das Programm grundsätzlich geklappt hat.

Alaitoc 12. Nov 2008 14:01

Re: Objektliste "kopieren"
 
Bei:

Delphi-Quellcode:
procedure CopyToken(const Dest, Src: TTokenList;Index,Count:Integer);
var i: integer;
begin
  for i := Index to Count do
    Dest.Add(Src.Items[i]);
end;
Ist es das Problem..das mein Ziel "result" ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:04 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz