[fpc-pascal] Re: TFPHashList help

Graeme Geldenhuys graemeg.lists at gmail.com
Tue Oct 3 10:51:56 CEST 2006


Sorry, I forgot to mention...  TFPHashTable.Items[] doesn't take a
integer, but a string. Which I believe is the 'key', so I can't loop
through the list.

Graeme.


On 03/10/06, Graeme Geldenhuys <graemeg.lists at gmail.com> wrote:
> Hi,
>
> I have the following class and function that retrieves a object from a
> internal TFPHashList. If the object isn't in the list, it is read from
> a database, and then also inserted into the hashlist, before it gets
> returned.
>
> Does TFPHashTable also manage the objects it contains (or references)
> like TObjectList.  If not (which I think it doesn't), that means when
> TModuleFlyweightFactory gets destroyed, I need to free and empty the
> internal TFPHashTable as well.  I'm not sure how I would to that
> though.  Can is loop through the hashtable using the Items[] property
> to free off the referenced object. Set that same Item to nil, and then
> in the end, just .Free the FPHashTable?
>
>
> interface section:
>
>   TModuleFlyweightFactory = class(TObject)
>   private
>     FList: TFPHashTable;
>     function GetModuleCount: integer;
>   public
>     constructor Create;
>     destructor  Destroy; override;
>     function    GetModule(pOID: TOID): TModule; overload;
>     function    GetModule(pOIDAsString: string): TModule; overload;
>     property    ModuleCount: integer read GetModuleCount;
>   end;
>
>
> implementation section:
>
> function TModuleFlyweightFactory.GetModule(pOID: TOID): TModule;
> var
>   lData: TModule;
> begin
>   lData := TModule(FList.Items[pOID.AsString]);
>   if lData <> nil then
>     Result := lData
>   else
>   begin
>     lData := TModule.Create;
>     lData.OID.AsString := pOID.AsString;
>     lData.ReadPK;
>
>     if lData.ObjectState <> posEmpty then
>       FList.Add(lData.OID.AsString, lData);  // only add if we know we
> have something
>     Result := lData;
>   end;
> end;
>
>
> Regards,
>   - Graeme -
>


-- 
There's no place like 127.0.0.1



More information about the fpc-pascal mailing list