On Fri, 2009-01-30 at 02:01 +0100, Michael 'Mickey' Lauer wrote:
> Ok, here's what I have so far:
> 
> ----------------
>     [CCode (cname = "fd_set", cheader_filename = "sys/select.h", 
> free_function 
> = "")]
>     [Compact]
>     public class FdSet
>     {
>         [CCode (cname = "FD_CLR", instance_pos=1.1)]
>         public void clear (int fd);
>         [CCode (cname = "FD_ISSET", instance_pos=1.1)]
>         public bool isSet (int fd);
>         [CCode (cname = "FD_SET", instance_pos=1.1)]
>         public void set (int fd);
>         [CCode (cname = "FD_ZERO")]
>         public void zero ();
>     }

FdSet should be a struct, not a class, we do not need reference type
semantics here. This eliminates unnecessary heap allocation. FD_ZERO
should be bound as initialization method as it just zeroes the streuct.

[CCode (cname = "fd_set", cheader_filename = "sys/select.h"]
public struct FdSet {
    [CCode (cname = "FD_CLEAR")]
    public FdSet ();
    ...
}

> I'm trying to use this like that:
> ----------------
>         var readfds = new Posix.FdSet();
>         var writefds = new Posix.FdSet();
>         var exceptfds = new Posix.FdSet();
>         Posix.TimeVal t = { 0, 0 };
>         int maxfd = 10;
>         int result = Posix.select( maxfd, readfds, writefds, exceptfds, t );
> ----------------

When changed to a struct, it should be used as follows (untested):

    var readfds = Posix.FdSet ();
    var writefds = Posix.FdSet ();
    var exceptfds = Posix.FdSet ();
    Posix.TimeVal t = { 0, 0 };
    int maxfd = 10;
    int result = Posix.select (maxfd, ref readfds, ref writefds, ref exceptfds, 
ref t);

> 
> The code compiles, but emits two warnings:
> 
> src/multiplexer.vala:162.13-162.75: warning: result variable type 
> incompatible 
> with return type

This warning is currently completely harmless. Vala prints this warning
if you declare a local variable called `result' whose type is different
from the return type of the method where the variable has been declared.
The reason is that I am considering introducing an implicit `result'
variable for the return value. This might be useful in some cases, for
example, in connection with method postconditions.

Jürg

_______________________________________________
Vala-list mailing list
Vala-list@gnome.org
http://mail.gnome.org/mailman/listinfo/vala-list

Reply via email to