Hash-Util-Pick

 view release on metacpan or  search on metacpan

lib/Hash/Util/Pick.xs  view on Meta::CPAN

#define NEED_newSVpvn_flags
#include "ppport.h"

MODULE = Hash::Util::Pick    PACKAGE = Hash::Util::Pick

PROTOTYPES: DISABLED

void
pick(...)
PROTOTYPE: $@
PPCODE:
{
    SV **args = &PL_stack_base[ax];
    HV *src = SvROK(args[0]) ?
        (HV*)SvRV(args[0]) : (HV*)sv_2mortal((SV*)newHV());

    I32 i;
    HV *dest = (HV*)sv_2mortal((SV*)newHV());

    for (i = 1; i < items; ++i) {
        if (hv_exists_ent(src, args[i], 0)) {

lib/Hash/Util/Pick.xs  view on Meta::CPAN

        }
    }

    XPUSHs(newRV_inc((SV*)dest));
    XSRETURN(1);
}

void
pick_by(...)
PROTOTYPE: $&
PPCODE:
{
    dMULTICALL;
    GV *gv;
    HV *stash;
    I32 gimme = G_SCALAR;

    HV *src = SvROK(ST(0)) ?
        (HV*)SvRV(ST(0)) : (HV*)sv_2mortal((SV*)newHV());

    if (!SvROK(ST(1)) || SvTYPE((SV*)SvRV(ST(1))) != SVt_PVCV) {

lib/Hash/Util/Pick.xs  view on Meta::CPAN


    POP_MULTICALL;

    XPUSHs(newRV_inc((SV*)dest));
    XSRETURN(1);
}

void
omit(...)
PROTOTYPE: $@
PPCODE:
{
    SV **args = &PL_stack_base[ax];
    HV *src = SvROK(args[0]) ?
        (HV*)SvRV(args[0]) : (HV*)sv_2mortal((SV*)newHV());

    I32 i;
    HV *dest = (HV*)sv_2mortal((SV*)newHV());
    HV *omit_key_to_exist = (HV*)sv_2mortal((SV*)newHV());

    for (i = 1; i < items; ++i) {

lib/Hash/Util/Pick.xs  view on Meta::CPAN

        }
    }

    XPUSHs(newRV_inc((SV*)dest));
    XSRETURN(1);
}

void
omit_by(...)
PROTOTYPE: $&
PPCODE:
{
    dMULTICALL;
    GV *gv;
    HV *stash;
    I32 gimme = G_SCALAR;

    HV *src = SvROK(ST(0)) ?
        (HV*)SvRV(ST(0)) : (HV*)sv_2mortal((SV*)newHV());
    HV *dest = (HV*)sv_2mortal((SV*)newHV());



( run in 0.604 second using v1.01-cache-2.11-cpan-71847e10f99 )