Menu

[r2000]: / trunk / Src / Compilers.USearchDirs.pas  Maximize  Restore  History

Download this file

165 lines (139 with data), 3.9 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
{
* Compilers.USearchDirs.pas
*
* Implements a class that encapsulates a list of search directories for use
* by the compiler.
*
* $Rev$
* $Date$
*
* ***** BEGIN LICENSE BLOCK *****
*
* Version: MPL 1.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
*
* The Original Code is Compilers.USearchDirs.pas
*
* The Initial Developer of the Original Code is Peter Johnson
* (http://www.delphidabbler.com/).
*
* Portions created by the Initial Developer are Copyright (C) 2011 Peter
* Johnson. All Rights Reserved.
*
* Contributor(s)
* NONE
*
* ***** END LICENSE BLOCK *****
}
unit Compilers.USearchDirs;
interface
uses
// Delphi
Generics.Collections,
// Project
Compilers.UGlobals, IntfCommon, UIStringList;
type
/// <summary>
/// Implements a list of search directories for use by compilers.
/// </summary>
TSearchDirs = class(TInterfacedObject,
ISearchDirs, IClonable
)
strict private
var
/// <summary>Records directory names.</summary>
fList: TList<string>;
public
/// <summary>Creates new empty list object.</summary>
constructor Create; overload;
/// <summary>Creates new list containg given directory names.</summary>
constructor Create(const DirNames: TArray<string>); overload;
/// <summary>Tears down object.</summary>
destructor Destroy; override;
/// <summary>Creates and returns a copy of this object.</summary>
/// <remarks>Method of IClonable.</remarks>
function Clone: IInterface;
/// <summary>Creates and returns enumerator for directories list.</summary>
/// <remarks>Method of ISearchDirs.</remarks>
function GetEnumerator: TEnumerator<string>;
/// <summary>Adds a new search directory to list.</summary>
/// <remarks>Method of ISearchDirs.</remarks>
procedure Add(const DirName: string);
/// <summary>Clears list.</summary>
/// <remarks>Method of ISearchDirs.</remarks>
procedure Clear;
/// <summary>Checks if list is empty.</summary>
/// <remarks>Method of ISearchDirs.</remarks>
function IsEmpty: Boolean;
/// <summary>Returns an array containing the names of all directories in
/// the list.</summary>
/// <remarks>Method of ISearchDirs.</remarks>
function ToStrings: TArray<string>;
end;
implementation
uses
// Delphi
SysUtils, Generics.Defaults,
// Project
UComparers, UStrUtils;
{ TSearchDirs }
procedure TSearchDirs.Add(const DirName: string);
begin
fList.Add(DirName);
end;
procedure TSearchDirs.Clear;
begin
fList.Clear;
end;
function TSearchDirs.Clone: IInterface;
var
NewInst: ISearchDirs;
Dir: string;
begin
NewInst := TSearchDirs.Create;
for Dir in Self do
NewInst.Add(Dir);
Result := NewInst as IInterface;
end;
constructor TSearchDirs.Create;
begin
inherited Create;
fList := TList<string>.Create(TTextComparer.Create);
end;
constructor TSearchDirs.Create(const DirNames: TArray<string>);
var
DirName: string;
begin
Create;
for DirName in DirNames do
Add(DirName);
end;
destructor TSearchDirs.Destroy;
begin
fList.Free;
inherited;
end;
function TSearchDirs.GetEnumerator: TEnumerator<string>;
begin
Result := fList.GetEnumerator;
end;
function TSearchDirs.IsEmpty: Boolean;
begin
Result := fList.Count = 0;
end;
function TSearchDirs.ToStrings: TArray<string>;
var
Idx: Integer;
begin
SetLength(Result, fList.Count);
for Idx := 0 to Pred(fList.Count) do
Result[Idx] := fList[Idx];
end;
end.
Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.