115 lines
1.9 KiB
ObjectPascal
115 lines
1.9 KiB
ObjectPascal
{
|
|
Inno Setup Preprocessor
|
|
Copyright (C) 2001-2002 Alex Yackimoff
|
|
|
|
Inno Setup
|
|
Copyright (C) 1997-2020 Jordan Russell
|
|
Portions by Martijn Laan
|
|
For conditions of distribution and use, see LICENSE.TXT.
|
|
}
|
|
|
|
unit ISPP.Stack;
|
|
|
|
interface
|
|
|
|
uses Classes;
|
|
|
|
type
|
|
|
|
{ Borrowed from Delphi 5 Contnrs unit }
|
|
|
|
{ TOrdered class }
|
|
|
|
TOrderedList = class(TObject)
|
|
private
|
|
FList: TList;
|
|
protected
|
|
procedure PushItem(AItem: Pointer); virtual; abstract;
|
|
function PopItem: Pointer; virtual;
|
|
function PeekItem: Pointer; virtual;
|
|
property List: TList read FList;
|
|
public
|
|
constructor Create;
|
|
destructor Destroy; override;
|
|
|
|
function Count: Integer;
|
|
function AtLeast(ACount: Integer): Boolean;
|
|
procedure Push(AItem: Pointer);
|
|
function Pop: Pointer;
|
|
function Peek: Pointer;
|
|
end;
|
|
|
|
{ TStack class }
|
|
|
|
TStack = class(TOrderedList)
|
|
protected
|
|
procedure PushItem(AItem: Pointer); override;
|
|
end;
|
|
|
|
|
|
implementation
|
|
|
|
uses
|
|
ISPP.Consts;
|
|
|
|
{ TOrderedList }
|
|
|
|
function TOrderedList.AtLeast(ACount: integer): boolean;
|
|
begin
|
|
Result := List.Count >= ACount;
|
|
end;
|
|
|
|
function TOrderedList.Peek: Pointer;
|
|
begin
|
|
Result := PeekItem;
|
|
end;
|
|
|
|
function TOrderedList.Pop: Pointer;
|
|
begin
|
|
Result := PopItem;
|
|
end;
|
|
|
|
procedure TOrderedList.Push(AItem: Pointer);
|
|
begin
|
|
PushItem(AItem);
|
|
end;
|
|
|
|
function TOrderedList.Count: Integer;
|
|
begin
|
|
Result := List.Count;
|
|
end;
|
|
|
|
constructor TOrderedList.Create;
|
|
begin
|
|
inherited Create;
|
|
FList := TList.Create;
|
|
end;
|
|
|
|
destructor TOrderedList.Destroy;
|
|
begin
|
|
List.Free;
|
|
inherited Destroy;
|
|
end;
|
|
|
|
function TOrderedList.PeekItem: Pointer;
|
|
begin
|
|
Result := List[List.Count-1];
|
|
end;
|
|
|
|
function TOrderedList.PopItem: Pointer;
|
|
begin
|
|
Result := PeekItem;
|
|
List.Delete(List.Count-1);
|
|
end;
|
|
|
|
{ TStack }
|
|
|
|
procedure TStack.PushItem(AItem: Pointer);
|
|
begin
|
|
List.Add(AItem);
|
|
end;
|
|
|
|
|
|
end.
|
|
|