Operator For (Iteration)

Declares or defines operators used by a KeyPgFornextFor...Next loop with user defined 
type variables

Syntax
	{ KeyPgTypeType | KeyPgClassClass | KeyPgUnionUnion } typename
		KeyPgDeclareDeclare KeyPgOperatorOperator For ()
		KeyPgDeclareDeclare KeyPgOperatorOperator For ( [ KeyPgByrefByRef | KeyPgByvalByVal ] stp KeyPgAsAs typename )
		...
	End { KeyPgTypeType | KeyPgClassClass | KeyPgUnionUnion }

Usage
	KeyPgFornextFor iterator [ As typename ] = start_value To end_value [ KeyPgFornextStep 
	step_value ]
		[ ...statements... ]
	KeyPgFornextNext

Parameters
(including arguments)
	typename
		name of the KeyPgTypeType, KeyPgClassClass, or KeyPgUnionUnion
	stp, step_value
		a typename object used as an incremental value
	iterator
		a typename object used as an iterator
	end_value
		a typename object used as a loop-terminating value
	start_value
		a typename object used to copy construct or assign to the iterator 
		initially

Description
	Operator For, KeyPgOpNextOperator Next and KeyPgOpStepOperator Step can be overloaded in 
	user-defined type definitions to allow objects of that type to be used 
	as iterators and step values in KeyPgFornextFor...Next loops.
	As all non-static member procedures, they have passed a hidden KeyPgThisThis 
	parameter that allows to access by reference to the iterator object in 
	the code body of the 3 operators.

	Operator For is called once after copy constructing or assigning to the 
	iterator object, and allows the object to perform any additional 
	initialization needed in preparation for the loop.

	The first version of Operator For is used if no step value is given in 
	the KeyPgFornextFor...Next statement. If a step value is given, the second version 
	is used and is passed the step value because eventual additional 
	initialization may use it.

	Advanced usage
		The above description seems to imply that the 3 arguments start_value
		, end_value, and step_value must be of the same type as the iterator 
		(this is the more obvious use), but it is not quite true:
			- The start_value, end_value, and step_value arguments can be of 
			any type (of different types among themselves and also of 
			different types from the one of the iterator).
			- The only constraint is that the iterator could be constructed 
			(in case of local iterator) or assigned (in case of global 
			iterator) from the start_value argument (because the iterator is 
			implicitly constructed or assigned under the hood).
			- Similarly the other parameters end_value, and step_value must be 
			able to be converted into objects of the same type as the iterator
			.

Example
	See the KeyPgOpStepOperator Step examples.

Dialect Differences
	* Only available in the CompilerOptlang-lang fb dialect.

See also
	* KeyPgOpNextOperator Next
	* KeyPgOpStepOperator Step
	* KeyPgFornextFor...Next

   
