Can someone suggest a better way to do that?

Now Im using:


 THashedInterfaceList = class(TInterfacedObject, IHashedInterfaceList)
 private
   FList: THashedStringList;
 protected
   function Add(const Name: string; const Item: IInterface): Integer;
   function GetCount: Integer;
   function GetItem(const Name: string): IInterface;
   function GetItems(const Index: Integer): IInterface;

   function IndexOf(const Name: string): Integer;
   function IndexOfItem(const Item: IInterface): Integer;
   procedure Clear;
   procedure Delete(const Index: Integer);

   property Item[const Name: string]: IInterface read GetItem;
   property Items[const Index: Integer]: IInterface read GetItems; default;
   property Count: Integer read GetCount;
 public
   constructor Create(const SortList: boolean = False); virtual;
   destructor Destroy; override;
 end;

function THashedInterfaceList.Add(const Name: string;
 const Item: IInterface): Integer;
begin
 Result:= FList.AddObject(Name, Pointer(Item));
end;

procedure THashedInterfaceList.Clear;
begin
 FList.Clear;
end;

constructor THashedInterfaceList.Create(const SortList: boolean);
begin
 inherited Create;
 FList:= THashedStringList.Create;
 FList.Duplicates:= dupError;
 FList.Sorted:= SortList;
end;

procedure THashedInterfaceList.Delete(const Index: Integer);
begin
 FList.Delete(Index);
end;

destructor THashedInterfaceList.Destroy;
begin
 FList.Free;
 inherited;
end;

function THashedInterfaceList.GetCount: Integer;
begin
 Result:= FList.Count;
end;

function THashedInterfaceList.GetItem(const Name: string): IInterface;
begin
 Result:= Items[IndexOf(Name)];
end;

function THashedInterfaceList.GetItems(const Index: Integer): IInterface;
var
 LItem: Pointer;
begin
 if (Index <> NotFound) and (Index < Count) then
   LItem:= FList.Objects[Index]
 else
   LItem:= nil;

 Result:= IInterface(LItem);
end;

function THashedInterfaceList.IndexOf(const Name: string): Integer;
begin
 Result:= FList.IndexOf(Name);
end;

function THashedInterfaceList.IndexOfItem(const Item: IInterface): Integer;
begin
 Result:= FList.IndexOfObject(Pointer(Item));
end;

_________________________________________________________________
    To unsubscribe: mail [EMAIL PROTECTED] with
               "unsubscribe" as the Subject
  archives at http://www.lazarus.freepascal.org/mailarchives

Reply via email to