mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-06 17:10:28 +02:00
* Patch from Mattias to mostly revert his previous patch that broke his own code.
Mantis #27549 git-svn-id: trunk@30075 -
This commit is contained in:
parent
177b007eba
commit
d20491e0f0
@ -90,10 +90,8 @@ type
|
||||
const OnCompareKeyWithData: TListSortCompare): TAVLTreeNode;
|
||||
function FindRightMostKey(Key: Pointer;
|
||||
const OnCompareKeyWithData: TListSortCompare): TAVLTreeNode;
|
||||
function FindLeftMostSameKey(ANode: TAVLTreeNode;
|
||||
OnCompareKeyWithData: TListSortCompare = nil): TAVLTreeNode;
|
||||
function FindRightMostSameKey(ANode: TAVLTreeNode;
|
||||
OnCompareKeyWithData: TListSortCompare = nil): TAVLTreeNode;
|
||||
function FindLeftMostSameKey(ANode: TAVLTreeNode): TAVLTreeNode;
|
||||
function FindRightMostSameKey(ANode: TAVLTreeNode): TAVLTreeNode;
|
||||
procedure Add(ANode: TAVLTreeNode);
|
||||
function Add(Data: Pointer): TAVLTreeNode;
|
||||
procedure Delete(ANode: TAVLTreeNode);
|
||||
@ -720,29 +718,43 @@ end;
|
||||
|
||||
function TAVLTree.FindLeftMostKey(Key: Pointer;
|
||||
const OnCompareKeyWithData: TListSortCompare): TAVLTreeNode;
|
||||
var
|
||||
LeftNode: TAVLTreeNode;
|
||||
begin
|
||||
Result:=FindLeftMostSameKey(FindKey(Key,OnCompareKeyWithData),OnCompareKeyWithData);
|
||||
Result:=FindKey(Key,OnCompareKeyWithData);
|
||||
if Result=nil then exit;
|
||||
repeat
|
||||
LeftNode:=FindPrecessor(Result);
|
||||
if (LeftNode=nil) or (OnCompareKeyWithData(Key,LeftNode.Data)<>0) then exit;
|
||||
Result:=LeftNode;
|
||||
until false;
|
||||
end;
|
||||
|
||||
function TAVLTree.FindRightMostKey(Key: Pointer;
|
||||
const OnCompareKeyWithData: TListSortCompare): TAVLTreeNode;
|
||||
var
|
||||
RightNode: TAVLTreeNode;
|
||||
begin
|
||||
Result:=FindRightMostSameKey(FindKey(Key,OnCompareKeyWithData),OnCompareKeyWithData);
|
||||
Result:=FindKey(Key,OnCompareKeyWithData);
|
||||
if Result=nil then exit;
|
||||
repeat
|
||||
RightNode:=FindSuccessor(Result);
|
||||
if (RightNode=nil) or (OnCompareKeyWithData(Key,RightNode.Data)<>0) then exit;
|
||||
Result:=RightNode;
|
||||
until false;
|
||||
end;
|
||||
|
||||
function TAVLTree.FindLeftMostSameKey(ANode: TAVLTreeNode;
|
||||
OnCompareKeyWithData: TListSortCompare): TAVLTreeNode;
|
||||
function TAVLTree.FindLeftMostSameKey(ANode: TAVLTreeNode): TAVLTreeNode;
|
||||
var
|
||||
LeftNode: TAVLTreeNode;
|
||||
Data: Pointer;
|
||||
begin
|
||||
if ANode<>nil then begin
|
||||
if OnCompareKeyWithData=nil then OnCompareKeyWithData:=FOnCompare;
|
||||
Data:=ANode.Data;
|
||||
Result:=ANode;
|
||||
repeat
|
||||
LeftNode:=FindPrecessor(Result);
|
||||
if (LeftNode=nil) or (OnCompareKeyWithData(Data,LeftNode.Data)<>0) then break;
|
||||
if (LeftNode=nil) or (FOnCompare(Data,LeftNode.Data)<>0) then break;
|
||||
Result:=LeftNode;
|
||||
until false;
|
||||
end else begin
|
||||
@ -750,19 +762,17 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
function TAVLTree.FindRightMostSameKey(ANode: TAVLTreeNode;
|
||||
OnCompareKeyWithData: TListSortCompare): TAVLTreeNode;
|
||||
function TAVLTree.FindRightMostSameKey(ANode: TAVLTreeNode): TAVLTreeNode;
|
||||
var
|
||||
RightNode: TAVLTreeNode;
|
||||
Data: Pointer;
|
||||
begin
|
||||
if ANode<>nil then begin
|
||||
if OnCompareKeyWithData=nil then OnCompareKeyWithData:=FOnCompare;
|
||||
Data:=ANode.Data;
|
||||
Result:=ANode;
|
||||
repeat
|
||||
RightNode:=FindSuccessor(Result);
|
||||
if (RightNode=nil) or (OnCompareKeyWithData(Data,RightNode.Data)<>0) then break;
|
||||
if (RightNode=nil) or (FOnCompare(Data,RightNode.Data)<>0) then break;
|
||||
Result:=RightNode;
|
||||
until false;
|
||||
end else begin
|
||||
|
Loading…
Reference in New Issue
Block a user