avglvltree: setcompare: set when count=0

git-svn-id: trunk@38486 -
This commit is contained in:
mattias 2012-09-02 15:57:47 +00:00
parent 75c516c1ea
commit 30aefa3503

View File

@ -1577,30 +1577,33 @@ var List: PPointer;
i, OldCount: integer; i, OldCount: integer;
begin begin
if (FOnCompare=NewCompare) and (FOnObjectCompare=NewObjectCompare) then exit; if (FOnCompare=NewCompare) and (FOnObjectCompare=NewObjectCompare) then exit;
if Count<1 then begin
FOnCompare:=NewCompare;
FOnObjectCompare:=NewObjectCompare;
exit;
end;
// sort the tree again // sort the tree again
if Count>0 then begin OldCount:=Count;
OldCount:=Count; GetMem(List,SizeOf(Pointer)*OldCount);
GetMem(List,SizeOf(Pointer)*OldCount); try
try // save the data in a list
// save the data in a list ANode:=FindLowest;
ANode:=FindLowest; i:=0;
i:=0; while ANode<>nil do begin
while ANode<>nil do begin List[i]:=ANode.Data;
List[i]:=ANode.Data; inc(i);
inc(i); ANode:=ANode.Successor;
ANode:=ANode.Successor;
end;
// clear the tree
Clear;
// set the new compare function
FOnCompare:=NewCompare;
FOnObjectCompare:=NewObjectCompare;
// re-add all nodes
for i:=0 to OldCount-1 do
Add(List[i]);
finally
FreeMem(List);
end; end;
// clear the tree
Clear;
// set the new compare function
FOnCompare:=NewCompare;
FOnObjectCompare:=NewObjectCompare;
// re-add all nodes
for i:=0 to OldCount-1 do
Add(List[i]);
finally
FreeMem(List);
end; end;
end; end;