Array-Each-Override
view release on metacpan or search on metacpan
Override.xs view on Meta::CPAN
AV *av;
PPCODE:
if (!SvROK(sv))
croak("Argument to Array::Each::Override::array_each must be a reference");
sv = SvRV(sv);
if (SvTYPE(sv) == SVt_PVHV) {
HV *hv = (HV *) sv;
HE *entry;
const I32 gimme = GIMME_V;
/* PUTBACK; */
entry = hv_iternext(hv);
/* SPAGAIN; */
if (entry) {
SV *const key_sv = hv_iterkeysv(entry);
EXTEND(SP, 2);
PUSHs(key_sv);
if (gimme != G_ARRAY)
XSRETURN(1);
else {
SV *val;
/* PUTBACK; */
val = hv_iterval(hv, entry);
/* SPAGAIN; */
PUSHs(val);
XSRETURN(2);
}
}
else if (gimme == G_SCALAR) {
XSRETURN_UNDEF;
}
else {
Override.xs view on Meta::CPAN
while (hv_iternext(hv))
i++;
}
PUSHi(i);
XSRETURN(1);
}
else {
I32 n = HvKEYS(hv);
EXTEND(SP, n);
/* PUTBACK; */
while ((entry = hv_iternext(hv))) {
SV *key_sv;
/* SPAGAIN; */
key_sv = hv_iterkeysv(entry);
PUSHs(key_sv);
/* PUTBACK; */
}
/* SPAGAIN; */
XSRETURN(n);
}
}
if (SvTYPE(sv) != SVt_PVAV) {
Perl_croak(aTHX_ "Argument to Array::Each::Override::array_keys must "
"be a hash or array reference");
}
av = (AV *) sv;
Override.xs view on Meta::CPAN
while (hv_iternext(keys))
i++;
}
PUSHi(i);
XSRETURN(1);
}
else {
I32 n = HvKEYS(keys);
EXTEND(SP, n);
/* PUTBACK; */
while ((entry = hv_iternext(keys))) {
SV *val;
val = hv_iterval(hv, entry);
/* SPAGAIN; */
PUSHs(val);
}
/* PUTBACK; */
XSRETURN(n);
}
}
if (SvTYPE(sv) != SVt_PVAV) {
Perl_croak(aTHX_ "Argument to Array::Each::Override::array_values must "
"be a hash or array reference");
}
av = (AV *) sv;
clear_iterator(aTHX_ sv);
if (GIMME_V == G_SCALAR) {
( run in 0.351 second using v1.01-cache-2.11-cpan-4e96b696675 )