Judy

 view release on metacpan or  search on metacpan

lib/Judy.xs  view on Meta::CPAN

lj1_Test( PJ1Array, Key )
        Pvoid_t PJ1Array
        UWord_t Key
    INIT:
        int Rc_int = DEADBEEF;
    CODE:
        OOGA("%s:%d  J1T(%#x,%#lx,%#lx)\n",__FILE__,__LINE__,Rc_int,(long)PJ1Array,Key);
        J1T(Rc_int,PJ1Array,Key);
        OOGA("%s:%d .J1T(%#x,%#lx,%#lx)\n",__FILE__,__LINE__,Rc_int,(long)PJ1Array,Key);
        RETVAL = Rc_int;
    OUTPUT:
        PJ1Array
        RETVAL

UV
lj1_Count( PJ1Array, Key1, Key2 )
        Pvoid_t PJ1Array
        UWord_t Key1
        UWord_t Key2
    INIT:
        UWord_t Rc_word = DEADBEEF;
        JError_t JError;
    CODE:
        /* TODO: Upgrade the returned IV to a UV if the count would be
           "negative" */

        OOGA("%s:%d Judy1Count(%#lx,%#lx,%#lx,%#lx)\n",__FILE__,__LINE__,(long)PJ1Array,Key1,Key2,(long)&JError);
        Rc_word = Judy1Count(PJ1Array,Key1,Key2,&JError);
        OOGA("%s:%d Judy1Count(%#lx,%#lx,%#lx,%#lx)\n",__FILE__,__LINE__,(long)PJ1Array,Key1,Key2,(long)&JError);
        if ( Rc_word ) {
            RETVAL = Rc_word;
        }
        else {
            if ( JU_ERRNO(&JError) == JU_ERRNO_NONE ) {
                RETVAL = 0;
            }
            else if ( JU_ERRNO(&JError) == JU_ERRNO_FULL ) {
                /* On a 32-bit machine, this value is
                 * indistinguishable from the count of 2^32. On a
                 * 64-bit machine, this value cannot be triggered.
                 */
                RETVAL = ULONG_MAX;
            }
            else if ( JU_ERRNO(&JError) > JU_ERRNO_NFMAX ) {
                /* Defer to back to the default implementation for
                 * error handling in the J1C macro.
                 */
                J_E("Judy1Count",&JError);
            }
        }
    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 )
        Pvoid_t PJ1Array
    INIT:
        UWord_t Rc_word = DEADBEEF;
    CODE:
        OOGA("%s:%d  J1FA(%#lx,%#lx)\n",__FILE__,__LINE__,Rc_word,(long)PJ1Array);
        J1FA(Rc_word,PJ1Array);
        OOGA("%s:%d .J1FA(%#lx,%#lx)\n",__FILE__,__LINE__,Rc_word,(long)PJ1Array);
        RETVAL = Rc_word;
    OUTPUT:
        PJ1Array
        RETVAL

UV
lj1_MemUsed( PJ1Array )
        Pvoid_t PJ1Array
    INIT:
        UWord_t Rc_word = DEADBEEF;
    CODE:
        OOGA("%s:%d  M1MU(%#lx,%#lx)\n",__FILE__,__LINE__,Rc_word,(long)PJ1Array);
        J1MU(Rc_word,PJ1Array);
        OOGA("%s:%d  M1MU(%#lx,%#lx)\n",__FILE__,__LINE__,Rc_word,(long)PJ1Array);
        RETVAL = Rc_word;
    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)));
        }






MODULE = Judy PACKAGE = Judy::L PREFIX = ljl_

PWord_t
ljl_Set( PJLArray, Key, Value )
        Pvoid_t PJLArray
        UWord_t Key
        IWord_t Value
    INIT:
        PWord_t PValue = PDEADBEEF;
    CODE:
        OOGA("%s:%d  JLI(%#lx,%#lx,%#lx)\n",__FILE__,__LINE__,(long)PValue,(long)PJLArray,Key);
        JLI(PValue,PJLArray,Key);
        OOGA("%s:%d .JLI(%#lx,%#lx,%#lx)\n",__FILE__,__LINE__,(long)PValue,(long)PJLArray,Key);
        *PValue = Value;
        RETVAL = PValue;
    OUTPUT:
        PJLArray
        RETVAL


