[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