ExpandCollapsePrev Next Index

+ 3.1 Binding Shortcuts

To make it a bit easier there are some shortcuts when making bindings.

+ 3.1.1 All arguments $a

For a function or procedure you can write this:

  fun add: int * int -> int = "add($a)";

where {$a} just means the same as {$1,$2} in this case. Useful for functions with a lot of arguments.

+ 3.1.2 Default definition

You can also default the definition of a function or procedure by just leaving it out:

  fun f: int * int -> int;

which is the same as if {f($1,$2)} had been specified. This only works for C functions, since there's no way to put a C++ namespace in.

+ 3.1.3 Multiple C types

you can bind one or more Felix types to C types of the same name:

  ctypes myint, mylong;

+ 3.1.4 Enumerations

In Felix you can bind a C enumeration like:

  cenum myenum = one,two,three;

This defines the type myenum, and also constants one, two, three equal to their C values. The type is also equipped with equality and inequality comparisons automatically.

+ 3.1.5 Flags

C enumerations are sometimes used for flags bits. So you can write this:

  cflags myflags = flag1, flag2, flag3;

This type is provided with equality {==} and inequality {!=} as well as bitwise operations: bitwise or {\|}, bitwise and {\&}, bitwise exclusive or {\^} and bitwise not (complement) {~}.