note description: "An external iteration cursor for {HASH_TABLE}." library: "EiffelBase: Library of reusable components for Eiffel." status: "See notice at end of class." legal: "See notice at end of class." date: "$Date: 2017-02-27 13:20:16 +0000 (Mon, 27 Feb 2017) $" revision: "$Revision: 99873 $" class HASH_TABLE_ITERATION_CURSOR [G, K -> detachable HASHABLE] inherit READABLE_INDEXABLE_ITERATION_CURSOR [G] rename target_index as iteration_position redefine after, cursor_index, forth, item, target end TABLE_ITERATION_CURSOR [G, K] create make feature -- Access item: G -- Item at current cursor position. do Result := target.content [iteration_position] end key: K -- Key at current cursor position do Result := target.keys [iteration_position] end cursor_index: INTEGER_32 -- Index position of cursor in the iteration. local p: like iteration_position n: like step i: like iteration_position do i := iteration_position n := 1 if is_reversed then from p := target.keys.count until p <= i loop p := target.previous_iteration_position (p) n := n - 1 if n = 0 then Result := Result + 1 n := step end end else from p := -1 until p >= i loop p := target.next_iteration_position (p) n := n - 1 if n = 0 then Result := Result + 1 n := step end end end if 0 < n and then n < step then Result := Result + 1 end end feature -- Status report after: BOOLEAN -- Are there no more items to iterate over? local l_pos: like iteration_position do l_pos := iteration_position Result := not is_valid or l_pos < 0 or l_pos >= target.keys.count end feature -- Cursor movement forth -- Move to next position. local i, nb: like step l_pos: like iteration_position do l_pos := iteration_position nb := step if is_reversed then from i := 1 until i > nb or else l_pos < 0 loop l_pos := target.previous_iteration_position (l_pos) i := i + 1 end else from i := 1 until i > nb or else l_pos >= target.keys.count loop l_pos := target.next_iteration_position (l_pos) i := i + 1 end end iteration_position := l_pos end feature {ITERABLE, ITERATION_CURSOR} -- Access target: HASH_TABLE [G, K] -- Associated structure used for iteration. note copyright: "Copyright (c) 1984-2017, 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 HASH_TABLE_ITERATION_CURSOR
Generated by ISE EiffelStudio