Brian Schröäer wrote: > Hello Group, > > in an extension I'm writing I'd like to hash ruby objects to > c-structs. I'd like to do this without wrapping the c-structs again in > ruby objects, because that would double the number of object creations > and GC actions. I could take the st_hash and partially redo ruby's > hash wrapping to achieve what I want, but maybe there is a nicer way > to do this? > > I want my hash to behave like a ruby hash regarding wrapping of string > arguments etc. That means I do not simply want to hash VALUES to void* > pointers but first freeze strings an do the things ruby does (if > possible without copying the code in hash.c, such that my extension > will always be in sync with ruby's behaviour.) Not sure I understand, but what about using a ruby Hash whose values are ruby Integers that happen to be the addresses of your c-structs? To access from C, all you have to do is use NUM2ULONG() to convert an Integer hash value to the pointer. Of course, if the address doesn't fit in a Fixnum, there will be an extra allocation anyway... -- vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407