2012/10/3 Ahmad Syukri bin Abdollah <[email protected]> > Greetings! > > Not long ago, someone made a binding for GMP > (https://mail.gnome.org/archives/vala-list/2011-August/msg00048.html) > and posted it on the wiki, but it seems to have been lost. > I'm attempting to write a new one, but came across some design > difficulties. > > In the original API, the custom number types are structs. To use them, > they are allocated, initialized, and passed to API functions via its > pointer. > > {snip: C example} > /* declare var using mpz_t, which is typedef'd to the length-1 array > of the struct */ > mpz_t num1, num2; > /* initialize */ > mpz_init_set_ui(num1, 1495); > mpz_init_set_si(num2, -30); > /* do operations */ > mpz_add(num2, num1, num2); > > I managed to conjure a simple binding using struct to interface the > original struct, since you can't typedef a pointer struct in Vala. > But then the usage will look like this: > > {snip: Vala exampe} > mpz_t num1, num2; > mpz.init_set_ui(out num1, 1495); > mpz.init_set_ui(out num2, 1495); > mpz_add(&num2, &num1, &num2); > // or maybe: mpz_add(out num2, out num1, out num2); > > If possible I'd like to avoid having to use ref/out/&. A compact class > seems to be a good substitute, since they are passed by reference by > default. > The problem is, class needs a "new" function, which doesn't exist in > the API (because the types designed as objects). > Can I define what the new function does without having to include an > extra header file? > > Regards, > A. Syukri >
Hi! I think I had a similar problem to yours when writing a vapi for the popular minizip utilities. What they did was typedef a void pointer to an opaque type, which was passed by value, and it seems to me from the C code you provided that it's the same case here as well(?). Anyway, what I did was simply declare the type as a [SimpleType] struct (no pun intended). This solution isn't perfect, but it worked for me. - Jonas
_______________________________________________ vala-list mailing list [email protected] https://mail.gnome.org/mailman/listinfo/vala-list
