Просмотр исходного кода

packages: add enumerator for TFields class

git-svn-id: trunk@14065 -
paul 16 лет назад
Родитель
Сommit
7db712c566
2 измененных файлов с 39 добавлено и 0 удалено
  1. 14 0
      packages/fcl-db/src/base/db.pas
  2. 25 0
      packages/fcl-db/src/base/fields.inc

+ 14 - 0
packages/fcl-db/src/base/db.pas

@@ -992,6 +992,19 @@ type
     property Items[Index: Longint]: TCheckConstraint read GetItem write SetItem; default;
   end;
 
+  { TFieldsEnumerator }
+
+  TFieldsEnumerator = class
+  private
+    FPosition: Integer;
+    FFields: TFields;
+    function GetCurrent: TField;
+  public
+    constructor Create(AFields: TFields);
+    function MoveNext: Boolean;
+    property Current: TField read GetCurrent;
+  end;
+
 { TFields }
 
   Tfields = Class(TObject)
@@ -1019,6 +1032,7 @@ type
       Function FindField (Const Value : String) : TField;
       Function FieldByName (Const Value : String) : TField;
       Function FieldByNumber(FieldNo : Integer) : TField;
+      Function GetEnumerator: TFieldsEnumerator;
       Procedure GetFieldNames (Values : TStrings);
       Function IndexOf(Field : TField) : Longint;
       procedure Remove(Value : TField);

+ 25 - 0
packages/fcl-db/src/base/fields.inc

@@ -2796,6 +2796,25 @@ begin
   SetData(@aValue);
 end;
 
+{ TFieldsEnumerator }
+
+function TFieldsEnumerator.GetCurrent: TField;
+begin
+  Result := FFields[FPosition];
+end;
+
+constructor TFieldsEnumerator.Create(AFields: TFields);
+begin
+  inherited Create;
+  FFields := AFields;
+  FPosition := -1;
+end;
+
+function TFieldsEnumerator.MoveNext: Boolean;
+begin
+  inc(FPosition);
+  Result := FPosition < FFields.Count;
+end;
 
 { TFields }
 
@@ -2955,6 +2974,12 @@ begin
       end;
 end;
 
+Function TFields.GetEnumerator: TFieldsEnumerator;
+
+begin
+  Result:=TFieldsEnumerator.Create(Self);
+end;
+
 Procedure TFields.GetFieldNames (Values : TStrings);
 
 Var i : longint;