如何在 Eiffel 中 运行 游标树?

How can I run a cursor tree in Eiffel?

我需要一个游标树,我在 EiffelStudio 中找到了 CURSOR_TREE 和 RECURSIVE_CURSOR_TREE 类,但它们被推迟了,我不知道如何实现它们。是不是很奇怪?

一些 类 实现 CURSOR_TREE 的源代码可在 .../library/base/elks/structures/cursor_tree 中的安装中获得。不幸的是,类(因为它们已实现)与 void safety 不兼容。您可以尝试将以下 类 复制到您的项目并编译:

library/base/elks/structures/cursor_tree/compact_cursor_tree.e
library/base/elks/structures/cursor_tree/linked_cursor_tree.e
library/base/elks/structures/cursor_tree/two_way_cursor_tree.e
library/base/elks/structures/cursors/compact_tree_cursor.e
library/base/elks/structures/cursors/linked_cursor_tree_cursor.e
library/base/elks/structures/cursors/two_way_cursor_tree_cursor.e

这个过程会涉及到几个变化:

  • 您的项目无效安全能力应设置为none(项目应从头开始重新编译);

  • 根据编译器的版本,您可能需要修复库 类 中的一些有效性错误(例如,从 redefine 子句中删除 put_right) ;

  • 必须提供功能 new_cursor 的实现,一个快速而肮脏的修复可能是一个虚拟存根:

    new_cursor: ITERATION_CURSOR [G]
        do
            Result := (create {SPECIAL [G]}.make_empty (0)).new_cursor
        end
    

之后你应该可以使用有效的 类 COMPACT_CURSOR_TREE, LINKED_CURSOR_TREETWO_WAY_CURSOR_TREE.

如果您打算在无效安全项目中使用 类,我建议与 Eiffel Software 合作,因为实现和接口需要进行大量更改才能使代码无效安全。