From c1fb58d3d500dd0970654dd4907197b986a172c8 Mon Sep 17 00:00:00 2001 From: mattias Date: Sat, 7 Feb 2015 13:18:10 +0000 Subject: [PATCH] lazutils: TAvgLvlTree.FindLeftMostKey/FindRightMostKey fixed git-svn-id: branches/fixes_1_4@47646 - --- components/lazutils/avglvltree.pas | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/components/lazutils/avglvltree.pas b/components/lazutils/avglvltree.pas index 88c9e018de..85695b14d6 100644 --- a/components/lazutils/avglvltree.pas +++ b/components/lazutils/avglvltree.pas @@ -1278,14 +1278,30 @@ end; function TAvgLvlTree.FindLeftMostKey(Key: Pointer; OnCompareKeyWithData: TListSortCompare): TAvgLvlTreeNode; +var + LeftNode: TAvgLvlTreeNode; begin - Result:=FindLeftMostSameKey(FindKey(Key,OnCompareKeyWithData)); + Result:=FindKey(Key,OnCompareKeyWithData); + if Result=nil then exit; + repeat + LeftNode:=Result.Precessor; + if (LeftNode=nil) or (OnCompareKeyWithData(Key,LeftNode.Data)<>0) then break; + Result:=LeftNode; + until false; end; function TAvgLvlTree.FindRightMostKey(Key: Pointer; OnCompareKeyWithData: TListSortCompare): TAvgLvlTreeNode; +var + RightNode: TAvgLvlTreeNode; begin - Result:=FindRightMostSameKey(FindKey(Key,OnCompareKeyWithData)); + Result:=FindKey(Key,OnCompareKeyWithData); + if Result=nil then exit; + repeat + RightNode:=Result.Successor; + if (RightNode=nil) or (OnCompareKeyWithData(Key,RightNode.Data)<>0) then break; + Result:=RightNode; + until false; end; function TAvgLvlTree.FindLeftMostSameKey(ANode: TAvgLvlTreeNode): TAvgLvlTreeNode;