Hi Len:
Well, you are not the first. Your problem below seems to be that the "&" is
not needed on the
Judy functions that read (not insert or delete or modify an Index in a Judy
array). The
"PPValue = JudySLGet( & PArray, needle, 0 );"
in your below example should be:
"PPValue = JudySLGet(PArray, needle, 0 );"
(I will nit pick on the 0 should be a PJE0 -- but
C doesn's care, maybe C++ does? C++ changed the sematics of "void *" since
Judy was written).
Another nit: I use PValue = (cast_t *)JudyG... when Value is a scaler, and
PPValue = (cast_t **) JudyG...
when Value is a pointer. This helps me with my confused mind.
Are you sure you need multiple JudySL() arrays?
The main reason that the Insert/Delete/Free functions need the "&" in front of
the array pointer is
to allow the array to be allocated from a NULL pointer (Judy needs it's address
to modify the (single)
direct pointer to the array in RAM). I realize that "pointer to pointer" is
very confusing to the human
mind, but this is the only way (in C) that this can be done -- except hidden in
a Macro).
On perhaps something a more esoteric, the ability a Judy array to be
initialized from
a NULL pointer, plus the fact that every insertion to Judy returns a pointer to
a "NULL"
means that a virtual infinite amount of memory can be allocated starting with a
NULL pointer.
In other words think of a NULL pointer as a JudyL or JudySL array and then
think of what
they return as the same etc. The Judy Macros were a perhaps poor attempt to
hide this problem from
the programmer -- as in:
JLI(PValue, PArray, Index); V.S. PValue = (Value_t
*)JudyLIns(&PArray, Index, NULL);
(The macro JLI() also allows you to define many error handing methods, but to
my
knowledge, nobody ever uses this powerful feature).
I have labored for years about the "&" and what is really important. I am
working on a new version
of Judy and beginning to think of whether to change the Judy name and API. All
comments
are welcome from all.
BTW, JudySL is actually implemented as a JudyL array of JudyL arrays with the
depth
extended to support the length of the string passed to JudySL. This is the
secondary
reason for the "&" in &PArray -- the small JudyL(1,2,3 elements) arrays need
to be very
memory efficient.
Doug
Doug Baskins <[EMAIL PROTECTED]>
----- Original Message ----
From: Len D'Alberti <[EMAIL PROTECTED]>
To: [email protected]
Sent: Thursday, May 22, 2008 11:08:47 PM
Subject: array of JudySL arrays
hi there - I've been playing with JudySL for a few days now and it would seem
to fit in perfectly with a project I am currently working on.
I need help, though, understanding how to create an array of JudySL arrays, so
that I can go from this:
void * PArray = (Pvoid_t) NULL;
...
PPValue = JudySLIns (& PArray, record, &JError);
...
PPValue = JudySLGet( & PArray, needle, 0 );
(which works great when I'm looking at only one file and one JudySL array)
to something like this:
void * PArray[100]
...
PValue = JudySLIns (& PArray[i], record, &JError);
...
PPValue = JudySLGet( & PArray[i], needle, 0 );
which doesn't appear to work (fyi: I need to be able to search a bunch of files
and determine which file where it was found).
I suspect that this might be more of a C question, since I'm not as well versed
in C as I'd like to be.
what am I missing? hope I'm not doing something incredibly stupid...
thanks.
-Len
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Judy-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/judy-devel