[ruby-talk:02408] Re: Ruby/Glade usage questions.

From: ts <decoux@...>
Date: 2000-04-09 14:48:59 UTC
List: ruby-talk #2408
>>>>> "t" == ts  <decoux@moulon.inra.fr> writes:

Y> if so, how do you handle c pointers?

t>  it depend if you can translate it to a ruby object.

 Well my message is not very explicit, i.e. a little example with 2 struct

    typedef struct {
        int i;
        char *s;
        tutust *tutu;
    } totost;
    
    typedef struct {
        int j;
    } tutust;

 If you want to dump a struct totost, you must first dump all struct
 tutust (only once), in a hash for example :

  tutu = {"tutu1" => 12, "tutu2" => 24, ... }

 then you can dump totost as an array :

  toto = [ 12, "toto", "tutu2"]

 i.e. the C pointer is replaced by the key of tutu

 When you reload it, you first reload the hash tutu to re-create all the
 struct tutust, then when you load toto you re-create the pointer "tutust
 *tutu" 

 You can do this if you can translate all your struct in a ruby object.

 You'll have some problem if, for example, the struct tutust is :

    typedef struct {
        FILE *fd;
    } tutust;

 it must be changed to :

    typedef struct {
        char *name, *mode;
        FILE *fd;
    } tutust;

 in this case you dump, the name and the mode and when you load it you
 re-open the fd with this information.

 With something like this, I was able to dump the struct NODE (from
node.h), well in my case it's was easier to modify marshal.c to handle
T_NODE :-) :-)


Guy Decoux



In This Thread

Prev Next