IPC-MMA

 view release on metacpan or  search on metacpan

MMA.xs  view on Meta::CPAN

mm_lock(mm, mode)
    MM *mm
    mm_lock_mode mode

int
mm_unlock(mm)
    MM *mm

void
mm_alloc_size ()
    PPCODE:
        if (GIMME_V == G_ARRAY) {
            EXTEND(SP, 6);
            XPUSHs(sv_2mortal(newSVuv((UV)mma_alloc_mask()+1)));
            XPUSHs(sv_2mortal(newSVuv((UV)mma_alloc_base())));
            XPUSHs(sv_2mortal(newSVuv((UV)sizeof(void *))));
            XPUSHs(sv_2mortal(newSVuv((UV)IVSIZE)));
            XPUSHs(sv_2mortal(newSVuv((UV)NVSIZE)));
            XPUSHs(sv_2mortal(newSVuv((UV)DELTA_ENTRIES)));
        } else {
            XPUSHs(sv_2mortal(newSVuv((UV)mma_alloc_mask()+1)));

MMA.xs  view on Meta::CPAN

        RETVAL

void
mm_array_status (array)
    mm_array *array
    ALIAS:
        mma_array_status=1
    PREINIT:
        IV statArray[4];
        int i=0;
    PPCODE:
        mm_array_status (array, statArray, ix);
        if (GIMME_V == G_ARRAY) {
            if (statArray[0] >= 0) {
                EXTEND(SP, 4);
                while (i < 4) XPUSHs (sv_2mortal (newSViv(statArray[i++])));
        }   } else {
            if (statArray[0] >= 0) {
                XPUSHs (sv_2mortal (newSViv(statArray[0])));
            } else XPUSHs (&PL_sv_undef);
        }

MMA.xs  view on Meta::CPAN

    PREINIT:
        IV index = SvOK(offset) ? SvIV(offset) < 0 && !(ix & 2) ? SvIV(offset)
                                                                  + array->entries
                                                                : SvIV(offset)
                                : 0;
        UV del_count = SvOK(length) ? SvUV(length) : array->entries - index;
        SV *delSVs[del_count];
        UV add_count = items>3 ? items-3 : 0;
        SV *addSVs[add_count];
        int i;
    PPCODE:
        for (i=0; i<add_count; i++) addSVs[i] = ST(i+3);
        if (!mm_array_splice (array,index,del_count,delSVs,add_count,addSVs,ix&1)) {
            if (PL_dowarn && mm_error()) warn ("IPC::MMA: %s", mm_error());
            del_count = 0;
        }
        /* "in scalar context, splice returns the last entry deleted"
           means just return all of them in either scalar or array mode */
        if (del_count || GIMME_V == G_ARRAY) {
            EXTEND (SP, del_count);
            for (i=0; i<del_count; i++) XPUSHs(sv_2mortal(delSVs[i]));

MMA.xs  view on Meta::CPAN

        RETVAL

void
mm_hash_get_entry(hash, index)
    mm_hash *hash
    IV index
    ALIAS:
        mma_hash_get_entry=1
    PREINIT:
        SV* ret[2];
    PPCODE:
        mm_hash_get_entry(hash, index, ix, ret);
        if (GIMME_V == G_ARRAY) {
            if (SvOK(ret[0])) {
                EXTEND(SP, 2);
                XPUSHs (sv_2mortal (ret[0]));
                XPUSHs (sv_2mortal (ret[1]));
        }   } else {
            XPUSHs (sv_2mortal (ret[0]));
        }



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