int
ljl_Delete( PJLArray, Key )
        Pvoid_t PJLArray
        UWord_t Key
    INIT:
        int Rc_int = DEADBEEF;
    CODE:
        OOGA("%s:%d  JLD(%#x,%#lx,%#lx)\n",__FILE__,__LINE__,Rc_int,(long)PJLArray,Key);
        JLD(Rc_int,PJLArray,Key);
        OOGA("%s:%d .JLD(%#x,%#lx,%#lx)\n",__FILE__,__LINE__,Rc_int,(long)PJLArray,Key);
        RETVAL = Rc_int;
    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)));
        }

UWord_t
ljl_Count( PJLArray, Key1, Key2 )
        Pvoid_t PJLArray
        UWord_t Key1
        UWord_t Key2
    INIT:
        UWord_t Rc_word = DEADBEEF;
    CODE:
        OOGA("%s:%d  JLC(%#lx,%#lx,%#lx,%#lx)\n",__FILE__,__LINE__,Rc_word,(long)PJLArray,Key1,Key2);
        JLC(Rc_word,PJLArray,Key1,Key2);
        OOGA("%s:%d .JLC(%#lx,%#lx,%#lx,%#lx)\n",__FILE__,__LINE__,Rc_word,(long)PJLArray,Key1,Key2);

        RETVAL = Rc_word;
    OUTPUT:
        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)));
            PUSHs(sv_2mortal(newSVuv(Index)));
        }

UWord_t
ljl_Free( PJLArray )
        Pvoid_t PJLArray
    INIT:
        UWord_t Rc_word = DEADBEEF;
    CODE:
        OOGA("%s:%d  JLFA(%#lx,%#lx)\n",__FILE__,__LINE__,Rc_word,(long)PJLArray);
        JLFA(Rc_word,PJLArray);
        OOGA("%s:%d .JLFA(%#lx,%#lx)\n",__FILE__,__LINE__,Rc_word,(long)PJLArray);

        RETVAL = Rc_word;
    OUTPUT:
        PJLArray
        RETVAL

UWord_t
ljl_MemUsed( PJLArray )
        Pvoid_t PJLArray
    INIT:
        UWord_t Rc_word = DEADBEEF;
    CODE:
        OOGA("%s:%d  JLMU(%#lx,%#lx)\n",__FILE__,__LINE__,Rc_word,(long)PJLArray);
        JLMU(Rc_word,PJLArray);
        OOGA("%s:%d .JLMU(%#lx,%#lx)\n",__FILE__,__LINE__,Rc_word,(long)PJLArray);

        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)));
            PUSHs(sv_2mortal(newSVuv(Key)));
        }



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)));
        }






MODULE = Judy PACKAGE = Judy::SL PREFIX = ljsl_

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

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

        OOGA("%s:%d *%#lx=",__FILE__,__LINE__,(long)PValue);
        *PValue = Value;
        OOGA("%#lx)\n",*PValue);

        RETVAL = PValue;
    OUTPUT:
        PJSLArray
        RETVAL

int
ljsl_Delete( PJSLArray, Key )
        Pvoid_t PJSLArray
        Str Key
    INIT:
        int Rc_int = DEADBEEF;
    CODE:
        if ( Key.length > MAXLINELEN ) {
           croak("Sorry, can't use keys longer than "MAXLINELEN_S" for now. This is a bug.");
        }

        /* Cast from (char*) to (const uint8_t*) to silence a warning. */
        OOGA("%s:%d  JSLD(0x%x,%#lx,\"%s\"@%#lx)\n",__FILE__,__LINE__,Rc_int,(long)PJSLArray,Key.ptr,(long)Key.ptr);
        JSLD(Rc_int,PJSLArray,(const uint8_t*)Key.ptr);
        OOGA("%s:%d .JSLD(0x%x,%#lx,\"%s\"@%#lx)\n",__FILE__,__LINE__,Rc_int,(long)PJSLArray,Key.ptr,(long)Key.ptr);
        RETVAL = Rc_int;
    OUTPUT:
        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);

        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)));
        }

