mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-13 10:49:16 +02:00
ide: more reliable TSourceMarks.FindFirstMarkNode, simplified node compare functions
git-svn-id: trunk@18962 -
This commit is contained in:
parent
a9de954bca
commit
b03edbc7c8
@ -210,23 +210,18 @@ type
|
|||||||
|
|
||||||
function CompareSourceMarks(Data1, Data2: Pointer): integer;
|
function CompareSourceMarks(Data1, Data2: Pointer): integer;
|
||||||
var
|
var
|
||||||
Mark1: TSourceMark;
|
Mark1: TSourceMark absolute Data1;
|
||||||
Mark2: TSourceMark;
|
Mark2: TSourceMark absolute Data2;
|
||||||
begin
|
begin
|
||||||
Mark1:=TSourceMark(Data1);
|
|
||||||
Mark2:=TSourceMark(Data2);
|
|
||||||
Result := Mark1.Compare(Mark2);
|
Result := Mark1.Compare(Mark2);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function CompareEditorAndLineWithMark(Key, Data: Pointer): integer;
|
function CompareEditorAndLineWithMark(Key, Data: Pointer): integer;
|
||||||
var
|
var
|
||||||
EditorAndLine: PEditorAndLine;
|
EditorAndLine: PEditorAndLine absolute Key;
|
||||||
AMark: TSourceMark;
|
AMark: TSourceMark absolute Data;
|
||||||
begin
|
begin
|
||||||
EditorAndLine:=PEditorAndLine(Key);
|
Result := -AMark.CompareEditorAndLine(EditorAndLine^.Editor, EditorAndLine^.Line);
|
||||||
AMark:=TSourceMark(Data);
|
|
||||||
Result:=AMark.CompareEditorAndLine(EditorAndLine^.Editor,EditorAndLine^.Line);
|
|
||||||
Result:=-Result;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TSourceMark }
|
{ TSourceMark }
|
||||||
@ -407,7 +402,7 @@ function TSourceMark.CompareEditorAndLine(ASynEdit: TCustomSynEdit;
|
|||||||
ALine: integer): integer;
|
ALine: integer): integer;
|
||||||
begin
|
begin
|
||||||
Result := PtrInt(fSynEdit) - PtrInt(ASynEdit);
|
Result := PtrInt(fSynEdit) - PtrInt(ASynEdit);
|
||||||
if Result<>0 then exit;
|
if Result <> 0 then Exit;
|
||||||
Result := Line - ALine;
|
Result := Line - ALine;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -531,12 +526,19 @@ end;
|
|||||||
function TSourceMarks.FindFirstMarkNode(ASynEdit: TCustomSynEdit; ALine: integer
|
function TSourceMarks.FindFirstMarkNode(ASynEdit: TCustomSynEdit; ALine: integer
|
||||||
): TAVLTreeNode;
|
): TAVLTreeNode;
|
||||||
var
|
var
|
||||||
|
LeftNode: TAVLTreeNode;
|
||||||
EditorAndLine: TEditorAndLine;
|
EditorAndLine: TEditorAndLine;
|
||||||
begin
|
begin
|
||||||
EditorAndLine.Editor := ASynEdit;
|
EditorAndLine.Editor := ASynEdit;
|
||||||
EditorAndLine.Line := ALine;
|
EditorAndLine.Line := ALine;
|
||||||
Result:=fSortedItems.FindLeftMostKey(@EditorAndLine,
|
Result := fSortedItems.FindKey(@EditorAndLine, @CompareEditorAndLineWithMark);
|
||||||
@CompareEditorAndLineWithMark);
|
while Result <> nil do
|
||||||
|
begin
|
||||||
|
LeftNode := fSortedItems.FindPrecessor(Result);
|
||||||
|
if (LeftNode = nil) or
|
||||||
|
(CompareEditorAndLineWithMark(@EditorAndLine, LeftNode.Data) <> 0) then break;
|
||||||
|
Result := LeftNode;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
constructor TSourceMarks.Create(TheOwner: TComponent);
|
constructor TSourceMarks.Create(TheOwner: TComponent);
|
||||||
@ -648,14 +650,15 @@ begin
|
|||||||
Result := nil;
|
Result := nil;
|
||||||
EditorAndLine.Editor := ASynEdit;
|
EditorAndLine.Editor := ASynEdit;
|
||||||
EditorAndLine.Line := ALine;
|
EditorAndLine.Line := ALine;
|
||||||
AVLNode:=fSortedItems.FindLeftMostKey(@EditorAndLine,
|
AVLNode := FindFirstMarkNode(ASynEdit, ALine);
|
||||||
@CompareEditorAndLineWithMark);
|
while (AVLNode <> nil) do
|
||||||
while (AVLNode<>nil) do begin
|
begin
|
||||||
CurMark := TSourceMark(AVLNode.Data);
|
CurMark := TSourceMark(AVLNode.Data);
|
||||||
if CompareEditorAndLineWithMark(@EditorAndLine, CurMark) <> 0 then break;
|
if CompareEditorAndLineWithMark(@EditorAndLine, CurMark) <> 0 then break;
|
||||||
if CurMark.IsBreakPoint then begin
|
if CurMark.IsBreakPoint then
|
||||||
|
begin
|
||||||
Result := CurMark;
|
Result := CurMark;
|
||||||
exit;
|
Exit;
|
||||||
end;
|
end;
|
||||||
AVLNode := fSortedItems.FindSuccessor(AVLNode);
|
AVLNode := fSortedItems.FindSuccessor(AVLNode);
|
||||||
end;
|
end;
|
||||||
@ -675,8 +678,7 @@ begin
|
|||||||
Marks := nil;
|
Marks := nil;
|
||||||
EditorAndLine.Editor := ASynEdit;
|
EditorAndLine.Editor := ASynEdit;
|
||||||
EditorAndLine.Line := ALine;
|
EditorAndLine.Line := ALine;
|
||||||
AVLNode := fSortedItems.FindLeftMostKey(@EditorAndLine,
|
AVLNode := FindFirstMarkNode(ASynEdit, ALine);
|
||||||
@CompareEditorAndLineWithMark);
|
|
||||||
while (AVLNode <> nil) do
|
while (AVLNode <> nil) do
|
||||||
begin
|
begin
|
||||||
CurMark := TSourceMark(AVLNode.Data);
|
CurMark := TSourceMark(AVLNode.Data);
|
||||||
|
Loading…
Reference in New Issue
Block a user