Judy

 view release on metacpan or  search on metacpan

Changes  view on Meta::CPAN

        API changes:
            Moved PJERR and JLAP_INVALID from Judy::Mem to Judy
            Removed PeekI, PokeI, PeekU, PokeU using IV and UV
            Added Peek and Poke using Word_t
        
        Moved XS from Judy::HS to Judy.
        Added Judy.pm, Judy.pod
        Release script checks a -Duse64bitint perl.
        Added notes to XS
        DEADBEEF is sized to UVSIZE
        Switched from PPCODE-style XS to CODE/OUTPUT-style XS to use implicit TARG.
        Added typedefs for Pvoid_t, Word_t*, Word_t
        Throw warning when UV/IV integers discard data when being truncated
        for storage into native sized Word_t.
        Require at least Alien-Judy 0.05
        Removed const-c.inc, const-xs.inc from the dist since they're generated
        Stop assigning 0 to $judy objects in example code - undef suffices
        Moved PJERR and JLAP_INVALID to Judy from Judy::Mem
        Judy::1, Judy::L, Judy::SL, Judy::HS all load Judy
        Judy loads all of Judy::1, Judy::L, Judy::S, Judy::HS
        Added test t/40l.t which checks for data loss on machines with

lib/Judy.xs  view on Meta::CPAN

    OUTPUT:
        RETVAL

void
lj1_Nth( PJ1Array, Nth )
        Pvoid_t PJ1Array
        UWord_t Nth
    INIT:
        UWord_t Index = DEADBEEF;
        int Rc_int = DEADBEEF;
    PPCODE:
        OOGA("%s:%d  J1BC(%#x,%#lx,%#lx,%#lx)\n",__FILE__,__LINE__,Rc_int,(long)PJ1Array,Nth,Index);
        J1BC(Rc_int,PJ1Array,Nth,Index);
        OOGA("%s:%d .J1BC(%#x,%#lx,%#lx,%#lx)\n",__FILE__,__LINE__,Rc_int,(long)PJ1Array,Nth,Index);

        if ( Rc_int ) {
            XPUSHs(sv_2mortal(newSVuv(Index)));
        }

UV
lj1_Free( PJ1Array )

lib/Judy.xs  view on Meta::CPAN

    OUTPUT:
        PJ1Array
        RETVAL

void
lj1_First( PJ1Array, Key )
        Pvoid_t PJ1Array
        UWord_t Key
    INIT:
        int Rc_int = DEADBEEF;
    PPCODE:
        OOGA("%s:%d  J1F(%#x,%#lx,%#lx)\n",__FILE__,__LINE__,Rc_int,(long)PJ1Array,Key);
        J1F(Rc_int,PJ1Array,Key);
        OOGA("%s:%d .J1F(%#x,%#lx,%#lx)\n",__FILE__,__LINE__,Rc_int,(long)PJ1Array,Key);

        if ( Rc_int ) {
            XPUSHs(sv_2mortal(newSVuv(Key)));
        }


void
lj1_Next( PJ1Array, Key )
        Pvoid_t PJ1Array
        UWord_t Key
    INIT:
        int Rc_int = DEADBEEF;
    PPCODE:
        OOGA("%s:%d  J1N(%#x,%#lx,%#lx)\n",__FILE__,__LINE__,Rc_int,(long)PJ1Array,Key);
        J1N(Rc_int,PJ1Array,Key);
        OOGA("%s:%d .J1N(%#x,%#lx,%#lx)\n",__FILE__,__LINE__,Rc_int,(long)PJ1Array,Key);

        if ( Rc_int ) {
            XPUSHs(sv_2mortal(newSVuv(Key)));
        }



void
lj1_Last( PJ1Array, Key )
        Pvoid_t PJ1Array
        UWord_t Key
    INIT:
        int Rc_int = DEADBEEF;
    PPCODE:
        OOGA("%s:%d  J1L(%#x,%#lx,%#lx)\n",__FILE__,__LINE__,Rc_int,(long)PJ1Array,Key);
        J1L(Rc_int,PJ1Array,Key);
        OOGA("%s:%d .J1L(%#x,%#lx,%#lx)\n",__FILE__,__LINE__,Rc_int,(long)PJ1Array,Key);

        if ( Rc_int ) {
            XPUSHs(sv_2mortal(newSVuv(Key)));
        }


