mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-06 14:20:21 +02:00
LazUtils: Copy essential changes from FCL's AVL_Tree to our version Laz_AVL_Tree.
This commit is contained in:
parent
d81d854eb5
commit
7dc0983e3c
@ -20,7 +20,7 @@
|
|||||||
balanced, so that inserting, deleting and finding a node is performed in
|
balanced, so that inserting, deleting and finding a node is performed in
|
||||||
O(log(#Nodes)).
|
O(log(#Nodes)).
|
||||||
|
|
||||||
Note! This is a copy of avl_tree unit from FPC 3.1.1 from 6th Apr 2017.
|
Note! This is a copy of avl_tree unit from FPC trunk from Apr 2023.
|
||||||
Can be removed when FPC 3.2 is the minimun requirement for Lazarus and LazUtils.
|
Can be removed when FPC 3.2 is the minimun requirement for Lazarus and LazUtils.
|
||||||
}
|
}
|
||||||
unit Laz_AVL_Tree;
|
unit Laz_AVL_Tree;
|
||||||
@ -123,7 +123,6 @@ type
|
|||||||
function AddAscendingSequence(Data: Pointer; LastAdded: TAVLTreeNode;
|
function AddAscendingSequence(Data: Pointer; LastAdded: TAVLTreeNode;
|
||||||
var Successor: TAVLTreeNode): TAVLTreeNode;
|
var Successor: TAVLTreeNode): TAVLTreeNode;
|
||||||
procedure Delete(ANode: TAVLTreeNode);
|
procedure Delete(ANode: TAVLTreeNode);
|
||||||
// JuMa: Turned Remove and RemovePointer into functions.
|
|
||||||
function Remove(Data: Pointer): boolean;
|
function Remove(Data: Pointer): boolean;
|
||||||
function RemovePointer(Data: Pointer): boolean;
|
function RemovePointer(Data: Pointer): boolean;
|
||||||
procedure MoveDataLeftMost(var ANode: TAVLTreeNode);
|
procedure MoveDataLeftMost(var ANode: TAVLTreeNode);
|
||||||
@ -624,21 +623,23 @@ procedure TAVLTree.Clear;
|
|||||||
|
|
||||||
procedure DeleteNode(ANode: TAVLTreeNode);
|
procedure DeleteNode(ANode: TAVLTreeNode);
|
||||||
begin
|
begin
|
||||||
if ANode.Left<>nil then DeleteNode(ANode.Left);
|
if ANode<>nil then begin
|
||||||
if ANode.Right<>nil then DeleteNode(ANode.Right);
|
if ANode.Left<>nil then DeleteNode(ANode.Left);
|
||||||
|
if ANode.Right<>nil then DeleteNode(ANode.Right);
|
||||||
|
end;
|
||||||
DisposeNode(ANode);
|
DisposeNode(ANode);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
// Clear
|
// Clear
|
||||||
begin
|
begin
|
||||||
if Root<>nil then
|
DeleteNode(Root);
|
||||||
DeleteNode(Root);
|
|
||||||
fRoot:=nil;
|
fRoot:=nil;
|
||||||
FCount:=0;
|
FCount:=0;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
constructor TAVLTree.Create(const OnCompareMethod: TListSortCompare);
|
constructor TAVLTree.Create(const OnCompareMethod: TListSortCompare);
|
||||||
begin
|
begin
|
||||||
|
fNodeMgr:=LazNodeMemManager;
|
||||||
FOnCompare:=OnCompareMethod;
|
FOnCompare:=OnCompareMethod;
|
||||||
Init;
|
Init;
|
||||||
end;
|
end;
|
||||||
@ -646,6 +647,7 @@ end;
|
|||||||
constructor TAVLTree.CreateObjectCompare(
|
constructor TAVLTree.CreateObjectCompare(
|
||||||
const OnCompareMethod: TObjectSortCompare);
|
const OnCompareMethod: TObjectSortCompare);
|
||||||
begin
|
begin
|
||||||
|
fNodeMgr:=LazNodeMemManager;
|
||||||
FOnObjectCompare:=OnCompareMethod;
|
FOnObjectCompare:=OnCompareMethod;
|
||||||
Init;
|
Init;
|
||||||
end;
|
end;
|
||||||
@ -1118,7 +1120,7 @@ end;
|
|||||||
|
|
||||||
procedure TAVLTree.ConsistencyCheck;
|
procedure TAVLTree.ConsistencyCheck;
|
||||||
|
|
||||||
procedure E(Msg: string);
|
procedure E(const Msg: string);
|
||||||
begin
|
begin
|
||||||
raise Exception.Create('TAVLTree.ConsistencyCheck: '+Msg);
|
raise Exception.Create('TAVLTree.ConsistencyCheck: '+Msg);
|
||||||
end;
|
end;
|
||||||
@ -1362,7 +1364,7 @@ end;
|
|||||||
|
|
||||||
procedure TAVLTreeNode.ConsistencyCheck(Tree: TAVLTree);
|
procedure TAVLTreeNode.ConsistencyCheck(Tree: TAVLTree);
|
||||||
|
|
||||||
procedure E(Msg: string);
|
procedure E(const Msg: string);
|
||||||
begin
|
begin
|
||||||
raise Exception.Create('TAVLTreeNode.ConsistencyCheck: '+Msg);
|
raise Exception.Create('TAVLTreeNode.ConsistencyCheck: '+Msg);
|
||||||
end;
|
end;
|
||||||
|
Loading…
Reference in New Issue
Block a user