mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-14 19:19:18 +02:00
codetools: extended directorycacher for darwin filenames
git-svn-id: trunk@16384 -
This commit is contained in:
parent
35596739bf
commit
ebf2d6a8bf
@ -107,8 +107,10 @@ type
|
|||||||
|
|
||||||
TStringToStringTree = class
|
TStringToStringTree = class
|
||||||
private
|
private
|
||||||
|
FCompareKeyItemFunc: TListSortCompare;
|
||||||
FTree: TAVLTree;// tree of TStringToStringTreeItem
|
FTree: TAVLTree;// tree of TStringToStringTreeItem
|
||||||
FCaseSensitive: boolean;
|
FCaseSensitive: boolean;
|
||||||
|
function GetCompareItemsFunc: TListSortCompare;
|
||||||
function GetStrings(const s: string): string;
|
function GetStrings(const s: string): string;
|
||||||
procedure SetStrings(const s: string; const AValue: string);
|
procedure SetStrings(const s: string; const AValue: string);
|
||||||
function FindNode(const s: string): TAVLTreeNode;
|
function FindNode(const s: string): TAVLTreeNode;
|
||||||
@ -125,13 +127,31 @@ type
|
|||||||
property CaseSensitive: boolean read FCaseSensitive;
|
property CaseSensitive: boolean read FCaseSensitive;
|
||||||
property Tree: TAVLTree read FTree;
|
property Tree: TAVLTree read FTree;
|
||||||
procedure WriteDebugReport;
|
procedure WriteDebugReport;
|
||||||
|
property CompareItemsFunc: TListSortCompare read GetCompareItemsFunc;
|
||||||
|
property CompareKeyItemFunc: TListSortCompare read FCompareKeyItemFunc;
|
||||||
|
procedure SetCompareFuncs(
|
||||||
|
const NewCompareItemsFunc, NewCompareKeyItemFunc: TListSortCompare);
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TFilenameToStringTree }
|
||||||
|
|
||||||
|
TFilenameToStringTree = class(TStringToStringTree)
|
||||||
|
public
|
||||||
|
constructor Create(CaseInsensitive: boolean);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function CompareStringToStringItems(Data1, Data2: Pointer): integer;
|
function CompareStringToStringItems(Data1, Data2: Pointer): integer;
|
||||||
function CompareStringToStringItemsI(Data1, Data2: Pointer): integer;
|
|
||||||
function CompareStringAndStringToStringTreeItem(Key, Data: Pointer): integer;
|
function CompareStringAndStringToStringTreeItem(Key, Data: Pointer): integer;
|
||||||
|
|
||||||
|
function CompareStringToStringItemsI(Data1, Data2: Pointer): integer;
|
||||||
function CompareStringAndStringToStringTreeItemI(Key, Data: Pointer): integer;
|
function CompareStringAndStringToStringTreeItemI(Key, Data: Pointer): integer;
|
||||||
|
|
||||||
|
function CompareFilenameToStringItems(Data1, Data2: Pointer): integer;
|
||||||
|
function CompareFilenameAndFilenameToStringTreeItem(Key, Data: Pointer): integer;
|
||||||
|
|
||||||
|
function CompareFilenameToStringItemsI(Data1, Data2: Pointer): integer;
|
||||||
|
function CompareFilenameAndFilenameToStringTreeItemI(Key, Data: Pointer): integer;
|
||||||
|
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
@ -147,6 +167,12 @@ begin
|
|||||||
PStringToStringTreeItem(Data2)^.Name);
|
PStringToStringTreeItem(Data2)^.Name);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function CompareFilenameToStringItems(Data1, Data2: Pointer): integer;
|
||||||
|
begin
|
||||||
|
Result:=CompareFilenames(PStringToStringTreeItem(Data1)^.Name,
|
||||||
|
PStringToStringTreeItem(Data2)^.Name);
|
||||||
|
end;
|
||||||
|
|
||||||
function CompareStringAndStringToStringTreeItem(Key, Data: Pointer): integer;
|
function CompareStringAndStringToStringTreeItem(Key, Data: Pointer): integer;
|
||||||
begin
|
begin
|
||||||
Result:=CompareStr(String(Key),PStringToStringTreeItem(Data)^.Name);
|
Result:=CompareStr(String(Key),PStringToStringTreeItem(Data)^.Name);
|
||||||
@ -157,6 +183,25 @@ begin
|
|||||||
Result:=CompareText(String(Key),PStringToStringTreeItem(Data)^.Name);
|
Result:=CompareText(String(Key),PStringToStringTreeItem(Data)^.Name);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function CompareFilenameAndFilenameToStringTreeItem(Key, Data: Pointer
|
||||||
|
): integer;
|
||||||
|
begin
|
||||||
|
Result:=CompareFilenames(String(Key),PStringToStringTreeItem(Data)^.Name);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function CompareFilenameToStringItemsI(Data1, Data2: Pointer): integer;
|
||||||
|
begin
|
||||||
|
Result:=CompareFilenamesIgnoreCase(PStringToStringTreeItem(Data1)^.Name,
|
||||||
|
PStringToStringTreeItem(Data2)^.Name);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function CompareFilenameAndFilenameToStringTreeItemI(Key, Data: Pointer
|
||||||
|
): integer;
|
||||||
|
begin
|
||||||
|
Result:=CompareFilenamesIgnoreCase(String(Key),
|
||||||
|
PStringToStringTreeItem(Data)^.Name);
|
||||||
|
end;
|
||||||
|
|
||||||
{ TCodeXYPositions }
|
{ TCodeXYPositions }
|
||||||
|
|
||||||
function TCodeXYPositions.GetItems(Index: integer): PCodeXYPosition;
|
function TCodeXYPositions.GetItems(Index: integer): PCodeXYPosition;
|
||||||
@ -322,6 +367,11 @@ begin
|
|||||||
Result:=''
|
Result:=''
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TStringToStringTree.GetCompareItemsFunc: TListSortCompare;
|
||||||
|
begin
|
||||||
|
Result:=Tree.OnCompare;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TStringToStringTree.SetStrings(const s: string; const AValue: string);
|
procedure TStringToStringTree.SetStrings(const s: string; const AValue: string);
|
||||||
var
|
var
|
||||||
Node: TAVLTreeNode;
|
Node: TAVLTreeNode;
|
||||||
@ -340,19 +390,19 @@ end;
|
|||||||
|
|
||||||
function TStringToStringTree.FindNode(const s: string): TAVLTreeNode;
|
function TStringToStringTree.FindNode(const s: string): TAVLTreeNode;
|
||||||
begin
|
begin
|
||||||
if CaseSensitive then
|
Result:=FTree.FindKey(Pointer(s),FCompareKeyItemFunc)
|
||||||
Result:=FTree.FindKey(Pointer(s),@CompareStringAndStringToStringTreeItem)
|
|
||||||
else
|
|
||||||
Result:=FTree.FindKey(Pointer(s),@CompareStringAndStringToStringTreeItemI);
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
constructor TStringToStringTree.Create(TheCaseSensitive: boolean);
|
constructor TStringToStringTree.Create(TheCaseSensitive: boolean);
|
||||||
begin
|
begin
|
||||||
FCaseSensitive:=TheCaseSensitive;
|
FCaseSensitive:=TheCaseSensitive;
|
||||||
if CaseSensitive then
|
if CaseSensitive then begin
|
||||||
FTree:=TAVLTree.Create(@CompareStringToStringItems)
|
FCompareKeyItemFunc:=@CompareStringAndStringToStringTreeItem;
|
||||||
else
|
FTree:=TAVLTree.Create(@CompareStringToStringItems);
|
||||||
|
end else begin
|
||||||
|
FCompareKeyItemFunc:=@CompareStringAndStringToStringTreeItemI;
|
||||||
FTree:=TAVLTree.Create(@CompareStringToStringItemsI);
|
FTree:=TAVLTree.Create(@CompareStringToStringItemsI);
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
destructor TStringToStringTree.Destroy;
|
destructor TStringToStringTree.Destroy;
|
||||||
@ -441,5 +491,25 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TStringToStringTree.SetCompareFuncs(const NewCompareItemsFunc,
|
||||||
|
NewCompareKeyItemFunc: TListSortCompare);
|
||||||
|
begin
|
||||||
|
FCompareKeyItemFunc:=NewCompareKeyItemFunc;
|
||||||
|
Tree.OnCompare:=NewCompareItemsFunc;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TFilenameToStringTree }
|
||||||
|
|
||||||
|
constructor TFilenameToStringTree.Create(CaseInsensitive: boolean);
|
||||||
|
begin
|
||||||
|
inherited Create(true);
|
||||||
|
if CaseInsensitive then
|
||||||
|
SetCompareFuncs(@CompareFilenameToStringItemsI,
|
||||||
|
@CompareFilenameAndFilenameToStringTreeItemI)
|
||||||
|
else
|
||||||
|
SetCompareFuncs(@CompareFilenameToStringItems,
|
||||||
|
@CompareFilenameAndFilenameToStringTreeItem);
|
||||||
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
@ -63,8 +63,8 @@ type
|
|||||||
ctdusUnitNormal, // e.g. unitname (case depends on OS) -> filename
|
ctdusUnitNormal, // e.g. unitname (case depends on OS) -> filename
|
||||||
ctdusUnitCaseInsensitive, // unitname case insensitive -> filename
|
ctdusUnitCaseInsensitive, // unitname case insensitive -> filename
|
||||||
ctdusInFilenameNormal, // unit 'in' filename -> filename
|
ctdusInFilenameNormal, // unit 'in' filename -> filename
|
||||||
ctdusInFilenameCaseInsenstive, // unit 'in' filename case insensitive -> filename
|
ctdusInFilenameCaseInsensitive, // unit 'in' filename case insensitive -> filename
|
||||||
ctdusUnitFileNormal, // unitname.ext -> filename
|
ctdusUnitFileNormal, // unitname.ext (case depends on OS) -> filename
|
||||||
ctdusUnitFileCaseInsensitive // unitname.ext case insensitive -> filename
|
ctdusUnitFileCaseInsensitive // unitname.ext case insensitive -> filename
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -73,7 +73,7 @@ const
|
|||||||
ctdusInFilenameNormal,
|
ctdusInFilenameNormal,
|
||||||
ctdusUnitFileNormal];
|
ctdusUnitFileNormal];
|
||||||
ctdusCaseInsensitive = [ctdusUnitCaseInsensitive,
|
ctdusCaseInsensitive = [ctdusUnitCaseInsensitive,
|
||||||
ctdusInFilenameCaseInsenstive,
|
ctdusInFilenameCaseInsensitive,
|
||||||
ctdusUnitFileCaseInsensitive];
|
ctdusUnitFileCaseInsensitive];
|
||||||
|
|
||||||
type
|
type
|
||||||
@ -557,11 +557,14 @@ var
|
|||||||
begin
|
begin
|
||||||
Files:=FUnitSources[UnitSrc].Files;
|
Files:=FUnitSources[UnitSrc].Files;
|
||||||
if Files=nil then begin
|
if Files=nil then begin
|
||||||
Files:=TStringToStringTree.Create({$IFDEF CaseInsensitiveFilenames}
|
case UnitSrc of
|
||||||
false
|
ctdusUnitNormal: Files:=TStringToStringTree.Create(FilenamesCaseSensitive);
|
||||||
{$ELSE}
|
ctdusUnitCaseInsensitive: Files:=TStringToStringTree.Create(false);
|
||||||
UnitSrc in ctdusCaseNormal
|
ctdusInFilenameNormal: Files:=TFilenameToStringTree.Create(false);
|
||||||
{$ENDIF});
|
ctdusInFilenameCaseInsensitive:Files:=TFilenameToStringTree.Create(true);
|
||||||
|
ctdusUnitFileNormal: Files:=TFilenameToStringTree.Create(false);
|
||||||
|
ctdusUnitFileCaseInsensitive: Files:=TFilenameToStringTree.Create(true);
|
||||||
|
end;
|
||||||
FUnitSources[UnitSrc].Files:=Files;
|
FUnitSources[UnitSrc].Files:=Files;
|
||||||
end;
|
end;
|
||||||
Files[Search]:=Filename;
|
Files[Search]:=Filename;
|
||||||
@ -832,7 +835,7 @@ begin
|
|||||||
// uses IN parameter
|
// uses IN parameter
|
||||||
InFilename:=TrimFilename(SetDirSeparators(InFilename));
|
InFilename:=TrimFilename(SetDirSeparators(InFilename));
|
||||||
if AnyCase then
|
if AnyCase then
|
||||||
UnitSrc:=ctdusInFilenameCaseInsenstive
|
UnitSrc:=ctdusInFilenameCaseInsensitive
|
||||||
else
|
else
|
||||||
UnitSrc:=ctdusInFilenameNormal;
|
UnitSrc:=ctdusInFilenameNormal;
|
||||||
if GetUnitSourceCacheValue(UnitSrc,InFilename,Result) then begin
|
if GetUnitSourceCacheValue(UnitSrc,InFilename,Result) then begin
|
||||||
|
Loading…
Reference in New Issue
Block a user