我必须为以下功能制作一个 ruby c 扩展Abc_NtkCreateNodeAnd
:
Abc_Obj_t * Abc_NtkCreateNodeAnd( Abc_Ntk_t * pNtk, Vec_Ptr_t * vFanins )
{
Abc_Obj_t * pNode;
int i;
pNode = Abc_NtkCreateNode( pNtk );
return pNode;
}
这是 ruby c 扩展的示例。
*Original C function*
Abc_Ntk_t * Io_ReadBlif( char * pFileName, int fCheck )
{
Io_ReadBlif_t * p;
Abc_Ntk_t * pNtk;
p = Io_ReadBlifFile( pFileName );
return pNtk;
}
*Ruby C extension*
static VALUE IO_read_blif(VALUE self, VALUE file_name)
{
int index;
char *file_name_str = StringValueCStr(file_name);
Abc_Ntk_t *network = Io_ReadBlif(file_name_str, IO_FILE_BLIF, 1);
}
现在我的主要问题是如何将指针从 c 传递给 ruby。我尝试编写这样的扩展:
static VALUE Abc_NtkCreateNode_And(VALUE self, VALUE netw ,VALUE vfan_ins)
{
Abc_Ntk_t *netw_str = StringValueCStr(netw);
Vec_Ptr_t *vfan_ins_str = StringValueCStr(vfan_ins);
Abc_Obj_t *network = Abc_NtkCreateNodeAnd(netw_str,vfan_ins_str, IO_FILE_BLIF, 1);
return make_Network(network);
}
但Abc_Ntk_t *netw_str = StringValueCStr(netw);
我认为代码是错误的。那么正确的代码应该是什么?