NAME
Judy::SL - Efficient null-terminated string to integer map
SYNOPSIS
A simple string sort
my
$judy
;
Set(
$judy
,
'The cupcake is a lie'
, 0 );
Set(
$judy
,
'The cake is a lie'
, 0 );
Set(
$judy
,
'The moose is a moose'
, 0 );
my
(
undef
,
undef
,
$key
) = First(
$judy
,
''
);
while
(
defined
$key
) {
"$key\n"
;
(
undef
,
undef
,
$key
) = Next(
$judy
,
$key
);
}
EXPORT
All functions are exportable by Sub::Exporter.
DESCRIPTION
Judy::SL is the equivalent of a sorted set of strings, each associated with an integer. JudySL, the backing C library uses null-terminated strings so it'll do the wrong thing if your string has null characters in the middle of it. The perl wrapper automatically ensures your strings end in a null.
This is a form of "hash", where array elements are also sorted lexicographically (case-sensitive) by keys. This could be thought of as
@judy
= (
"Toto, I don't think we're in Kansas any more"
);
Nothing special is required to allocate a Judy::SL array. Just start using it.
my
$judy
;
if
( Get(
$judy
,
'omg'
) ) {
Set(
$judy
,
'zomg'
, 42 );
...
}
As with an ordinary array, there are no duplicate keys in a Judy::SL array.
DATA TYPES
$Judy - Judy::SL array
$Key - a string with no null characters
$Value - integer
$PValue - pointer to integer
BASIC FUNCTIONS
$PValue = Set( $Judy, $Key, $Value )
Insert/set a $Key
string and $Value
into $Judy
.
Return $PValue
pointing to the stored $Value
. Your program can use this pointer to modify the stored $Value
until the next Set()
, Delete()
, Free()
. Example:
Note: Set() and Delete() reorganize the JudySL array. Therefore, pointers returned from previous JudySL calls become invalid and must be reacquired.
bool = Delete( $Judy, $Key )
Delete the specified $Key
/$Value
pair from Judy::SL. Returns true if the element was removed, false otherwise.
( $PValue, $Value ) = Get( $Judy, $Key )
Get $Key
's $Value
. If $Key
exists in $Judy
, return $PValue
pointing to $Key
's $Value
and $Value
in a list. Return nothing if $Key
isn't present.
bytes = Free( $Judy )
Frees an entire Judy::SL array. Much faster than a First()
, Delete()
loop. Returns number of byes freed. $Judy
is set to 0.
SEARCH FUNCTIONS
The Judy::SL search functions allow you to search for keys in the array. You may search inclusively or exclusively, in either forward or reverse directions.
( $PValue, $Value, $FoundKey ) = First( $Judy, $Key )
Search (inclusive) for the first $Key
present that is equal to or greater than the passed $Key
string. Start with an empty string to find the first key in the array. First() is typically used to begin a sorted-order scan of the valid $Key
s in a JudySL array.
my
(
undef
,
$value
,
$key
) = First(
$judy
,
''
);
while
(
defined
$Key
) {
"$key=$value\n"
;
(
undef
,
$value
,
$key
) = Next(
$judy
,
$key
);
}
( $PValue, $Value, $FoundKey ) = Next( $Judy, $Key )
Search (inclusive) for the first $Key
present that is greater than the passed $Key
string. Next()
is typically used to continue a sorted-order scan of the valid $Key
s in a JudySL array.
( $PValue, $Value, $FoundKey ) = Last( $Judy, $Key )
Search (inclusive) for the first $Key
present that is less than or equal to the passed $Key
string. Start with a maximum-valued string to look up the last $Key
in the array, such as a max-length string of 0xff
bytes. Last()
is typically used to begin
a reverse-sorted-order scan of the valid keys in a JudySL array.
my
(
undef
,
$value
,
$key
) = Last(
$judy
,
"\xff"
x MAXLENGTH );
while
(
defined
$key
) {
"$key=$value\n"
;
(
undef
,
$value
,
$key
) = Prev(
$judy
,
$key
);
}
( $PValue, $Value, $FoundKey ) = Prev( $Judy, $Key )
Search (inclusive) for the first $Key
present that is less than the passed $Key
string. Prev()
is typically used to continue
a reverse-sorted-order scan of the valid keys in a JudySL array.
UTILITY FUNCTIONS
bytes = Free( $Judy )
Frees an entire Judy::SL array. This is much faster than a Next
/Delete
loop. Return number of bytes freed. $Judy
is set to 0.
MULTIDIMENSIONAL Judy::L
See Judy.
ERRORS & WARNINGS
See Judy.
AUTHOR
See Judy.