note
	description: "Concrete of an external iteration cursor for LINKED_LIST. Reversed traversal has a (n (n + 1)) / 2 operations cost."
	library: "EiffelBase: Library of reusable components for Eiffel."
	status: "See notice at end of class."
	legal: "See notice at end of class."
	copyright: "Copyright (c) 1984-2011, Eiffel Software and others"
	license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
	date: "$Date: 2016-04-13 13:29:38 +0000 (Wed, 13 Apr 2016) $"
	revision: "$Revision: 98619 $"

class 
	LINKED_LIST_ITERATION_CURSOR [G]

inherit
	READABLE_INDEXABLE_ITERATION_CURSOR [G]
		redefine
			after,
			forth,
			item,
			start,
			target
		end

create 
	make

feature -- Access

	item: G
			-- Item at current cursor position.
		do
			if is_reversed then
				Result := Precursor
			else
				check
					active_attached: attached active as l_active
				then
					Result := l_active.item
				end
			end
		end
	
feature -- Status report

	after: BOOLEAN
			-- Are there no more items to iterate over?
		do
			if is_reversed then
				Result := Precursor
			else
				Result := not is_valid or active = Void
			end
		end
	
feature -- Cursor movement

	start
			-- Move to first position.
		do
			Precursor
			if not is_reversed then
				active := target.first_element
			end
		end

	forth
			-- Move to next position.
		local
			i: like step
		do
			Precursor
			if not is_reversed then
				from
					i := 1
				until
					i > step or else not attached active as l_active
				loop
					active := l_active.right
					i := i + 1
				end
			end
		end
	
feature {ITERABLE, ITERATION_CURSOR} -- Access

	target: LINKED_LIST [G]
			-- Associated structure used for iteration.
	
feature {NONE} -- Access

	active: detachable LINKABLE [G]
			-- Currrently active linkable node for ascending traversal
	
note
	copyright: "Copyright (c) 1984-2016, Eiffel Software and others"
	license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
	source: "[
		Eiffel Software
		5949 Hollister Ave., Goleta, CA 93117 USA
		Telephone 805-685-1006, Fax 805-685-6869
		Website http://www.eiffel.com
		Customer support http://support.eiffel.com
	]"

end -- class LINKED_LIST_ITERATION_CURSOR

Generated by ISE EiffelStudio