Judy1(3) | Library Functions Manual | Judy1(3) |
Judy1 - C library for creating and accessing a dynamic array of bits, using any value of a word as an index.
cc [flags] sourcefiles -lJudy
#include <Judy.h>
int Rc_int; // return code - integer Word_t Rc_word; // return code - unsigned word Word_t Index, Index1, Index2, Nth;
Pvoid_t PJ1Array = (Pvoid_t) NULL; // initialize Judy1 array
J1S( Rc_int, PJ1Array, Index); // Judy1Set() J1U( Rc_int, PJ1Array, Index); // Judy1Unset() J1T( Rc_int, PJ1Array, Index); // Judy1Test() J1C( Rc_word, PJ1Array, Index1, Index2); // Judy1Count() J1BC(Rc_int, PJ1Array, Nth, Index); // Judy1ByCount() J1FA(Rc_word, PJ1Array); // Judy1FreeArray() J1MU(Rc_word, PJ1Array); // Judy1MemUsed() J1F( Rc_int, PJ1Array, Index); // Judy1First() J1N( Rc_int, PJ1Array, Index); // Judy1Next() J1L( Rc_int, PJ1Array, Index); // Judy1Last() J1P( Rc_int, PJ1Array, Index); // Judy1Prev() J1FE(Rc_int, PJ1Array, Index); // Judy1FirstEmpty() J1NE(Rc_int, PJ1Array, Index); // Judy1NextEmpty() J1LE(Rc_int, PJ1Array, Index); // Judy1LastEmpty() J1PE(Rc_int, PJ1Array, Index); // Judy1PrevEmpty()
A Judy1 array is the equivalent of a bit array or bit map. A bit is addressed by an Index (key). The array may be sparse, and the Index may be any word-sized Value. If an index is present, it represents a set bit (a bit set represents an index present). If an index is absent, it represents an unset bit (a bit unset represents an absent index).
A Judy1 array is allocated with a NULL pointer
Pvoid_t PJ1Array = (Pvoid_t) NULL;Memory to support the array is allocated as bits are set, and released as bits are unset. If the Judy1 pointer (PJ1Array) is NULL, all bits are unset (and the Judy1 array requires no memory).
As with an ordinary array, a Judy1 array contains no duplicate indexes.
Using the macros described here, rather than the Judy1 function calls, the default error handling sends a message to the standard error and terminates the program with exit(1). For other error handling methods, see the ERRORS section.
Because the macro forms are sometimes faster and have a simpler error handling interface than the equivalent functions, they are the preferred way of calling the Judy1 functions.
J1C(Rc_word, PJ1Array, 0, -1);Note: The -1 promotes to the maximum index, that is, all ones.
In the following example, errors in the J1S() or J1U() calls go to a user-defined procedure, process_malloc_failure. This is not needed when you use the default JUDYERROR() macro, since the default causes your program to exit on all failures, including malloc() failure.
#include <stdio.h> #include <Judy.h>
int main() // Example program of Judy1 macro APIs {
Word_t Index; // index (or key)
Word_t Rcount; // count of indexes (or bits set)
Word_t Rc_word; // full word return value
int Rc_int; // boolean values returned (0 or 1)
Pvoid_t PJ1Array = (Pvoid_t) NULL; // initialize Judy1 array
Index = 123456;
J1S(Rc_int, J1Array, Index); // set bit at 123456
if (Rc_int == JERR) goto process_malloc_failure;
if (Rc_int == 1) printf("OK - bit successfully set at %lu\n", Index);
if (Rc_int == 0) printf("BUG - bit already set at %lu\n", Index);
Index = 654321;
J1T(Rc_int, J1Array, Index); // test if bit set at 654321
if (Rc_int == 1) printf("BUG - set bit at %lu\n", Index);
if (Rc_int == 0) printf("OK - bit not set at %lu\n", Index);
J1C(Rcount, J1Array, 0, -1); // count all bits set in array
printf("%lu bits set in Judy1 array\n", Rcount);
Index = 0;
J1F(Rc_int, J1Array, Index); // find first bit set in array
if (Rc_int == 1) printf("OK - first bit set is at %lu\n", Index);
if (Rc_int == 0) printf("BUG - no bits set in array\n");
J1MU(Rc_word, J1Array); // how much memory was used?
printf("%lu Indexes used %lu bytes of memory\n", Rcount, Rc_word);
Index = 123456;
J1U(Rc_int, J1Array, Index); // unset bit at 123456
if (Rc_int == JERR) goto process_malloc_failure;
if (Rc_int == 1) printf("OK - bit successfully unset at %lu\n", Index);
if (Rc_int == 0) printf("BUG - bit was not set at %lu\n", Index);
return(0); }
Judy was invented by Doug Baskins and implemented -Packard.
Judy(3), JudyL(3), JudySL(3),
JudyHS(3),
malloc(),
the Judy website, http://judy.sourceforge.net, for more information and
Application Notes.