我想创建一个用 C 实现的链表数据结构。我的想法是创建一个链表
ll:new() -> listId.
上面的 ListId 表示某种类型的“指针”,它将被传递回 C 代码,该 C 代码将用作列表上的某种类型的句柄。我希望不必来回传递列表本身,因为我想象列表可能会变得非常非常大。一旦创建了链表,用户就会以明显的方式与之交互:
ll:add(ListId, Elt)
ll:add_after(ListId, Pos, Elt)
我想我会通过 Erlang 的 NIF 功能来做到这一点。现在,为了使其工作,C 端必须跨多个调用 add、add_after 等维护列表。
在直接的 C 语言中,我将有一个用户与之交互的主函数,该函数将使程序保持活动状态,从而在用户与程序交互的整个生命周期内保持链接列表的持久性。据我了解,NIF 使用没有主要功能的 C 代码。也就是说,每次调用 NIF 都是一次性的命题。
有人可以给我一些关于如何(假设它是适当的)可以利用 NIF 与需要在多个调用中保持状态的 C 代码交互的指示吗?我希望这很清楚!