indexing
	description: "Implementation of `IEnumXXXX' Interface."
	date: "$Date$"
	revision: "$Revision$"

class interface
	IENUM_IMPL [G]

create 

	make (enumeration: like implementation)
			-- Initialization.
		require
			non_void_enumeration: enumeration /= void

feature -- Basic Operations

	clone1 (ppenum: CELL [like Current])
			-- Creates another enumerator that contains the
			-- same enumeration state as the current one.
			-- Using this function, a client can record a
			-- particular point in the enumeration sequence
			-- and then return to that point at a later time.
			-- The new enumerator supports the same interface
			-- as the original one.
			-- ppenum [out].

	next (celt: INTEGER; rgelt: ARRAY [G]; pcelt_fetched: INTEGER_REF)
			-- Retrieves the next celt items in
			-- the enumeration sequence.
			-- If there are fewer than the requested number
			-- of elements left in the sequence, it retrieves
			-- the remaining elements. The number of elements
			-- actually retrieved is returned through
			-- pcelt_fetched (unless the caller passed in
			-- Void for that parameter).
			--
			-- celt [in] Number of elements being requested.
			-- rgelt [out] Array of size celt (or larger)
			-- of the elements of interest. The type of this
			-- parameter depends on the item being enumerated.
			-- Array index starts from 1.
			-- pcelt_fetched [out] Reference to the number of
			-- elements actually supplied in rgelt. Caller can
			-- pass in Void if celt is one.

	reset
			-- Resets the enumeration sequence to the beginning.

	skip (celt: INTEGER)
			-- Skips over the next specified number of
			-- elements in the enumeration sequence.
			-- celt [in] Number of elements to be skipped.
	
invariant

	implementation_exists: implementation_exists
		-- from ANY
	reflexive_equality: standard_is_equal (Current)
	reflexive_conformance: conforms_to (Current)

end -- class IENUM_IMPL