digitalmars.D - associativeArray.toHash()
- Michiel (10/10) Feb 21 2007 I'm now implementing the toHash() function of my new Set class. But I'm
- Michiel (11/19) Feb 21 2007 I think I found a way in Phobos, but it might not be the most elegant
- Jarrett Billingsley (13/19) Feb 21 2007 You can use the .getHash method of the typeinfo any type, and it'll use ...
- Michiel (6/26) Feb 22 2007 That also works nicely! I tried something similar, just not exactly like
I'm now implementing the toHash() function of my new Set class. But I'm not sure how to extract hash-information from an associative array of which the key-type can be anything. The values are irrelevant. So you might see the problem as extracting hash-information from its .keys array. I'm sure the hash-information of its key-type can be retrieved, since that's how the associative array works in the first place. How do I retrieve it manually? Thanks! -- Michiel
Feb 21 2007
Michiel wrote:I'm now implementing the toHash() function of my new Set class. But I'm not sure how to extract hash-information from an associative array of which the key-type can be anything. The values are irrelevant. So you might see the problem as extracting hash-information from its .keys array. I'm sure the hash-information of its key-type can be retrieved, since that's how the associative array works in the first place. How do I retrieve it manually?I think I found a way in Phobos, but it might not be the most elegant one. I used std.boxer to pack each element of the array into a box. Then I call the Box.toHash() function on each and use the sum to calculate the sets hash. Is there a better way? It does seem to work. I can now have sets of sets of sets of whatever, and it still works as expected. I'll continue to tweak the class a bit and then I'll publish it here. -- Michiel
Feb 21 2007
"Michiel" <nomail please.com> wrote in message news:eritp3$d3j$1 digitalmars.com...Michiel wrote: I think I found a way in Phobos, but it might not be the most elegant one. I used std.boxer to pack each element of the array into a box. Then I call the Box.toHash() function on each and use the sum to calculate the sets hash. Is there a better way?You can use the .getHash method of the typeinfo any type, and it'll use the built in hashing function. class Set(T) { ... T[] values; // or however you store them void someFunc(T data) { hash_t hash = typeid(T).getHash(&data); } }
Feb 21 2007
Jarrett Billingsley wrote:That also works nicely! I tried something similar, just not exactly like that. Anyway, it's more elegant than my box way. Thanks! -- MichielI think I found a way in Phobos, but it might not be the most elegant one. I used std.boxer to pack each element of the array into a box. Then I call the Box.toHash() function on each and use the sum to calculate the sets hash. Is there a better way?You can use the .getHash method of the typeinfo any type, and it'll use the built in hashing function. class Set(T) { ... T[] values; // or however you store them void someFunc(T data) { hash_t hash = typeid(T).getHash(&data); } }
Feb 22 2007