Judy
view release on metacpan or search on metacpan
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.488 second using v1.01-cache-2.11-cpan-5511b514fd6 )