void
lj1_Prev( PJ1Array, Key )
        Pvoid_t PJ1Array
        UWord_t Key
    INIT:
        int Rc_int = DEADBEEF;
    PPCODE:
        OOGA("%s:%d  J1P(%#x,%#lx,%#lx)\n",__FILE__,__LINE__,Rc_int,(long)PJ1Array,Key);
        J1P(Rc_int,PJ1Array,Key);
        OOGA("%s:%d .J1P(%#x,%#lx,%#lx)\n",__FILE__,__LINE__,Rc_int,(long)PJ1Array,Key);

        if ( Rc_int ) {
            XPUSHs(sv_2mortal(newSVuv(Key)));
        }

void
lj1_FirstEmpty( PJ1Array, Key )
        Pvoid_t PJ1Array
        UWord_t Key
    INIT:
        int Rc_int = DEADBEEF;
    PPCODE:
        OOGA("%s:%d  J1FE(%#x,%#lx,%#lx)\n",__FILE__,__LINE__,Rc_int,(long)PJ1Array,Key);
        J1FE(Rc_int,PJ1Array,Key);
        OOGA("%s:%d .J1FE(%#x,%#lx,%#lx)\n",__FILE__,__LINE__,Rc_int,(long)PJ1Array,Key);

        if ( Rc_int ) {
            XPUSHs(sv_2mortal(newSVuv(Key)));
        }


void
lj1_NextEmpty( PJ1Array, Key )
        Pvoid_t PJ1Array
        UWord_t Key
    INIT:
        int Rc_int = DEADBEEF;
    PPCODE:
        OOGA("%s:%d  J1NE(%#x,%#lx,%#lx)\n",__FILE__,__LINE__,Rc_int,(long)PJ1Array,Key);
        J1NE(Rc_int,PJ1Array,Key);
        OOGA("%s:%d .J1NE(%#x,%#lx,%#lx)\n",__FILE__,__LINE__,Rc_int,(long)PJ1Array,Key);

        if ( Rc_int ) {
            XPUSHs(sv_2mortal(newSVuv(Key)));
        }

void
lj1_LastEmpty( PJ1Array, Key )
        Pvoid_t PJ1Array
        UWord_t Key
    INIT:
        int Rc_int = DEADBEEF;
    PPCODE:
        OOGA("%s:%d  J1LE(%#x,%#lx,%#lx)\n",__FILE__,__LINE__,Rc_int,(long)PJ1Array,Key);
        J1LE(Rc_int,PJ1Array,Key);
        OOGA("%s:%d .J1LE(%#x,%#lx,%#lx)\n",__FILE__,__LINE__,Rc_int,(long)PJ1Array,Key);

        if ( Rc_int ) {
            XPUSHs(sv_2mortal(newSVuv(Key)));
        }

void
lj1_PrevEmpty( PJ1Array, Key )
        Pvoid_t PJ1Array
        UWord_t Key
    INIT:
        int Rc_int = DEADBEEF;
    PPCODE:
        OOGA("%s:%d  J1PE(%#x,%#lx,%#lx)\n",__FILE__,__LINE__,Rc_int,(long)PJ1Array,Key);
        J1PE(Rc_int,PJ1Array,Key);
        OOGA("%s:%d .J1PE(%#x,%#lx,%#lx)\n",__FILE__,__LINE__,Rc_int,(long)PJ1Array,Key);

        if ( Rc_int ) {
            XPUSHs(sv_2mortal(newSVuv(Key)));
        }



lib/Judy.xs  view on Meta::CPAN

    OUTPUT:
        PJLArray
        RETVAL

