deferred class interface DS_DYNAMIC_CURSOR[G] feature(s) from DS_CURSOR -- Access item: G -- Item at cursor position require not_off: not off container: DS_TRAVERSABLE[G] -- Data structure traversed feature(s) from DS_CURSOR -- Status report off: BOOLEAN -- Is there no item at cursor position? same_position (other: like Current): BOOLEAN -- Is current cursor at same position as other? require other_not_void: other /= Void feature(s) from DS_CURSOR -- Cursor movement go_to (other: like Current) -- Move cursor to other's position. require other_not_void: other /= Void; valid_cursor: container.valid_cursor(other) ensure same_position: same_position(other) feature(s) from DS_CURSOR -- Duplication copy (other: like Current) -- Copy other to current cursor. require other_not_void: other /= Void ensure is_equal: is_equal(other) feature(s) from DS_CURSOR -- Comparison is_equal (other: like Current): BOOLEAN -- Are other and current cursor at the same position? require other_not_void: other /= Void ensure consistent: standard_is_equal(other) implies Result; symmetric: Result implies other.is_equal(Current) feature(s) from DS_DYNAMIC_CURSOR -- Element change replace (v: G) -- Replace item at cursor position by v. require not_off: not off ensure replaced: item = v swap (other: DS_DYNAMIC_CURSOR[G]) -- Exchange items at current and other's positions. -- Note: cursors may reference two different containers. require not_off: not off; other_not_void: other /= Void; other_not_off: not other.off ensure new_item: item = old other.item; new_other: other.item = old item invariant container_not_void: container /= Void; -- The following assertion are commented out because -- some Eiffel compilers check invariants even when the -- execution of the creation procedure is not completed. -- (In this case, this is container which is not fully -- created yet, breaking its invariant.) -- empty_constraint: container.is_empty implies off end of deferred DS_DYNAMIC_CURSOR[G]