[fpc-pascal] TFPHashList help
Graeme Geldenhuys
graemeg.lists at gmail.com
Tue Oct 3 10:47:40 CEST 2006
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 -
More information about the fpc-pascal
mailing list