The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Judy::SL - Efficient null-terminated string to integer map

SYNOPSIS

A simple string sort

  use Judy::SL qw( Set First Next );

  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 ) {
    print "$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:

    use Judy::Mem qw( Peek );
    use Judy::SL qw( Set );

    $pvalue = Set( $judy, 'aloha', 42 );
    printf "aloha=%d\n", Peek( $pvalue );

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 $Keys in a JudySL array.

    my ( undef, $value, $key ) = First( $judy, '' );
    while ( defined $Key ) {
        print "$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 $Keys 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.

  use constant MAXLENGTH => 100;
  my ( undef, $value, $key ) = Last( $judy, "\xff" x MAXLENGTH );
  while ( defined $key ) {
    print "$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.