[Click] hastable/HashMap

Paine, Thomas Asa PAINETA at uwec.edu
Fri Oct 5 11:49:37 EDT 2007


Marco,
        What I found was that in hascode.hh there is now defined a hashcode signature for a Template type T, however, it is defined as such...

template <typename T>
inline size_t
hashcode(const T &x)
{
    return x.hashcode();
}

        As a result the hashcode function is matching the signature of fucntion above.  In your case you are passing in a T* (by reference, not that it really matters)  So I think it we would need something like this to avoid your error...

        return x->hashcode();

        But of couse, simply changing this would break non pointer cases.  I'm not sure the best way to work around this though, but I think it explains your error.  I don't *know if you can define both a hashcode(const T &x) and a hashcode(const T* &x).  I suppose you could always define a specific friend function to match your key type, like hashcode(const Packet* &x), but I'm not 100% sure.


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
   Thomas Paine {paineta at uwec.edu)}
   University of Wisconsin - Eau Claire
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


-----Original Message-----
From: click-bounces at pdos.csail.mit.edu [mailto:click-bounces at pdos.csail.mit.edu] On Behalf Of Marco Wenzel
Sent: Friday, October 05, 2007 9:56 AM
To: click at pdos.csail.mit.edu
Subject: [Click] hastable/HashMap

Hi,

since I updated Click to the current git-sources (last version was from
2007-07-10), I've got a problem with the usage of HashTable.
The code

> dsttable->remove(packet);

where dsttable is

> typedef HashMap<Packet*, IPAddress*> DstMap;
> DstMap* dsttable;

and packet is a

> WritablePacket * packet;

causes thefollowing compile-error:

../include/click/hashcode.hh: In function 'size_t hashcode(const T&) [with T =
Packet*]':
../include/click/hashmap.cc:510:   instantiated from 'size_t HashMap<K,
void*>::bucket(const K&) const [with K = Packet*]'
../include/click/hashmap.cc:609:   instantiated from 'bool HashMap<K,
void*>::remove(const K&) [with K = Packet*]'
../elements/local/myelement.cc:49:   instantiated from here
../include/click/hashcode.hh:9: error: request for member 'hashcode' in 'x',
which is of non-class type 'Packet* const'

It worked correctly before and I don't know how to interpret this error. Sorry,
if this question is too trivial, but if anyone could help me, I would be very
glad. Thanks a lot.

Regards,
Marco.

----------------------------------------------------------------
This message was sent using IMP, the Internet Messaging Program.
_______________________________________________
click mailing list
click at amsterdam.lcs.mit.edu
https://amsterdam.lcs.mit.edu/mailman/listinfo/click



More information about the click mailing list