UWord_t
ljsl_Free( PJSLArray )
        Pvoid_t PJSLArray
    INIT:
        UWord_t Rc_word = DEADBEEF;
    CODE:
        OOGA("%s:%d  JSLFA(%#lx,%#lx)\n",__FILE__,__LINE__,Rc_word,(long)PJSLArray);
        JSLFA(Rc_word,PJSLArray);
        OOGA("%s:%d .JSLFA(%#lx,%#lx)\n",__FILE__,__LINE__,Rc_word,(long)PJSLArray);

        RETVAL = Rc_word;
    OUTPUT:
        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);
        OOGA("%s:%d .JSLF(%#lx,%#lx,\"%s\"@%#lx)\n",__FILE__,__LINE__,(long)PValue,(long)PJSLArray,Index,(long)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)));
            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);
        OOGA("%s:%d .JSLN(%#lx,%#lx,\"%s\"@%#lx)\n",__FILE__,__LINE__,(long)PValue,(long)PJSLArray,Index,(long)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)));
            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);
        OOGA("%s:%d .JSLL(%#lx,%#lx,\"%s\"@%#lx)\n",__FILE__,__LINE__,(long)PValue,(long)PJSLArray,Index,(long)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)));
            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);
        OOGA("%s:%d .JSLP(%#lx,%#lx,\"%s\"@%#lx)\n",__FILE__,__LINE__,(long)PValue,(long)PJSLArray,Index,(long)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)));
            PUSHs(sv_2mortal(newSVpv((char*)Index,0)));
        }






MODULE = Judy PACKAGE = Judy::HS PREFIX = ljhs_

UWord_t
ljhs_MemUsed( PJHSArray )
        Pvoid_t PJHSArray
    CODE:
        RETVAL = pvtJudyHSMemUsed( PJHSArray );
    OUTPUT:
        RETVAL

UWord_t
ljhs_Duplicates( PJHSArray, Key )
        Pvoid_t PJHSArray
        Str Key
    INIT:
        PWord_t PValue = PDEADBEEF;
    CODE:
        JHSI(PValue,PJHSArray,Key.ptr,Key.length);
        RETVAL = *PValue;
        ++*PValue;
    OUTPUT:
        PJHSArray
        RETVAL



PWord_t
ljhs_Set( PJHSArray, Key, Value )
        Pvoid_t PJHSArray
        Str Key
        IWord_t Value
    INIT:
        IWord_t  *PValue = PDEADBEEF;
    CODE:
        JHSI(PValue,PJHSArray,Key.ptr,Key.length);
        *PValue = Value;
        RETVAL = PValue;
    OUTPUT:
        PJHSArray
        RETVAL

int
ljhs_Delete( PJHSArray, Key )
        Pvoid_t PJHSArray
        Str Key
    INIT:
        int Rc_int = DEADBEEF;
    CODE:
        JHSD(Rc_int,PJHSArray,Key.ptr,Key.length);
        RETVAL = Rc_int;
    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
ljhs_Free( PJHSArray )
        Pvoid_t PJHSArray
    INIT:
        UWord_t Rc_word = DEADBEEF;
    CODE:
        JHSFA(Rc_word,PJHSArray);
        RETVAL = Rc_word;
    OUTPUT:
        PJHSArray
        RETVAL






MODULE = Judy PACKAGE = Judy PREFIX = lj_

# Switch back to the base Judy namespace. xsubpp requires this.
#
# Also, avoid terminating in =pod because ExtUtils::ParseXS throws
# warnings. This paragraph used to be in =pod/cut comments.



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