首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在XSUB中使用perlapi/ XS来插入和删除阵列元素

如何在XSUB中使用perlapi/ XS来插入和删除阵列元素
EN

Stack Overflow用户
提问于 2022-09-15 01:41:04
回答 1查看 53关注 0票数 1

我想在传递给XSUB的现有Perl数组中插入和删除元素。

perlapi拥有av_pushav_popav_fetchav_store和用于数组操作的朋友。我希望使用av_insertav_splice或类似的函数,但这些函数似乎并不存在。

av_delete,但文档将其描述为用undef替换元素,而不是实际从数组中删除项。

当然,我可以手动调整数组(av_extend)和循环移动元素(av_fetch/av_store)的大小。

有我可以使用的现有API函数吗?如果是这样的话,一个指向其文档的指针将是很棒的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-15 03:48:07

代码语言:javascript
复制
void av_insert( pTHX_ AV * av, Size_t key, SV * sv ) {
#define av_insert( a, b, c ) av_insert( aTHX_ a, b, c )
   sv = newSVsv( sv );

   Size_t count = av_count( av );
   if ( key < count ) {
      av_extend( av, count );
      SV ** a = AvARRAY( av );
      memmove( a+key, a+key+1, sizeof( SV * ) * ( count - key ) );
      a[ key ] = sv;
   } else {
      *av_fetch( av, key, 1 ) = sv;
   }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73724749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档