/* Data-Util/data-util.h */ #include "xshelper.h" #include "mro_compat.h" #include "str_util.h" #ifndef SvRXOK #define SvRXOK(sv) ((SvROK(sv) && (SvTYPE(SvRV(sv)) == SVt_PVMG) && mg_find(SvRV(sv), PERL_MAGIC_qr)) ? TRUE : FALSE) #endif #define PUSHary(ary, start, len) STMT_START{ \ I32 i; \ I32 const length = (len); \ for(i = (start) ;i < length; i++){\ PUSHs(ary[i]); \ } \ } STMT_END #define XPUSHary(ary, start, len) STMT_START{ \ I32 i; \ I32 const length = (len); \ EXTEND(SP, length); \ for(i = (start) ;i < length; i++){\ PUSHs(ary[i]); \ } \ } STMT_END #define is_string(x) (SvOK(x) && !SvROK(x) && (SvPOKp(x) ? SvCUR(x) > 0 : TRUE)) #define neat(x) du_neat(aTHX_ x) const char* du_neat(pTHX_ SV* x); /* curry ingand modifiers */ /* modifier accessros */ enum{ M_BEFORE, M_AROUND, M_AFTER, M_CURRENT, M_LENGTH }; #define mg_find_by_vtbl(sv, vtbl) my_mg_find_by_vtbl(aTHX_ sv, vtbl) MAGIC* my_mg_find_by_vtbl(pTHX_ SV* const sv, const MGVTBL* const vtbl); XS(XS_Data__Util_curried); XS(XS_Data__Util_modified);