我想在传递给XSUB的现有Perl数组中插入和删除元素。
perlapi拥有av_push、av_pop、av_fetch、av_store和用于数组操作的朋友。我希望使用av_insert或av_splice或类似的函数,但这些函数似乎并不存在。
有av_delete,但文档将其描述为用undef替换元素,而不是实际从数组中删除项。
当然,我可以手动调整数组(av_extend)和循环移动元素(av_fetch/av_store)的大小。
有我可以使用的现有API函数吗?如果是这样的话,一个指向其文档的指针将是很棒的。
发布于 2022-09-15 03:48:07
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;
}
}https://stackoverflow.com/questions/73724749
复制相似问题