jos@cs.vu.nl (11/10/89)
Version: ISE Eiffel, version 2.2, level A, SUN4/sparc The library class TWO_WAY_TREE contains an erorror in the function `search_child'. As it is, the cursor will never be altered and the routine is actually a NO-OP. This becomes clear when reading the code. The routine will work correctly when the calls to `child_mark' and `child_return' are removed. This is the library version of `search_child', with the lines to be removed flagged: search_child (sought: like parent; i: INTEGER) is -- Move cursor under `i'-th occurence of `sought' if -- exists among children; go child_offright if none. require arguments_not_void: not sought.Void local j: INTEGER do child_mark; -- remove this line from go_offleft invariant child_position >= 0 variant arity - child_position until child_offright or else (j = i) loop child_forth; if (sought = child) then j := j + 1 end -- if end; child_return -- remove this line end; -- search_child ======================================================================== If the above is still not clear, here is an example of a class using `search_child', with its output: class TREE_ERROR export feature t : TWO_WAY_TREE[STRING]; s1, s2, s3 : STRING; ch : TWO_WAY_TREE[STRING]; Create is do s1.Create(10); s2.Create(10); s3.Create(10); s1.append("aap"); s2.append("noot"); s3.append("mies"); t.Create(s1); t.child_put_right(s2); t.child_start; t.child_put_right(s3); from t.child_start; ch := t.child; t.child_back; until ch.Void loop if t.child_offleft then io.putstring("t is offleft"); io.new_line; end; io.putstring("search child: "); io.putstring( ch.item ); io.new_line; -- `ch' is a child of `t', so it should be found. t.search_child(ch, 1); if t.child_offleft then io.putstring("Error: child of `t' not found"); io.new_line; else io.putstring("Ok : child of `t' found"); io.new_line; end; ch := ch.right_sibling; end; end; end; ======== output ============ t is offleft search child: noot Error: child of `t' not found t is offleft search child: mies Error: child of `t' not found ============================