void
ljl_Get( PJLArray, Key )
        Pvoid_t PJLArray
        UWord_t Key
    INIT:
        PWord_t PValue = PDEADBEEF;
    PPCODE:
        OOGA("%s:%d  JLG(%#lx,%#lx,%#lx)\n",__FILE__,__LINE__,(long)PValue,(long)PJLArray,Key);
        JLG(PValue,PJLArray,Key);
        OOGA("%s:%d .JLG(%#lx,%#lx,%#lx)\n",__FILE__,__LINE__,(long)PValue,(long)PJLArray,Key);

        if ( PValue ) {
            OOGA("%s:%d *%#lx,",__FILE__,__LINE__,(long)PValue);
            OOGA("%#lx)\n",*PValue);
            EXTEND(SP,2);
            PUSHs(sv_2mortal(newSVuv(INT2PTR(UV,PValue))));
            PUSHs(sv_2mortal(newSViv((signed long int)*PValue)));

lib/Judy.xs  view on Meta::CPAN

        RETVAL

void
ljl_Nth( PJLArray, Nth )
        Pvoid_t PJLArray
        UWord_t Nth
    INIT:
        UWord_t Rc_word = DEADBEEF;
        UWord_t Index = DEADBEEF;
        PWord_t PValue = PDEADBEEF;
    PPCODE:
        OOGA("%s:%d  JLBC(%#lx,%#lx,%ld,%#lx)\n",__FILE__,__LINE__,Rc_word,(long)PJLArray,Nth,Index);
        JLBC(PValue,PJLArray,Nth,Index);
        OOGA("%s:%d .JLBC(%#lx,%#lx,%ld,%#lx)\n",__FILE__,__LINE__,Rc_word,(long)PJLArray,Nth,Index);

        if ( PValue ) {
            OOGA("%s:%d *%#lx=",__FILE__,__LINE__,(long)PValue);
            OOGA("%#lx)\n",*PValue);
            EXTEND(SP,3);
            PUSHs(sv_2mortal(newSVuv(INT2PTR(UV,PValue))));
            PUSHs(sv_2mortal(newSViv((signed long int)*PValue)));

lib/Judy.xs  view on Meta::CPAN

        RETVAL = Rc_word;
    OUTPUT:
        RETVAL

void
ljl_First( PJLArray, Key )
        Pvoid_t PJLArray
        UWord_t Key
    INIT:
        PWord_t PValue = PDEADBEEF;
    PPCODE:
        OOGA("%s:%d  JLF(%#lx,%#lx,%#lx)\n",__FILE__,__LINE__,(long)PValue,(long)PJLArray,Key);
        JLF(PValue,PJLArray,Key);
        OOGA("%s:%d .JLF(%#lx,%#lx,%#lx)\n",__FILE__,__LINE__,(long)PValue,(long)PJLArray,Key);

        if ( PValue ) {
            OOGA("%s:%d *%#lx=",__FILE__,__LINE__,(long)PValue);
            OOGA("%#lx)\n",*PValue);
            EXTEND(SP,3);
            PUSHs(sv_2mortal(newSVuv(INT2PTR(UV,PValue))));
            PUSHs(sv_2mortal(newSViv((signed long int)*PValue)));
            PUSHs(sv_2mortal(newSVuv(Key)));
        }


void
ljl_Next( PJLArray, Key )
        Pvoid_t PJLArray
        UWord_t Key
    INIT:
        PWord_t PValue = PDEADBEEF;
    PPCODE:
        OOGA("%s:%d  JLN(%#lx,%#lx,%#lx)\n",__FILE__,__LINE__,(long)PValue,(long)PJLArray,Key);
        JLN(PValue,PJLArray,Key);
        OOGA("%s:%d .JLN(%#lx,%#lx,%#lx)\n",__FILE__,__LINE__,(long)PValue,(long)PJLArray,Key);

        if ( PValue ) {
            OOGA("%s:%d *%#lx=",__FILE__,__LINE__,(long)PValue);
            OOGA("%#lx\n",*PValue);
            EXTEND(SP,3);
            PUSHs(sv_2mortal(newSVuv(INT2PTR(UV,PValue))));
            PUSHs(sv_2mortal(newSViv((signed long int)*PValue)));

lib/Judy.xs  view on Meta::CPAN

        }



void
ljl_Last( PJLArray, Key )
        Pvoid_t PJLArray
        UWord_t Key
    INIT:
        PWord_t PValue = PDEADBEEF;
    PPCODE:
        OOGA("%s:%d  JLL(%#lx,%#lx,%#lx)\n",__FILE__,__LINE__,(long)PValue,(long)PJLArray,Key);
        JLL(PValue,PJLArray,Key);
        OOGA("%s:%d .JLL(%#lx,%#lx,%#lx)\n",__FILE__,__LINE__,(long)PValue,(long)PJLArray,Key);

        if ( PValue ) {
            OOGA("%s:%d *%#lx=",__FILE__,__LINE__,(long)PValue);
            OOGA("%#lx)\n",*PValue);
            EXTEND(SP,3);
            PUSHs(sv_2mortal(newSVuv(INT2PTR(UV,PValue))));
            PUSHs(sv_2mortal(newSViv((signed long int)*PValue)));
            PUSHs(sv_2mortal(newSVuv(Key)));
        }


void
ljl_Prev( PJLArray, Key )
        Pvoid_t PJLArray
        UWord_t Key
    INIT:
        PWord_t PValue = PDEADBEEF;
    PPCODE:
        OOGA("%s:%d  JLP(%#lx,%#lx,%#lx)\n",__FILE__,__LINE__,(long)PValue,(long)PJLArray,Key);
        JLP(PValue,PJLArray,Key);
        OOGA("%s:%d .JLP(%#lx,%#lx,%#lx)\n",__FILE__,__LINE__,(long)PValue,(long)PJLArray,Key);

        if ( PValue ) {
            OOGA("%s:%d *%#lx=",__FILE__,__LINE__,(long)PValue);
            OOGA("%#lx)\n",*PValue);
            EXTEND(SP,3);
            PUSHs(sv_2mortal(newSVuv(INT2PTR(UV,PValue))));
            PUSHs(sv_2mortal(newSViv((signed long int)*PValue)));
            PUSHs(sv_2mortal(newSVuv(Key)));
        }

void
ljl_FirstEmpty( PJLArray, Key )
        Pvoid_t PJLArray
        UWord_t Key
    INIT:
        int Rc_int = DEADBEEF;
    PPCODE:
        OOGA("%s:%d  JLFE(0x%x,%#lx,%#lx)\n",__FILE__,__LINE__,Rc_int,(long)PJLArray,Key);
        JLFE(Rc_int,PJLArray,Key);
        OOGA("%s:%d .JLFE(0x%x,%#lx,%#lx)\n",__FILE__,__LINE__,Rc_int,(long)PJLArray,Key);

        if ( Rc_int ) {
            XPUSHs(sv_2mortal(newSVuv(Key)));
        }


void
ljl_NextEmpty( PJLArray, Key )
        Pvoid_t PJLArray
        UWord_t Key
    INIT:
        int Rc_int = DEADBEEF;
    PPCODE:
        OOGA("%s:%d  JLNE(0x%x,%#lx,%#lx)\n",__FILE__,__LINE__,Rc_int,(long)PJLArray,Key);
        JLNE(Rc_int,PJLArray,Key);
        OOGA("%s:%d .JLNE(0x%x,%#lx,%#lx)\n",__FILE__,__LINE__,Rc_int,(long)PJLArray,Key);

        if ( Rc_int ) {
            XPUSHs(sv_2mortal(newSVuv(Key)));
        }

void
ljl_LastEmpty( PJLArray, Key )
        Pvoid_t PJLArray
        UWord_t Key
    INIT:
        int Rc_int = DEADBEEF;
    PPCODE:
        OOGA("%s:%d  JLLE(0x%x,%#lx,%#lx)\n",__FILE__,__LINE__,Rc_int,(long)PJLArray,Key);
        JLLE(Rc_int,PJLArray,Key);
        OOGA("%s:%d .JLLE(0x%x,%#lx,%#lx)\n",__FILE__,__LINE__,Rc_int,(long)PJLArray,Key);

        if ( Rc_int ) {
            XPUSHs(sv_2mortal(newSVuv(Key)));
        }

void
ljl_PrevEmpty( PJLArray, Key )
        Pvoid_t PJLArray
        UWord_t Key
    INIT:
        int Rc_int = DEADBEEF;
    PPCODE:
        OOGA("%s:%d  JLPE(0x%x,%#lx,%#lx)\n",__FILE__,__LINE__,Rc_int,(long)PJLArray,Key);
        JLPE(Rc_int,PJLArray,Key);
        OOGA("%s:%d .JLPE(0x%x,%#lx,%#lx)\n",__FILE__,__LINE__,Rc_int,(long)PJLArray,Key);

        if ( Rc_int ) {
            XPUSHs(sv_2mortal(newSVuv(Key)));
        }



lib/Judy.xs  view on Meta::CPAN

        PJSLArray
        RETVAL

void
ljsl_Get( PJSLArray, Key )
        Pvoid_t PJSLArray
        Str Key
    INIT:
        PWord_t PValue = PDEADBEEF;
        uint8_t Index[MAXLINELEN];
    PPCODE:
        if ( Key.length > MAXLINELEN ) {
           croak("Sorry, can't use keys longer than "MAXLINELEN_S" for now. This is a bug.");
        }
        Copy(Key.ptr,Index,Key.length,uint8_t);
        Index[Key.length] = '\0';

        /* Cast from (char*) to (const uint8_t*) to silence a warning. */
        OOGA("%s:%d PSLG(%#lx,%#lx,\"%s\"@%d)\n",__FILE__,__LINE__,(long)PValue,(long)PJSLArray,Key.ptr,Key.length);
        JSLG(PValue,PJSLArray,Index);
        OOGA("%s:%d PSLG(%#lx,%#lx,\"%s\"@%d)\n",__FILE__,__LINE__,(long)PValue,(long)PJSLArray,Key.ptr,Key.length);

lib/Judy.xs  view on Meta::CPAN

        PJSLArray
        RETVAL

void
ljsl_First( PJSLArray, Key )
        Pvoid_t PJSLArray
        Str Key
    INIT:
        PWord_t PValue = PDEADBEEF;
        uint8_t Index[MAXLINELEN];
    PPCODE:
        /* Copy Index because it is both input and output. */
        if ( Key.length > MAXLINELEN ) {
           croak("Sorry, can't use keys longer than "MAXLINELEN_S" for now. This is a bug.");
        }
        Copy(Key.ptr,Index,Key.length,uint8_t);
        Index[Key.length] = '\0';

        /* Cast from (char*) to (uint8_t*) to silence a warning. */ 
        OOGA("%s:%d  JSLF(%#lx,%#lx,\"%s\"@%#lx)\n",__FILE__,__LINE__,(long)PValue,(long)PJSLArray,Index,(long)Index);
        JSLF(PValue,PJSLArray,Index);

lib/Judy.xs  view on Meta::CPAN

            PUSHs(sv_2mortal(newSVpv((char*)Index,0)));
        }

void
ljsl_Next( PJSLArray, Key )
        Pvoid_t PJSLArray
        Str Key
    INIT:
        PWord_t PValue = PDEADBEEF;
        uint8_t Index[MAXLINELEN];
    PPCODE:
        /* Copy Index because it is both input and output. */
        if ( Key.length > MAXLINELEN ) {
           croak("Sorry, can't use keys longer than "MAXLINELEN_S" for now. This is a bug.");
        }
        Copy(Key.ptr,Index,Key.length,uint8_t);
        Index[Key.length] = '\0';

        /* Cast from (char*) to (uint8_t*) to silence a warning. */
        OOGA("%s:%d  JSLN(%#lx,%#lx,\"%s\"@%#lx)\n",__FILE__,__LINE__,(long)PValue,(long)PJSLArray,Index,(long)Index);
        JSLN(PValue,PJSLArray,Index);

lib/Judy.xs  view on Meta::CPAN

            PUSHs(sv_2mortal(newSVpv((char*)Index,0)));
        }

