lazutils: TAvgLvlTree: made FreeAndDelete virtual safe

git-svn-id: trunk@54536 -
This commit is contained in:
mattias 2017-04-06 09:23:31 +00:00
parent 3fac8b15a6
commit efd6a6efc5
2 changed files with 9 additions and 4 deletions

View File

@ -35,7 +35,7 @@ type
FOwnsObjects: boolean;
public
procedure DisposeNode(aNode: TAVLTreeNode); override;
procedure FreeAndDelete(ANode: TAVLTreeNode); overload;
procedure FreeAndDelete(ANode: TAVLTreeNode); override;
property OwnsObjects: boolean read FOwnsObjects write FOwnsObjects;
end;

View File

@ -130,7 +130,7 @@ type
procedure MoveDataRightMost(var ANode: TAVLTreeNode);
procedure Clear;
procedure FreeAndClear;
procedure FreeAndDelete(ANode: TAVLTreeNode);
procedure FreeAndDelete(ANode: TAVLTreeNode); virtual;
function Equals(Obj: TObject): boolean; override; // same as IsEqual(aTree,false)
function IsEqual(aTree: TAVLTree; CheckDataPointer: boolean): boolean; // checks only keys or Data (references), not the data itself, O(n)
procedure Assign(aTree: TAVLTree); virtual; // clear and copy all Data (references), O(n)
@ -640,7 +640,6 @@ end;
constructor TAVLTree.Create(const OnCompareMethod: TListSortCompare);
begin
inherited Create;
fNodeMgr:=LazNodeMemManager;
FOnCompare:=OnCompareMethod;
Init;
@ -663,6 +662,12 @@ procedure TAVLTree.Delete(ANode: TAVLTreeNode);
var
OldParent, Child: TAVLTreeNode;
begin
{$IFDEF CheckAVLTreeNodeManager}
OldParent:=ANode;
while OldParent.Parent<>nil do OldParent:=OldParent.Parent;
if OldParent<>Root then
raise Exception,Create('TAVLTree.Delete'); // not my node
{$ENDIF}
if (ANode.Left<>nil) and (ANode.Right<>nil) then begin
// ANode has both: Left and Right
// Switch ANode position with Successor
@ -1188,7 +1193,7 @@ begin
end else begin
if Compare(MyNode.Data,OtherNode.Data)<>0 then exit;
end;
MyNode:=MyNode.Successor;;
MyNode:=MyNode.Successor;
OtherNode:=OtherNode.Successor;
end;
if OtherNode<>nil then exit;