mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-21 18:29:27 +02:00
avltree: made nodemgr protected
git-svn-id: trunk@18008 -
This commit is contained in:
parent
04e2321724
commit
e18d5e1f61
@ -52,11 +52,13 @@ type
|
||||
private
|
||||
FOnCompare: TListSortCompare;
|
||||
FCount: integer;
|
||||
nodemgr : TBaseAVLTreeNodeManager;
|
||||
procedure BalanceAfterInsert(ANode: TAVLTreeNode);
|
||||
procedure BalanceAfterDelete(ANode: TAVLTreeNode);
|
||||
function FindInsertPos(Data: Pointer): TAVLTreeNode;
|
||||
procedure SetOnCompare(const AValue: TListSortCompare);
|
||||
protected
|
||||
fNodeMgrAutoFree: boolean;
|
||||
fNodeMgr: TBaseAVLTreeNodeManager;
|
||||
public
|
||||
Root: TAVLTreeNode;
|
||||
function Find(Data: Pointer): TAVLTreeNode;
|
||||
@ -91,7 +93,8 @@ type
|
||||
function ConsistencyCheck: integer;
|
||||
procedure WriteReportToStream(s: TStream; var StreamSize: int64);
|
||||
function ReportAsString: string;
|
||||
procedure SetNodeManager(newmgr:TBaseAVLTreeNodeManager);
|
||||
procedure SetNodeManager(NewMgr: TBaseAVLTreeNodeManager;
|
||||
AutoFree: boolean = false);
|
||||
constructor Create(OnCompareMethod: TListSortCompare);
|
||||
constructor Create;
|
||||
destructor Destroy; override;
|
||||
@ -137,7 +140,7 @@ end;
|
||||
|
||||
function TAVLTree.Add(Data: Pointer): TAVLTreeNode;
|
||||
begin
|
||||
Result:=NodeMgr.NewNode;
|
||||
Result:=fNodeMgr.NewNode;
|
||||
Result.Data:=Data;
|
||||
Add(Result);
|
||||
end;
|
||||
@ -476,7 +479,7 @@ procedure TAVLTree.Clear;
|
||||
if ANode.Left<>nil then DeleteNode(ANode.Left);
|
||||
if ANode.Right<>nil then DeleteNode(ANode.Right);
|
||||
end;
|
||||
NodeMgr.DisposeNode(ANode);
|
||||
fNodeMgr.DisposeNode(ANode);
|
||||
end;
|
||||
|
||||
// Clear
|
||||
@ -489,7 +492,7 @@ end;
|
||||
constructor TAVLTree.Create(OnCompareMethod: TListSortCompare);
|
||||
begin
|
||||
inherited Create;
|
||||
nodemgr:=NodeMemManager;
|
||||
fNodeMgr:=NodeMemManager;
|
||||
FOnCompare:=OnCompareMethod;
|
||||
FCount:=0;
|
||||
end;
|
||||
@ -527,7 +530,7 @@ begin
|
||||
Root:=nil;
|
||||
end;
|
||||
dec(FCount);
|
||||
NodeMgr.DisposeNode(ANode);
|
||||
fNodeMgr.DisposeNode(ANode);
|
||||
exit;
|
||||
end;
|
||||
if (ANode.Right=nil) then begin
|
||||
@ -550,7 +553,7 @@ begin
|
||||
Root:=OldLeft;
|
||||
end;
|
||||
dec(FCount);
|
||||
NodeMgr.DisposeNode(ANode);
|
||||
fNodeMgr.DisposeNode(ANode);
|
||||
exit;
|
||||
end;
|
||||
if (ANode.Left=nil) then begin
|
||||
@ -573,7 +576,7 @@ begin
|
||||
Root:=OldRight;
|
||||
end;
|
||||
dec(FCount);
|
||||
NodeMgr.DisposeNode(ANode);
|
||||
fNodeMgr.DisposeNode(ANode);
|
||||
exit;
|
||||
end;
|
||||
// DelNode has both: Left and Right
|
||||
@ -641,6 +644,8 @@ end;
|
||||
destructor TAVLTree.Destroy;
|
||||
begin
|
||||
Clear;
|
||||
if fNodeMgrAutoFree then
|
||||
FreeAndNil(fNodeMgr);
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
@ -1038,10 +1043,14 @@ begin
|
||||
FOnCompare:=AValue;
|
||||
end;
|
||||
|
||||
procedure TAVLTree.SetNodeManager(newmgr:TBaseAVLTreeNodeManager);
|
||||
procedure TAVLTree.SetNodeManager(NewMgr: TBaseAVLTreeNodeManager;
|
||||
AutoFree: boolean);
|
||||
// only allowed just after create.
|
||||
begin
|
||||
nodemgr:=newmgr;
|
||||
if fNodeMgrAutoFree then
|
||||
FreeAndNil(fNodeMgr);
|
||||
fNodeMgr:=NewMgr;
|
||||
fNodeMgrAutoFree:=AutoFree;
|
||||
end;
|
||||
|
||||
{ TAVLTreeNode }
|
||||
|
Loading…
Reference in New Issue
Block a user