### Bookstore

 Computer Math and Games in Pascal (preview) Lazarus Handbook (preview only)

### Author Topic: Enumerator pass direct reference via for x in statement  (Read 2424 times)

#### stefc

• Newbie
• Posts: 2
##### Enumerator pass direct reference via for x in statement
« on: January 09, 2015, 08:21:38 am »
I have written a enumerator class for a Polygon record that yields the edges.
<code>
type
THexagonEnumerator = class(TPolygonEnumerator)
private
fPolygon: THexagon;
fCurrent: Integer;
protected
function GetCurrent: TLine; override;
public
constructor Create(const aPolygon: THexagon);
function MoveNext: Boolean; override;
end;

constructor THexagonEnumerator.Create(const aPolygon: THexagon);
begin
inherited Create;
fPolygon := aPolygon;
fCurrent := -1;
end;

function THexagonEnumerator.MoveNext: Boolean;
begin
Inc(fCurrent);
Result := FCurrent <= 5;
end;

function THexagonEnumerator.GetCurrent: TLine;
begin
Result := Line(
fPolygon[fCurrent].x,
fPolygon[fCurrent].y,
fPolygon[(fCurrent+1) mod 6].x,
fPolygon[(fCurrent+1) mod 6].y);
end;

operator Enumerator(const aHexagon: THexagon): TPolygonEnumerator;
begin
Result := THexagonEnumerator.Create(aHexagon);
end;
</code>

Now I can fine use it via :

var
polygon: THexagon;
edge: TLine;
begin
polygon := Hexagon(18,15);
for edge in polygon do
...

What I needed is that I can create the TPolygonEnumerator myself, so I can use different enumerator's for the same Type.

var
enumerator : TPolygonEnumerator;
edge : TLine;

for edge in TPolygonEnumerator.Create(Hexagon(x,y)) do

How can I do such stuff ? It seems to me that the compiler not expected a direct reference of a Enumerator class

Stefc

#### howardpc

• Hero Member
• Posts: 3203
##### Re: Enumerator pass direct reference via for x in statement
« Reply #1 on: January 09, 2015, 09:23:44 am »
If you use a TFPList to store your data, it has enumerator support built in.
You simply need to call GetEnumerator to have Current and MoveNext methods.

#### stefc

• Newbie
• Posts: 2
##### Re: Enumerator pass direct reference via for x in statement
« Reply #2 on: January 09, 2015, 09:33:27 am »
If you use a TFPList to store your data, it has enumerator support built in.
You simply need to call GetEnumerator to have Current and MoveNext methods.

The Type on which I iterate is defined as a simple array :

PHexagon = ^THexagon;
THexagon = array[0..5] of TPoint;

in my case I don't use much of the internal classes