    class
    	TWO_WAY_CHAIN_ITERATOR [G]

    General
    	cluster: base
    	description:
    		"Objects that are able to iterate over two-way chains,
    		on which they can perform repeated actions and tests according
    		to a number of predefined control structures such as ``if'',
    		``until'' and others."
    	create: set

    Ancestors
    	LINEAR_ITERATOR [G]
    	LINEAR_ITERATOR [G]

    Queries
    	exhausted: BOOLEAN
    	for_all (test: FUNCTION [ANY, TUPLE [G], BOOLEAN]): BOOLEAN
    	for_all_back (test: FUNCTION [ANY, TUPLE [G], BOOLEAN]): BOOLEAN
    	internal_item_tuple: TUPLE [G]
    	invariant_value: BOOLEAN
    	item: G
    	item_tuple: TUPLE [G]
    	off: BOOLEAN
    	target: CHAIN [G]
    	there_exists (test: FUNCTION [ANY, TUPLE [G], BOOLEAN]): BOOLEAN
    	there_exists_back (test: FUNCTION [ANY, TUPLE [G], BOOLEAN]): BOOLEAN

    Commands
    	back
    	continue_for (action: PROCEDURE [ANY, TUPLE [G]]; n, k: INTEGER_32)
    	continue_for_back (action: PROCEDURE [ANY, TUPLE [G]]; n, k: INTEGER_32)
    	continue_search (test: FUNCTION [ANY, TUPLE [G], BOOLEAN]; b: BOOLEAN)
    	continue_search_back (test: FUNCTION [ANY, TUPLE [G], BOOLEAN]; b: BOOLEAN)
    	continue_until (action: PROCEDURE [ANY, TUPLE [G]]; test: FUNCTION [ANY, TUPLE [G], BOOLEAN])
    	continue_until_back (action: PROCEDURE [ANY, TUPLE [G]]; test: FUNCTION [ANY, TUPLE [G], BOOLEAN])
    	continue_while (action: PROCEDURE [ANY, TUPLE [G]]; test: FUNCTION [ANY, TUPLE [G], BOOLEAN])
    	continue_while_back (action: PROCEDURE [ANY, TUPLE [G]]; test: FUNCTION [ANY, TUPLE [G], BOOLEAN])
    	do_all (action: PROCEDURE [ANY, TUPLE [G]])
    	do_all_back (action: PROCEDURE [ANY, TUPLE [G]])
    	do_for (action: PROCEDURE [ANY, TUPLE [G]]; i, n, k: INTEGER_32)
    	do_for_back (action: PROCEDURE [ANY, TUPLE [G]]; i, n, k: INTEGER_32)
    	do_if (action: PROCEDURE [ANY, TUPLE [G]]; test: FUNCTION [ANY, TUPLE [G], BOOLEAN])
    	do_if_back (action: PROCEDURE [ANY, TUPLE [G]]; test: FUNCTION [ANY, TUPLE [G], BOOLEAN])
    	do_until (action: PROCEDURE [ANY, TUPLE [G]]; test: FUNCTION [ANY, TUPLE [G], BOOLEAN])
    	do_until_back (action: PROCEDURE [ANY, TUPLE [G]]; test: FUNCTION [ANY, TUPLE [G], BOOLEAN])
    	do_while (action: PROCEDURE [ANY, TUPLE [G]]; test: FUNCTION [ANY, TUPLE [G], BOOLEAN])
    	do_while_back (action: PROCEDURE [ANY, TUPLE [G]]; test: FUNCTION [ANY, TUPLE [G], BOOLEAN])
    	finish
    	forth
    	search (test: FUNCTION [ANY, TUPLE [G], BOOLEAN]; b: BOOLEAN)
    	search_back (test: FUNCTION [ANY, TUPLE [G], BOOLEAN]; b: BOOLEAN)
    	set (s: [like target] CHAIN [G])
    	start
    	until_continue (action: PROCEDURE [ANY, TUPLE [G]]; test: FUNCTION [ANY, TUPLE [G], BOOLEAN])
    	until_continue_back (action: PROCEDURE [ANY, TUPLE [G]]; test: FUNCTION [ANY, TUPLE [G], BOOLEAN])
    	until_do (action: PROCEDURE [ANY, TUPLE [G]]; test: FUNCTION [ANY, TUPLE [G], BOOLEAN])
    	until_do_back (action: PROCEDURE [ANY, TUPLE [G]]; test: FUNCTION [ANY, TUPLE [G], BOOLEAN])
    	while_continue (action: PROCEDURE [ANY, TUPLE [G]]; test: FUNCTION [ANY, TUPLE [G], BOOLEAN])
    	while_continue_back (action: PROCEDURE [ANY, TUPLE [G]]; test: FUNCTION [ANY, TUPLE [G], BOOLEAN])
    	while_do (action: PROCEDURE [ANY, TUPLE [G]]; test: FUNCTION [ANY, TUPLE [G], BOOLEAN])
    	while_do_back (action: PROCEDURE [ANY, TUPLE [G]]; test: FUNCTION [ANY, TUPLE [G], BOOLEAN])