Fetch
view release on metacpan or search on metacpan
xs/future.xs view on Meta::CPAN
hmf_await(aTHX_ self);
RETVAL = SvREFCNT_inc(self);
OUTPUT:
RETVAL
void
get(self)
SV *self
ALIAS:
result = 1
PPCODE:
{
IV st;
PERL_UNUSED_VAR(ix);
hmf_await(aTHX_ self);
st = hmf_state(aTHX_ self);
if (st == HMF_FAILED) {
AV *fav = hmf_values_av(aTHX_ self);
SV **e = fav ? av_fetch(fav, 0, 0) : NULL;
if (e) croak_sv(sv_mortalcopy(*e));
croak("Failed");
xs/future.xs view on Meta::CPAN
XPUSHs(e ? sv_mortalcopy(*e) : &PL_sv_undef);
} else {
XPUSHs(&PL_sv_undef);
}
}
}
void
failure(self)
SV *self
PPCODE:
{
hmf_await(aTHX_ self);
if (hmf_state(aTHX_ self) != HMF_FAILED) XSRETURN_EMPTY;
{
AV *fav = hmf_values_av(aTHX_ self);
SSize_t n = fav ? av_len(fav) + 1 : 0;
if (GIMME_V == G_ARRAY) {
SSize_t i;
EXTEND(SP, n);
for (i = 0; i < n; i++) {
xs/future.xs view on Meta::CPAN
} else if (n) {
SV **e = av_fetch(fav, 0, 0);
XPUSHs(e ? sv_mortalcopy(*e) : &PL_sv_undef);
}
}
}
void
_values(self)
SV *self
PPCODE:
{
AV *rav = hmf_values_av(aTHX_ self);
SSize_t i, n = rav ? av_len(rav) + 1 : 0;
EXTEND(SP, n);
for (i = 0; i < n; i++) {
SV **e = av_fetch(rav, i, 0);
PUSHs(e ? sv_mortalcopy(*e) : &PL_sv_undef);
}
}
xs/headers.xs view on Meta::CPAN
}
}
OUTPUT:
RETVAL
# every value for $name, in order
void
get_all(self, name)
SV *self
SV *name
PPCODE:
{
STRLEN nl;
const char *ns = SvPV_const(name, nl);
AV *av = (AV *)SvRV(self);
SSize_t n = av_len(av) + 1, i;
for (i = 0; i + 1 < n; i += 2) {
SV **k = av_fetch(av, i, 0);
if (k && *k) {
STRLEN kl;
const char *ks = SvPV_const(*k, kl);
xs/headers.xs view on Meta::CPAN
}
RETVAL = SvREFCNT_inc(self);
}
OUTPUT:
RETVAL
# distinct field names, in order of first appearance
void
names(self)
SV *self
PPCODE:
{
AV *av = (AV *)SvRV(self);
AV *seen = newAV();
SSize_t n = av_len(av) + 1, i;
sv_2mortal((SV *)seen);
for (i = 0; i + 1 < n; i += 2) {
SV **k = av_fetch(av, i, 0);
if (k && *k) {
STRLEN kl;
const char *ks = SvPV_const(*k, kl);
xs/headers.xs view on Meta::CPAN
mXPUSHs(newSVsv(*k));
}
}
}
}
# the flat name => value list
void
pairs(self)
SV *self
PPCODE:
{
AV *av = (AV *)SvRV(self);
SSize_t n = av_len(av) + 1, i;
for (i = 0; i < n; i++) {
SV **e = av_fetch(av, i, 0);
mXPUSHs((e && *e) ? newSVsv(*e) : newSV(0));
}
}
# a shallow copy
( run in 0.563 second using v1.01-cache-2.11-cpan-4e7a2411597 )