📄 jclalgorithms.pas
字号:
else
Break;
end;
procedure Copy(First: IJclStrIterator; Count: Integer; Output: IJclStrIterator);
var
I: Integer;
begin
for I := Count - 1 downto 0 do
if Output.HasNext and First.HasNext then
begin
Output.SetString(First.GetString);
First.Next;
Output.Next;
end
else
Break;
end;
procedure Copy(First: IJclIterator; Count: Integer; Output: IJclIterator);
var
I: Integer;
begin
for I := Count - 1 downto 0 do
if Output.HasNext and First.HasNext then
begin
Output.SetObject(First.GetObject);
First.Next;
Output.Next;
end
else
Break;
end;
procedure Generate(List: IJclIntfList; Count: Integer; AInterface: IInterface);
var
I: Integer;
begin
List.Clear;
for I := 0 to Count - 1 do
List.Add(AInterface);
end;
procedure Generate(List: IJclStrList; Count: Integer; const AString: string);
var
I: Integer;
begin
List.Clear;
for I := Count - 1 downto 0 do
List.Add(AString);
end;
procedure Generate(List: IJclList; Count: Integer; AObject: TObject);
var
I: Integer;
begin
List.Clear;
for I := Count - 1 downto 0 do
List.Add(AObject);
end;
procedure Fill(First: IJclIntfIterator; Count: Integer; AInterface: IInterface);
var
I: Integer;
begin
for I := Count - 1 downto 0 do
if First.HasNext then
begin
First.SetObject(AInterface);
First.Next;
end
else
Break;
end;
procedure Fill(First: IJclStrIterator; Count: Integer; const AString: string);
var
I: Integer;
begin
for I := Count - 1 downto 0 do
if First.HasNext then
begin
First.SetString(AString);
First.Next;
end
else
Break;
end;
procedure Fill(First: IJclIterator; Count: Integer; AObject: TObject);
var
I: Integer;
begin
for I := Count - 1 downto 0 do
if First.HasNext then
begin
First.SetObject(AObject);
First.Next;
end
else
Break;
end;
procedure Reverse(First, Last: IJclIntfIterator);
var
Obj: IInterface;
begin
if not First.HasNext then
Exit;
if not Last.HasPrevious then
Exit;
while First.NextIndex < Last.PreviousIndex do
begin
Obj := First.GetObject;
Last.Previous;
First.SetObject(Last.GetObject);
Last.SetObject(Obj);
First.Next;
end;
end;
procedure Reverse(First, Last: IJclStrIterator);
var
Obj: string;
begin
if not First.HasNext then
Exit;
if not Last.HasPrevious then
Exit;
while First.NextIndex <= Last.PreviousIndex do
begin
Obj := First.GetString;
Last.Previous;
First.SetString(Last.GetString);
Last.SetString(Obj);
First.Next;
end;
end;
procedure Reverse(First, Last: IJclIterator);
var
Obj: TObject;
begin
if not First.HasNext then
Exit;
if not Last.HasPrevious then
Exit;
while First.NextIndex <= Last.PreviousIndex do
begin
Obj := First.GetObject;
Last.Previous;
First.SetObject(Last.GetObject);
Last.SetObject(Obj);
First.Next;
end;
end;
procedure QuickSort(AList: IJclIntfList; L, R: Integer; AComparator: TIntfCompare);
var
I, J, P: Integer;
Obj: IInterface;
begin
repeat
I := L;
J := R;
P := (L + R) shr 1;
repeat
while AComparator(AList.GetObject(I), AList.GetObject(P)) < 0 do
Inc(I);
while AComparator(AList.GetObject(J), AList.GetObject(P)) > 0 do
Dec(J);
if I <= J then
begin
Obj := AList.GetObject(I);
AList.SetObject(I, AList.GetObject(J));
AList.SetObject(J, Obj);
if P = I then
P := J
else
if P = J then
P := I;
Inc(I);
Dec(J);
end;
until I > J;
if L < J then
QuickSort(AList, L, J, AComparator);
L := I;
until I >= R;
end;
procedure QuickSort(AList: IJclStrList; L, R: Integer; AComparator: TStrCompare);
var
I, J, P: Integer;
Obj: string;
begin
repeat
I := L;
J := R;
P := (L + R) shr 1;
repeat
while AComparator(AList.GetString(I), AList.GetString(P)) < 0 do
Inc(I);
while AComparator(AList.GetString(J), AList.GetString(P)) > 0 do
Dec(J);
if I <= J then
begin
Obj := AList.GetString(I);
AList.SetString(I, AList.GetString(J));
AList.SetString(J, Obj);
if P = I then
P := J
else
if P = J then
P := I;
Inc(I);
Dec(J);
end;
until I > J;
if L < J then
QuickSort(AList, L, J, AComparator);
L := I;
until I >= R;
end;
procedure QuickSort(AList: IJclList; L, R: Integer; AComparator: TCompare);
var
I, J, P: Integer;
Obj: TObject;
begin
repeat
I := L;
J := R;
P := (L + R) shr 1;
repeat
while AComparator(AList.GetObject(I), AList.GetObject(P)) < 0 do
Inc(I);
while AComparator(AList.GetObject(J), AList.GetObject(P)) > 0 do
Dec(J);
if I <= J then
begin
Obj := AList.GetObject(I);
AList.SetObject(I, AList.GetObject(J));
AList.SetObject(J, Obj);
if P = I then
P := J
else
if P = J then
P := I;
Inc(I);
Dec(J);
end;
until I > J;
if L < J then
QuickSort(AList, L, J, AComparator);
L := I;
until I >= R;
end;
procedure Sort(AList: IJclIntfList; First, Last: Integer; AComparator: TIntfCompare);
begin
IntfSortProc(AList, First, Last, AComparator);
end;
procedure Sort(AList: IJclStrList; First, Last: Integer; AComparator: TStrCompare);
begin
StrSortProc(AList, First, Last, AComparator);
end;
procedure Sort(AList: IJclList; First, Last: Integer; AComparator: TCompare);
begin
SortProc(AList, First, Last, AComparator);
end;
// History:
// $Log: JclAlgorithms.pas,v $
// Revision 1.5 2005/03/02 17:51:15 rrossmair
// - removed DCLAppendDelimited from JclAlgorithms, changed uses clauses accordingly
//
// Revision 1.4 2005/03/02 09:59:30 dade2004
// Added
// -TJclStrCollection in JclContainerIntf
// Every common methods for IJclStrCollection are implemented here
//
// -Every class that implement IJclStrCollection now derive from TJclStrCollection instead of TJclAbstractContainer
// -Every abstract method in TJclStrCollection has been marked as "override" in descendent classes
//
// DCLAppendDelimited has been removed from JclAlgorothms, his body has been fixed for a bug and put into
// relative method in TJclStrCollection
//
// Revision 1.3 2005/02/27 07:27:47 marquardt
// changed interface names from I to IJcl, moved resourcestrings to JclResource.pas
//
// Revision 1.2 2005/02/24 07:36:24 marquardt
// resolved the compiler warnings, style cleanup, removed code from JclContainerIntf.pas
//
// Revision 1.1 2005/02/24 03:57:10 rrossmair
// - donated DCL code, initial check-in
//
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -