Trying to write simple example following your description

...

typedef struct {
        int screen;
        int views;
        int active;
        int storage;
} Watch_t;

...
Pvoid_t dict = (Pvoid_t) NULL;

int set_to_storage(char *key, Watch_t *val) {
        PWord_t *PV;

        JSLI(PV, dict, key); //first warning goes here

        if (PV) {
                *PV = (PWord_t) val;
                return 0;
        } else {
                return 1;
        }
}

int get_from_storage(char *key, Watch_t *val) {
        PWord_t *PV;

        JSLG(PV, dict, key); //first warning goes here

        if (PV) {
                *val = (Watch_t) *PV; //error goes here.
//              *val = (Watch_t) PV; //error goes here.

        return 0;
    } else {
        return 1;
    }
}

It doesn't compile with following issues:

1). warning: pointer targets in passing argument 2 of ‘JudySLIns’
differ in signedness. - I suppose, i should cast somewhere to
unsigned, but not sure where exactly.

2). error: conversion to non-scalar type requested.

What I'm doing wrong?

2009/5/12 Alan Silverstein <[email protected]>:
> Rauan et al,
>
>> I want to create kind of associative array or hashmap and due to lack
>> of simple examples (quickstarts)...
>
> Sorry about that.
>
>> ...don't know what type of judy array to use, and how to implement it.
>
> I'll try to help.
>
>> My task is:  I have unique string hash, e.g.  "asdczxtdfdgk" (if it
>> does make sense, length of hash is persistent).  By this hash i want
>> to get object/struct or array of values.
>>
>> Could you provide simple example?
>
> Yes, but let's talk about your hash string first.  Why use a hash at all
> with libJudy, when it takes CPU time to compute the hash key, and
> there's some risk of collision no matter how good is your algorithm?
>
> Let's say instead that you have an actual C string as your key/index,
> and you want to map it to a malloc()'d object of whatever kind you like.
> The "liberating" concept here is that storing a very long string can
> still be very fast and cheap.  The code (using the macros and ignoring
> error handling) looks like this:
>
>    mydata_pt mydatap;          // your pre-malloc()'d data record.
>    char *    index;            // a key to save.
>    char      index2[MAXSIZE];  // for traversing JudySL array.
>    Pvoid_t   jsl = NULL;       // the JudySL array.
>    PWord_t   valuep;           // current value.
>    PWord_t   rcw;              // for JSLFA().
>
> // Save a value:
>
>    ...
>    JSLI(valuep, jsl, index);
>    *valuep = (PWord_t) mydatap;
>    ...
>
> // Traverse all keys (strings) in simple-sort order:
>
>    index2[0] = '\0';
>    JSLF(valuep, jsl, index2);
>
>    while (valuep != NULL)
>    {
>        DoSomethingWith(index2, (mydata_pt) *valuep);
>        JSLN(valuep, jsl, index2);
>    }
>
> // Erase array; must visit and free() each value record first:
> // (Not necessary if the data fits directly in the value word.)
>
>    index2[0] = '\0';
>    JSLF(valuep, jsl, index2);
>
>    while (valuep != NULL)
>    {
>        free((void *) (*valuep));
>        JSLN(valuep, jsl, index2);
>    }
>    JSLFA(rcw, jsl);
>
> ----------------------
>
> Now, does that help?
>
> Alan Silverstein
>

------------------------------------------------------------------------------
The NEW KODAK i700 Series Scanners deliver under ANY circumstances! Your
production scanning environment may not be a perfect world - but thanks to
Kodak, there's a perfect scanner to get the job done! With the NEW KODAK i700
Series Scanner you'll get full speed at 300 dpi even with all image 
processing features enabled. http://p.sf.net/sfu/kodak-com
_______________________________________________
Judy-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/judy-devel

Reply via email to