s2.tools.ts2dict.pas

来自「轉載的程序應用框架」· PAS 代码 · 共 104 行

PAS
104
字号
unit S2.Tools.TS2Dict;

interface

uses
  Classes, S2.Tools.TS2Object, S2.Tools.IS2DictItem, S2.Tools.TS2DictItem;

type
  TS2Dict = class;

  IS2Dict = interface
    function Find(const Name: string): TS2DictItem;
    function GetName(const Index: Integer): string;
    function GetCount: Integer;
    procedure Add(Dict: TS2Dict); overload;
    procedure Add(Item: TS2DictItem); overload;
  end;

  TS2Dict = class(TS2Object, IS2Dict)
  private 
    List: TList;
  public 
    function Find(const Name: string): TS2DictItem; virtual;
    function GetName(const Index: Integer): string;
    function GetCount: Integer; virtual;
    procedure Add(Dict: TS2Dict); overload; virtual;
    procedure Add(Item: TS2DictItem); overload; virtual;
  public
    constructor Create;
    destructor Destroy; override;
  end;

implementation

uses
  SysUtils, S2.Core.IS2Cloneable, S2.Error.S2Exception;

{ TS2Dict }

procedure TS2Dict.Add(Dict: TS2Dict);
var
  Index: Integer;
begin
  for Index := 0 to Dict.List.Count - 1 do
    List.Add(Dict.List.Items[Index]);
end;

procedure TS2Dict.Add(Item: TS2DictItem);
begin
  List.Add(Item);
end;

constructor TS2Dict.Create;
begin
  inherited;
  List := TList.Create;
end;

destructor TS2Dict.Destroy;
var
  DictItem: TS2DictItem;
begin
  while List.Count > 0 do
  begin
    DictItem := List.Items[0];
    List.Delete(0);
    FreeAndNil(DictItem);
  end;
  FreeAndNil(List); 
end;

function TS2Dict.Find(const Name: string): TS2DictItem;
var
  Index: Integer;
  DictItem: TS2DictItem;
begin
  Result := nil;
  for Index := 0 to List.Count - 1 do
  begin
    DictItem := List.Items[Index];
    if DictItem.GetName = Name then
    begin
      Result := DictItem;
      Exit;
    end;
  end;   
end;

function TS2Dict.GetCount: Integer;
begin
  Result := List.Count;
end;

function TS2Dict.GetName(const Index: Integer): string;
begin
  try
    Result := TS2DictItem(List.Items[Index]).GetName;
  except
    on E: Exception do
      raise S2Exception.Create(ClassName, 'GetName', E.Message);
  end;
end;

end.

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?