mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-28 22:20:25 +02:00
IDE: TFileReference: small optimization
git-svn-id: trunk@36456 -
This commit is contained in:
parent
e3ce0595fa
commit
233548ee99
@ -38,7 +38,7 @@ unit FileReferenceList;
|
|||||||
interface
|
interface
|
||||||
|
|
||||||
uses
|
uses
|
||||||
Classes, SysUtils, LCLProc, AVL_Tree, FileProcs, IDEProcs;
|
Classes, SysUtils, LCLProc, FileProcs, AvgLvlTree, IDEProcs;
|
||||||
|
|
||||||
type
|
type
|
||||||
{ TFileReference }
|
{ TFileReference }
|
||||||
@ -65,7 +65,7 @@ type
|
|||||||
private
|
private
|
||||||
FOnChanged: TNotifyEvent;
|
FOnChanged: TNotifyEvent;
|
||||||
FTimeStamp: integer;
|
FTimeStamp: integer;
|
||||||
FTree: TAVLTree; // tree of TFileReference sorted for filename
|
FTree: TAvgLvlTree; // tree of TFileReference sorted for filename
|
||||||
FFlags: TFileReferenceFlags;
|
FFlags: TFileReferenceFlags;
|
||||||
FSearchPath: string;
|
FSearchPath: string;
|
||||||
FUpdateLock: integer;
|
FUpdateLock: integer;
|
||||||
@ -115,7 +115,7 @@ end;
|
|||||||
procedure TFileReferenceList.UpdateSearchPath;
|
procedure TFileReferenceList.UpdateSearchPath;
|
||||||
var
|
var
|
||||||
SearchPathLen: Integer;
|
SearchPathLen: Integer;
|
||||||
ANode: TAVLTreeNode;
|
ANode: TAvgLvlTreeNode;
|
||||||
StartPos: Integer;
|
StartPos: Integer;
|
||||||
CurFileLen: Integer;
|
CurFileLen: Integer;
|
||||||
CurFileName: String;
|
CurFileName: String;
|
||||||
@ -187,8 +187,7 @@ end;
|
|||||||
destructor TFileReferenceList.Destroy;
|
destructor TFileReferenceList.Destroy;
|
||||||
begin
|
begin
|
||||||
Clear;
|
Clear;
|
||||||
FTree.Free;
|
FreeAndNil(FTree);
|
||||||
FTree:=nil;
|
|
||||||
inherited Destroy;
|
inherited Destroy;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -218,12 +217,12 @@ end;
|
|||||||
|
|
||||||
procedure TFileReferenceList.AddFilename(const Filename: string);
|
procedure TFileReferenceList.AddFilename(const Filename: string);
|
||||||
var
|
var
|
||||||
ANode: TAVLTreeNode;
|
ANode: TAvgLvlTreeNode;
|
||||||
NewFileRef: TFileReference;
|
NewFileRef: TFileReference;
|
||||||
begin
|
begin
|
||||||
if Filename='' then exit;
|
if Filename='' then exit;
|
||||||
if FTree<>nil then begin
|
if FTree<>nil then begin
|
||||||
ANode:=FTree.FindKey(PChar(Filename),@CompareFileNameAndReference);
|
ANode:=FTree.FindKey(Pointer(Filename),@CompareFileNameAndReference);
|
||||||
if ANode<>nil then begin
|
if ANode<>nil then begin
|
||||||
inc(TFileReference(ANode.Data).fReferenceCount);
|
inc(TFileReference(ANode.Data).fReferenceCount);
|
||||||
exit;
|
exit;
|
||||||
@ -232,24 +231,24 @@ begin
|
|||||||
NewFileRef:=TFileReference.Create;
|
NewFileRef:=TFileReference.Create;
|
||||||
NewFileRef.fFilename:=Filename;
|
NewFileRef.fFilename:=Filename;
|
||||||
inc(NewFileRef.fReferenceCount);
|
inc(NewFileRef.fReferenceCount);
|
||||||
if FTree=nil then FTree:=TAVLTree.Create(@CompareFileReferences);
|
if FTree=nil then FTree:=TAvgLvlTree.Create(@CompareFileReferences);
|
||||||
FTree.Add(NewFileRef);
|
FTree.Add(NewFileRef);
|
||||||
Invalidate;
|
Invalidate;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TFileReferenceList.RemoveFilename(const Filename: string);
|
procedure TFileReferenceList.RemoveFilename(const Filename: string);
|
||||||
var
|
var
|
||||||
ANode: TAVLTreeNode;
|
ANode: TAvgLvlTreeNode;
|
||||||
CurFileRef: TFileReference;
|
CurFileRef: TFileReference;
|
||||||
begin
|
begin
|
||||||
if Filename='' then exit;
|
if Filename='' then exit;
|
||||||
if FTree=nil then exit;
|
if FTree=nil then exit;
|
||||||
ANode:=FTree.FindKey(PChar(Filename),@CompareFileNameAndReference);
|
ANode:=FTree.FindKey(Pointer(Filename),@CompareFileNameAndReference);
|
||||||
if ANode=nil then exit;
|
if ANode=nil then exit;
|
||||||
CurFileRef:=TFileReference(ANode.Data);
|
CurFileRef:=TFileReference(ANode.Data);
|
||||||
dec(CurFileRef.fReferenceCount);
|
dec(CurFileRef.fReferenceCount);
|
||||||
if CurFileRef.fReferenceCount=0 then begin
|
if CurFileRef.fReferenceCount=0 then begin
|
||||||
FTree.Remove(CurFileRef);
|
FTree.Delete(ANode);
|
||||||
CurFileRef.Free;
|
CurFileRef.Free;
|
||||||
Invalidate;
|
Invalidate;
|
||||||
end;
|
end;
|
||||||
@ -257,11 +256,11 @@ end;
|
|||||||
|
|
||||||
function TFileReferenceList.GetFileReference(const Filename: string): TFileReference;
|
function TFileReferenceList.GetFileReference(const Filename: string): TFileReference;
|
||||||
var
|
var
|
||||||
ANode: TAVLTreeNode;
|
ANode: TAvgLvlTreeNode;
|
||||||
begin
|
begin
|
||||||
Result:=nil;
|
Result:=nil;
|
||||||
if FTree=nil then exit;
|
if FTree=nil then exit;
|
||||||
ANode:=FTree.FindKey(PChar(Filename),@CompareFileNameAndReference);
|
ANode:=FTree.FindKey(Pointer(Filename),@CompareFileNameAndReference);
|
||||||
if ANode=nil then exit;
|
if ANode=nil then exit;
|
||||||
Result:=TFileReference(ANode.Data);
|
Result:=TFileReference(ANode.Data);
|
||||||
end;
|
end;
|
||||||
@ -274,7 +273,7 @@ end;
|
|||||||
|
|
||||||
function TFileReferenceList.CreateFileList: TStringList;
|
function TFileReferenceList.CreateFileList: TStringList;
|
||||||
var
|
var
|
||||||
ANode: TAVLTreeNode;
|
ANode: TAvgLvlTreeNode;
|
||||||
begin
|
begin
|
||||||
Result:=TStringList.Create;
|
Result:=TStringList.Create;
|
||||||
if FTree=nil then exit;
|
if FTree=nil then exit;
|
||||||
|
Loading…
Reference in New Issue
Block a user