Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

Re^6: Bidirectional lookup algorithm? (Judy)

by oiskuu (Hermit)
on Jan 13, 2015 at 01:44 UTC ( [id://1113018]=note: print w/replies, xml ) Need Help??


in reply to Re^5: Bidirectional lookup algorithm? (Judy)
in thread Bidirectional lookup algorithm? (Updated: further info.)

A long long typedef would break your assumption on x32 ABI. Fortunately, there is a type that should fit the bill exactly. You can use typedef ptrdiff_t Word_t; (and ssize_t is almost always the same size as well).

$ echo | gcc -mx32 -dM -E - | grep SIZEOF

Funny about the JU_LEASTBYTESMASK macro—it still doesn't appear quite right. Diligently the BITSPERBYTE is incorporated, but then, in the same definition, the 0x100 constant assumes 8 bits per byte ...

Replies are listed 'Best First'.
Re^7: Bidirectional lookup algorithm? (Judy)
by BrowserUk (Patriarch) on Jan 13, 2015 at 04:36 UTC
    A long long typedef would break your assumption on x32 ABI.

    I meant (and thought I'd implied) "on 64-bit systems".

    But you are right, there are probably better choices.

    Fortunately, there is a type that should fit the bill exactly. You can use typedef ptrdiff_t Word_t;

    ptrdiff_t is described as: "Result of subtraction of two pointers.".

    Which means it is a signed type, which might have implications for the kind of bit manipulations -- shifts and masking -- the judy code performs.

    uintptr_t would probably be a better choice: "uintptr_t: An unsigned integer or unsigned __int64 version of intptr_t.".

    (and ssize_t is almost always the same size as well).

    There doesn't appear to be a ssize_t defined by the MS compiler.

    There's size_t defined as:"Result of sizeof operator.", (as used by Perl's STRLEN type), which seems to happily coexist with any of U32/I32 or U64/I64 variables as counters in your typical for loop.


    With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice. Agile (and TDD) debunked
Re^7: Bidirectional lookup algorithm? (Judy)
by syphilis (Archbishop) on Jan 13, 2015 at 02:26 UTC
    Funny about the JU_LEASTBYTESMASK macro—it still doesn't appear quite right

    Yes, and it seems to have some involvement in the errors that kill the build.
    In JudyInsArray.c we have:
    static Word_t subexp_mask[] = { 0, ~cJU_POP0MASK(1), ~cJU_POP0MASK(2), ~cJU_POP0MASK(3), #ifdef JU_64BIT ~cJU_POP0MASK(4), ~cJU_POP0MASK(5), ~cJU_POP0MASK(6), ~cJU_POP0MASK(7), #endif
    There's no problem with the first 5 elements listed there, but in relation to ~cJU_POP0MASK(5), ~cJU_POP0MASK(6) and ~cJU_POP0MASK(7) we get the error that they are not constant expressions ("initializer element is not constant"), thus breaking C's rules.

    And in JudyCommon/JudyPrivateBranch.h we find:
    #define cJU_POP0MASK(cPopBytes) JU_LEASTBYTESMASK(cPopBytes)
    Cheers,
    Rob

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1113018]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others contemplating the Monastery: (2)
As of 2026-04-14 00:30 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?
    hippoepoptai's answer Re: how do I set a cookie and redirect was blessed by hippo!
    erzuuliAnonymous Monks are no longer allowed to use Super Search, due to an excessive use of this resource by robots.