From cecea651b2fbaf8c9b53750fb5f05df5c243a401 Mon Sep 17 00:00:00 2001 From: michael Date: Fri, 14 Dec 2012 14:56:42 +0000 Subject: [PATCH] * Expose ForeachCall functionality in new Iterate call, but keep backwards compatibiliy git-svn-id: trunk@23144 - --- packages/fcl-base/src/contnrs.pp | 61 ++++++++++++++++++++++++++------ 1 file changed, 51 insertions(+), 10 deletions(-) diff --git a/packages/fcl-base/src/contnrs.pp b/packages/fcl-base/src/contnrs.pp index 0b10082a38..91a404775d 100644 --- a/packages/fcl-base/src/contnrs.pp +++ b/packages/fcl-base/src/contnrs.pp @@ -413,8 +413,9 @@ type Procedure AddNode(ANode : THTCustomNode); override; procedure SetData(const index: string; const AValue: Pointer); virtual; function GetData(const index: string):Pointer; virtual; + function ForEachCall(aMethod: TDataIteratorMethod): THTDataNode; virtual; Public - function ForEachCall(aMethod: TDataIteratorMethod): Pointer; virtual; + function Iterate(aMethod: TDataIteratorMethod): Pointer; virtual; procedure Add(const aKey: string; AItem: pointer); virtual; property Items[const index: string]: Pointer read GetData write SetData; default; end; @@ -434,8 +435,9 @@ type Procedure AddNode(ANode : THTCustomNode); override; procedure SetData(const Index, AValue: string); virtual; function GetData(const index: string): String; virtual; + function ForEachCall(aMethod: TStringIteratorMethod): THTStringNode; virtual; Public - function ForEachCall(aMethod: TStringIteratorMethod): String; virtual; + function Iterate(aMethod: TStringIteratorMethod): String; virtual; procedure Add(const aKey,aItem: string); virtual; property Items[const index: string]: String read GetData write SetData; default; end; @@ -464,10 +466,11 @@ type Procedure AddNode(ANode : THTCustomNode); override; procedure SetData(const Index: string; AObject : TObject); virtual; function GetData(const index: string): TObject; virtual; + function ForEachCall(aMethod: TObjectIteratorMethod): THTObjectNode; virtual; Public constructor Create(AOwnsObjects : Boolean = True); constructor CreateWith(AHashTableSize: Longword; aHashFunc: THashFunction; AOwnsObjects : Boolean = True); - function ForEachCall(aMethod: TObjectIteratorMethod): TObject; virtual; + function Iterate(aMethod: TObjectIteratorMethod): TObject; virtual; procedure Add(const aKey: string; AItem : TObject); virtual; property Items[const index: string]: TObject read GetData write SetData; default; Property OwnsObjects : Boolean Read FOwnsObjects Write FOwnsObjects; @@ -2234,7 +2237,20 @@ begin Result:=THTDataNode.CreateWith(aKey); end; -function TFPDataHashTable.ForEachCall(aMethod: TDataIteratorMethod): Pointer; +function TFPDataHashTable.Iterate(aMethod: TDataIteratorMethod): Pointer; + +Var + N : THTDataNode; + +begin + N:=ForEachCall(AMethod); + if Assigned(N) then + Result:=N.Data + else + Result:=Nil; +end; + +function TFPDataHashTable.ForEachCall(aMethod: TDataIteratorMethod): THTDataNode; var i, j: Longword; continue: boolean; @@ -2252,7 +2268,7 @@ begin aMethod(THTDataNode(Chain(i)[j]).Data, THTDataNode(Chain(i)[j]).Key, continue); if not continue then begin - Result := THTDataNode(Chain(i)[j]).Data; + Result := THTDataNode(Chain(i)[j]); Exit; end; end; @@ -2310,13 +2326,25 @@ begin Result:=THTStringNode.CreateWith(aKey); end; +function TFPStringHashTable.Iterate(aMethod: TStringIteratorMethod): String; -function TFPStringHashTable.ForEachCall(aMethod: TStringIteratorMethod): String; +Var + N : THTStringNode; + +begin + N:=ForEachCall(AMethod); + if Assigned(N) then + Result:=N.Data + else + Result:=''; +end; + +function TFPStringHashTable.ForEachCall(aMethod: TStringIteratorMethod): THTStringNode; var i, j: Longword; continue: boolean; begin - Result := ''; + Result := Nil; continue := true; if FHashTableSize>0 then for i := 0 to FHashTableSize-1 do @@ -2329,7 +2357,7 @@ begin aMethod(THTStringNode(Chain(i)[j]).Data, THTStringNode(Chain(i)[j]).Key, continue); if not continue then begin - Result := THTStringNode(Chain(i)[j]).Data; + Result := THTStringNode(Chain(i)[j]); Exit; end; end; @@ -2384,7 +2412,20 @@ begin end; -function TFPObjectHashTable.ForEachCall(aMethod: TObjectIteratorMethod): TObject; +function TFPObjectHashTable.Iterate(aMethod: TObjectIteratorMethod): TObject; + +Var + N : THTObjectNode; + +begin + N:=ForEachCall(AMethod); + if Assigned(N) then + Result:=N.Data + else + Result:=Nil; +end; + +function TFPObjectHashTable.ForEachCall(aMethod: TObjectIteratorMethod): THTObjectNode; var i, j: Longword; continue: boolean; @@ -2402,7 +2443,7 @@ begin aMethod(THTObjectNode(Chain(i)[j]).Data, THTObjectNode(Chain(i)[j]).Key, continue); if not continue then begin - Result := THTObjectNode(Chain(i)[j]).Data; + Result := THTObjectNode(Chain(i)[j]); Exit; end; end;