【发布时间】:2012-02-18 16:42:19
【问题描述】:
我想创建一个用 C 实现的链表数据结构。我的想法是创建一个链表
ll:new() -> listId.
上面的ListId 表示某种类型的“指针”,它将被传递回C 代码,该C 代码将用作列表上的某种类型的句柄。我希望不必来回传递列表本身,因为我想象列表可能会变得非常非常大。一旦创建了链表,用户就会以明显的方式与之交互:
ll:add(ListId, Elt)
ll:add_after(ListId, Pos, Elt)
我想我会通过 Erlang 的 NIF 功能来做到这一点。现在,为了使它工作,C 端必须在多次调用 add、add_after 等时维护列表。
在直接的 C 语言中,我将有一个用户与之交互的 main 函数,该函数将使程序保持活动状态,从而在用户与程序交互的整个生命周期内保持链接列表的持久性。据我了解,NIF 使用没有主要功能的 C 代码。也就是说,每次调用 NIF 都是一次性的命题。
谁能给我一些关于如何(假设它是适当的)可以利用 NIF 与需要在多个调用中保持状态的 C 代码交互的指示?我希望这很清楚!
【问题讨论】:
-
只是为了澄清:ListId - 它包含某种形式的整个列表,或者只是引用(直接或间接)到 C 部分中的内存?
-
@OdobenusRosmarus,ListId 应该是对链表的引用,而不是链表本身
标签: erlang ffi erlang-nif