Initial check in rtl
This commit is contained in:
@@ -0,0 +1,157 @@
|
||||
unit dpgrtl.tokenqueue;
|
||||
|
||||
interface
|
||||
uses
|
||||
System.Classes,
|
||||
dpgrtl.types;
|
||||
|
||||
type
|
||||
TTokenQueue = class( TInterfacedObject)
|
||||
private
|
||||
fItems : TInterfaceList;
|
||||
|
||||
private
|
||||
function GetCount : integer;
|
||||
function GetItem(i:integer): IToken;
|
||||
procedure SetItem(i:integer;value:IToken);
|
||||
|
||||
public
|
||||
procedure Clear;
|
||||
procedure Add( Item: IToken);
|
||||
procedure Remove( Num: integer=1);
|
||||
|
||||
public
|
||||
procedure AfterConstruction; override;
|
||||
procedure BeforeDestruction; override;
|
||||
|
||||
public
|
||||
property Count : integer read GetCount;
|
||||
property Items[i:integer] : IToken read GetItem write SetItem;
|
||||
end;
|
||||
|
||||
implementation
|
||||
uses
|
||||
System.SysUtils;
|
||||
|
||||
{ TTokenQueue }
|
||||
|
||||
// @@@: Construction/destruction ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
//
|
||||
// Construction/destruction
|
||||
//
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ================================================================================================
|
||||
// After Construction
|
||||
// ================================================================================================
|
||||
procedure TTokenQueue.AfterConstruction;
|
||||
begin
|
||||
inherited;
|
||||
|
||||
fItems := TInterfaceList.Create;
|
||||
end;
|
||||
|
||||
// ================================================================================================
|
||||
// Before Destruction
|
||||
// ================================================================================================
|
||||
procedure TTokenQueue.BeforeDestruction;
|
||||
begin
|
||||
FreeAndNil(fItems);
|
||||
inherited;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
// @@@: Interface +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
//
|
||||
// Interface
|
||||
//
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ================================================================================================
|
||||
// Clear
|
||||
// ================================================================================================
|
||||
procedure TTokenQueue.Clear;
|
||||
begin
|
||||
fItems.Clear;
|
||||
end;
|
||||
|
||||
// ================================================================================================
|
||||
// Add
|
||||
// ================================================================================================
|
||||
procedure TTokenQueue.Add(Item: IToken);
|
||||
begin
|
||||
if Assigned(Item) then
|
||||
fItems.Add(Item)
|
||||
end;
|
||||
|
||||
// ================================================================================================
|
||||
// Remove
|
||||
// ================================================================================================
|
||||
procedure TTokenQueue.Remove(Num: integer);
|
||||
var
|
||||
i: integer;
|
||||
|
||||
begin
|
||||
if Num > 0 then
|
||||
begin
|
||||
if Num >= fItems.Count then
|
||||
fItems.Clear
|
||||
|
||||
else
|
||||
for i:=0 to Num -1 do
|
||||
fItems.Delete(0)
|
||||
end
|
||||
end;
|
||||
|
||||
|
||||
|
||||
// @@@: Property Handlers +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
//
|
||||
// Property Handlers
|
||||
//
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
// ================================================================================================
|
||||
// Get Count
|
||||
// ================================================================================================
|
||||
function TTokenQueue.GetCount: integer;
|
||||
begin
|
||||
result := fItems.Count
|
||||
end;
|
||||
|
||||
// ================================================================================================
|
||||
// Get Item
|
||||
// ================================================================================================
|
||||
function TTokenQueue.GetItem(i: integer): IToken;
|
||||
begin
|
||||
// -------------------------------------------------------------------------
|
||||
// Check for valid index value.
|
||||
// -------------------------------------------------------------------------
|
||||
if i > fItems.Count then raise ERangeError.CreateFmt( 'Index "%d" is too big', [i]);
|
||||
if i < 0 then raise ERangeError.CreateFmt( 'Index is less than 0', []);
|
||||
|
||||
result := fItems[i] as IToken
|
||||
end;
|
||||
|
||||
// ================================================================================================
|
||||
// Set Item
|
||||
// ================================================================================================
|
||||
procedure TTokenQueue.SetItem(i: integer; value: IToken);
|
||||
begin
|
||||
if i > fItems.Count then raise ERangeError.CreateFmt( 'Index "%d" is too big', [i]);
|
||||
if i < 0 then raise ERangeError.CreateFmt( 'Index is less than 0', []);
|
||||
|
||||
fItems.Items[i] := value
|
||||
end;
|
||||
|
||||
end.
|
||||
Reference in New Issue
Block a user