void
ljsl_Last( PJSLArray, Key )
        Pvoid_t PJSLArray
        Str Key
    INIT:
        PWord_t PValue = PDEADBEEF;
        uint8_t Index[MAXLINELEN];
    PPCODE:
        /* Copy Index because it is both input and output. */
        if ( Key.length > MAXLINELEN ) {
           croak("Sorry, can't use keys longer than "MAXLINELEN_S" for now. This is a bug.");
        }
        Copy(Key.ptr,Index,Key.length,uint8_t);
        Index[Key.length] = '\0';

        /* Cast from (char*) to (uint8_t*) to silence a warning. */
        OOGA("%s:%d  JSLL(%#lx,%#lx,\"%s\"@%#lx)\n",__FILE__,__LINE__,(long)PValue,(long)PJSLArray,Index,(long)Index);
        JSLL(PValue,PJSLArray,Index);

lib/Judy.xs  view on Meta::CPAN

            PUSHs(sv_2mortal(newSVpv((char*)Index,0)));
        }

void
ljsl_Prev( PJSLArray, Key )
        Pvoid_t PJSLArray
        Str Key
    INIT:
        PWord_t PValue = PDEADBEEF;
        uint8_t Index[MAXLINELEN];
    PPCODE:
        /* Copy Index because it is both input and output. */
        if ( Key.length > MAXLINELEN ) {
           croak("Sorry, can't use keys longer than "MAXLINELEN_S" for now. This is a bug.");
        }
        Copy(Key.ptr,Index,Key.length,uint8_t);
        Index[Key.length] = '\0';

        /* Cast from (char*) to (uint8_t*) to silence a warning. */
        OOGA("%s:%d  JSLP(%#lx,%#lx,\"%s\"@%#lx)\n",__FILE__,__LINE__,(long)PValue,(long)PJSLArray,Index,(long)Index);
        JSLP(PValue,PJSLArray,Index);

lib/Judy.xs  view on Meta::CPAN

    OUTPUT:
        PJHSArray
        RETVAL

void
ljhs_Get( PJHSArray, Key )
        Pvoid_t PJHSArray
        Str Key
    INIT:
        PWord_t PValue = PDEADBEEF;
    PPCODE:
        JHSG(PValue,PJHSArray,Key.ptr,Key.length);

        /* OUTPUT */
        if ( PValue ) {
            EXTEND(SP,2);
            PUSHs(sv_2mortal(newSVuv(INT2PTR(UV,PValue))));
            PUSHs(sv_2mortal(newSViv((signed long int)*PValue)));
        }

UWord_t



( run in 0.425 second using v1.01-cache-2.11-cpan-5511b514fd6 )