    class
    	TWO_WAY_TREE [G]

    General
    	cluster: base
    	description: "Trees implemented using a two way linked list representation"
    	create: twl_make, make_sublist, make

    Ancestors
    	BI_LINKABLE [G]
    	DYNAMIC_TREE* [G]
    	TWO_WAY_LIST [G]

    Queries
    	arity: INTEGER_32
    	binary_representation: BINARY_TREE [G]
    	changeable_comparison_criterion: BOOLEAN
    	child: [like first_child] TWO_WAY_TREE [G]
    	child_after: BOOLEAN
    	child_before: BOOLEAN
    	child_capacity: INTEGER_32
    	child_cursor: TWO_WAY_TREE_CURSOR [G]
    	Child_extendible: BOOLEAN
    	child_index: INTEGER_32
    	child_isfirst: BOOLEAN
    	child_islast: BOOLEAN
    	child_item: G
    	child_off: BOOLEAN
    	child_readable: BOOLEAN
    	child_writable: BOOLEAN
    	count: INTEGER_32
    	duplicate (n: INTEGER_32): [like Current] TWO_WAY_TREE [G]
    	exhausted: BOOLEAN
    	Extendible: BOOLEAN
    	first: [like child_item] G
    	first_child: [like parent] TWO_WAY_TREE [G]
    	for_all (test: FUNCTION [ANY, TUPLE [G], BOOLEAN]): BOOLEAN
    	has (v: G): BOOLEAN
    	i_th alias "[]" (i: INTEGER_32): [like child_item] G
    	index_of (v: [like child_item] G; i: INTEGER_32): INTEGER_32
    	index_set: INTEGER_INTERVAL
    	infix "@" (i: INTEGER_32): [like child_item] G
    	is_empty: BOOLEAN
    	is_equal (other: [like Current] TWO_WAY_TREE [G]): BOOLEAN
    	is_inserted (v: G): BOOLEAN
    	is_leaf: BOOLEAN
    	is_root: BOOLEAN
    	is_sibling (other: [like parent] TWO_WAY_TREE [G]): BOOLEAN
    	item: G
    	last: [like child_item] G
    	last_child: [like parent] TWO_WAY_TREE [G]
    	left_sibling: [like Current] TWO_WAY_TREE [G]
    	linear_representation: LINEAR [G]
    	node_is_equal (other: [like Current] TWO_WAY_TREE [G]): BOOLEAN
    	object_comparison: BOOLEAN
    	occurrences (v: [like child_item] G): INTEGER_32
    	parent: TWO_WAY_TREE [G]
    	prunable: BOOLEAN
    	Readable: BOOLEAN
    	readable_child: BOOLEAN
    	right_sibling: [like Current] TWO_WAY_TREE [G]
    	sequential_occurrences (v: [like child_item] G): INTEGER_32
    	sublist: [like Current] TWO_WAY_TREE [G]
    	there_exists (test: FUNCTION [ANY, TUPLE [G], BOOLEAN]): BOOLEAN
    	valid_cursor (p: CURSOR): BOOLEAN
    	valid_cursor_index (i: INTEGER_32): BOOLEAN
    	valid_index (i: INTEGER_32): BOOLEAN
    	Writable: BOOLEAN
    	writable_child: BOOLEAN

    Commands
    	append (s: SEQUENCE [G])
    	child_back
    	child_extend (v: [like child_item] G)
    	child_finish
    	child_forth
    	child_go_i_th (i: INTEGER_32)
    	child_go_to (p: CURSOR)
    	child_put (v: [like child_item] G)
    	child_put_left (v: [like child_item] G)
    	child_put_right (v: [like child_item] G)
    	child_replace (v: [like child_item] G)
    	child_start
    	compare_objects
    	compare_references
    	copy (other: [like Current] TWO_WAY_TREE [G])
    	do_all (action: PROCEDURE [ANY, TUPLE [G]])
    	do_if (action: PROCEDURE [ANY, TUPLE [G]]; test: FUNCTION [ANY, TUPLE [G], BOOLEAN])
    	extend (v: [like item] G)
    	fill (other: TREE [G])
    	fill_from_binary (b: BINARY_TREE [G])
    	force (v: [like child_item] G)
    	forget_left
    	forget_right
    	make (v: [like item] G)
    	merge_tree_after (other: [like first_child] TWO_WAY_TREE [G])
    	merge_tree_before (other: [like first_child] TWO_WAY_TREE [G])
    	move (i: INTEGER_32)
    	prune (n: [like first_child] TWO_WAY_TREE [G])
    	prune_all (v: [like child_item] G)
    	put (v: [like item] G)
    	put_child (n: [like parent] TWO_WAY_TREE [G])
    	put_child_left (n: [like parent] TWO_WAY_TREE [G])
    	put_child_right (n: [like parent] TWO_WAY_TREE [G])
    	put_front (v: [like child_item] G)
    	put_i_th (v: [like child_item] G; i: INTEGER_32)
    	remove_child
    	remove_left_child
    	remove_right_child
    	remove_sublist
    	replace (v: [like item] G)
    	replace_child (n: [like parent] TWO_WAY_TREE [G])
    	search_child (v: [like child_item] G)
    	split (n: INTEGER_32)
    	sprout
    	swap (i: INTEGER_32)
    	twl_merge_left (other: [like Current] TWO_WAY_TREE [G])
    	twl_merge_right (other: [like Current] TWO_WAY_TREE [G])
    	twl_prune (v: [like child_item] G)
    	wipe_out

    Constraints
    	off constraint