我想在傳遞給 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 函式嗎?如果是這樣,指向其檔案的指標會很棒。
uj5u.com熱心網友回復:
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://www.uj5u.com/qiye/513203.html
標籤:数组perlxs
