On Tue, 2008-07-15 at 07:55 +0100, Sam Liddicott wrote: 
> I've been writing a VFS module for Samba4 for the last 9 months, and I'd 
> like to start migrating the work to Vala, because I'd rather use Vala to 
> write my work in.

Sounds interesting.

> First: Samba makes heavy use of unions, which Vala doesn't support. Dang:
> 
> See: interfaces.h line 1666, the smb_read union
> http://gitweb.samba.org/?p=samba.git;a=blob;f=source/libcli/raw/interfaces.h;h=537041c13762833287f946748fe08ea8e0386247;hb=v4-0-test#l1666
> 
> As I will be incrementally porting to Vala (not wrapping all structs in 
> one go) I still need to be able to access the struct and it's different 
> union members from Vala.
> 
> How can I manage this?

Using unions from Vala should work fine (assuming they don't require
complicated memory management). They are in some way just structs with a
very special layout, so you can bind them just like structs. However,
Vala doesn't support defining your own unions in Vala code.

> The first struct I intend to wrap is struct ntvfs_ops, as that struct 
> define my base object; see:
> http://gitweb.samba.org/?p=samba.git;a=blob;f=source/ntvfs/ntvfs.h;h=5de8a8b6491cd7e0f81915907de5b4fbc8153a47;hb=v4-0-test#l43
> 
> It IS a virtual method table, which a particular module has to fill in 
> with all the methods:
> http://gitweb.samba.org/?p=samba.git;a=blob;f=source/ntvfs/cifs/vfs_cifs.c;h=844fa11cc5f584df597b0c791386b07354d08c98;hb=v4-0-test#l1089
> but more complicatedly, along with a couple of attributes (ops.name, 
> ops.type).
> It is registered on line 1137
> 
> So I don't know where to start to wrap this, to be able to tell vala 
> where to store the methods compatibly with samba.

That seems like you want support for virtual methods in compact classes
or maybe something like compact interfaces. Not sure to what extent we
want to support this. If you have concrete proposals, how Vala could
support this without being specifically tied to how the ntvfs_ops struct
works, we can certainly discuss this.

It should be possible to bind and use ntvfs_ops by declaring a delegate
for each vfunc type and adding a field for each vfunc to the bound
struct/class. You'd have to manually connect the delegates in some init
functions, then, just like in C, i.e. you can't use `override` like
that.

Juerg


_______________________________________________
Vala-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/vala-list

Reply via email to