List-Helpers-XS
view release on metacpan or search on metacpan
BOOT:
#if (PERL_VERSION >= 14)
sv_setpv((SV*)GvCV(gv_fetchpvs("List::Helpers::XS::shuffle", 0, SVt_PVCV)), "+");
#else
sv_setpv((SV*)GvCV(gv_fetchpvs("List::Helpers::XS::shuffle", 0, SVt_PVCV)), "\\@");
#endif
AV* random_slice (av, num)
AV* av
IV num
PPCODE:
if (num < 0)
croak("The slice's size can't be less than 0");
if (num != 0) {
static SSize_t last_index;
last_index = std::move(av_top_index(av));
num -= 1;
ST(0) = sv_2mortal(newRV_noinc( (SV *) slice )); // mXPUSHs(newRV_noinc( (SV *) slice ));
}
}
XSRETURN(1);
void shuffle (av)
AV *av
PPCODE:
SSize_t len = av_len(av);
/* it's faster than "shuffle_av_first_num_elements" */
shuffle_av_last_num_elements(av, len, len);
XSRETURN_EMPTY;
void shuffle_multi(av, ...)
AV* av;
PPCODE:
static SSize_t i;
static SSize_t len;
SV* sv;
SV *ref;
if (items == 0)
croak("Wrong amount of arguments");
for (i = 0; i < items; i++) {
sv = ST(i);
( run in 0.601 second using v1.01-cache-2.11-cpan-5511b514fd6 )