Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

Re: PerlApi: hashes

by Anonymous Monk
on Aug 12, 2015 at 02:32 UTC ( [id://1138256]=note: print w/replies, xml ) Need Help??


in reply to PerlApi: hashes

http://perldoc.perl.org/perlapi.html#hv_exists_ent bool hv_exists_ent(HV *hv, SV *keysv, U32 hash)

Replies are listed 'Best First'.
Re^2: PerlApi: hashes
by Anonymous Monk on Aug 12, 2015 at 02:38 UTC
      HeHASH Returns the computed hash stored in the hash entry. U32 HeHASH(HE* he)

      Which is fine ... Er, actually, it is terminally stupid.

      In order to obtain the HE* for a key, I first need to look it up; and in order to lookup the key, I need to calculate the hash value!

      Reminds me of the old joke: Anti-thirst pills; take two in a glass of water.


      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". I knew I was on the right track :)
      In the absence of evidence, opinion is indistinguishable from prejudice.
      I'm with torvalds on this Agile (and TDD) debunked I told'em LLVM was the way to go. But did they listen!
Re^2: PerlApi: hashes
by BrowserUk (Patriarch) on Aug 12, 2015 at 04:28 UTC
    hv_exists_ent()

    But if I supply the hash value, why does it need the keysv?

    If all I have is the string and its length (the normal case), it means I have to construct an SvPV which is surely more computationally and time costly than simply recalculating the hash; as it requires a several memory allocations.


    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". I knew I was on the right track :)
    In the absence of evidence, opinion is indistinguishable from prejudice.
    I'm with torvalds on this Agile (and TDD) debunked I told'em LLVM was the way to go. But did they listen!
        hello? https://metacpan.org/pod/Hash::Util#hash_value

        Nice find! But, it doesn't help :(

        I can use the PERL_HASH macro to obtain the hash value; but even if I set up an SV with the key for hv_exists_ent() to ignore; it complains: Use of uninitialized value in subroutine entry; for every iteration; and apparently does nothing?

        HV* countColors( SV *img ) { STRLEN l; U32 *rgba = (U32*)SvPVx( img, l ), i; HV* counts = newHV(); SV *dummy = newSV( 4 ); l /= 4; for( i = 0; i < l; ++i ) { U32 hash; PERL_HASH( (U32)hash, (char*)&rgba[ i ], 4 ); SvPV_set( dummy, (char*)&rgba[ i ] ); if( hv_exists_ent( counts, dummy, hash ) ) { SV **val = hv_fetch( counts, (char*)&rgba[ i ], 4, hash ); SvIV_set( *val, SvIV( *val ) + 1 ); } else { SV *val = newSViv( 1 ); hv_store( counts, (char*)&rgba[ i ], 4, val, hash ); } } return counts; }

        Even if I could work out (why do I have to guess? Why isn't this stuff documented?) how to persuade hv_exists_ent() to use the pre-calculated hash value and ignore the SV it requires, setting that SV up costs more than recalculating the hash does -- which is what I was trying to avoid.

        What a dumb api.


        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". I knew I was on the right track :)
        In the absence of evidence, opinion is indistinguishable from prejudice.
        I'm with torvalds on this Agile (and TDD) debunked I told'em LLVM was the way to go. But did they listen!

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (5)
As of 2024-04-20 01:07 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found