Clever! Nice solution, Sebastian From: Sebastian Reichel Sent: 7/19/2012 7:43 PM To: Nadir Sampaoli Cc: vala-list@gnome.org Subject: Re: [Vala] Unions in Vala On Wed, Jul 18, 2012 at 08:19:29PM +0200, Nadir Sampaoli wrote: > I'm porting some code I wrote from procedural C to objective Vala and I'm > looking for the Vala-way to implement a union. I'm using a union in C > because I need a structure where one uin16_t and two uint8_t are aligned: > > typedef struct { > uint8_t lo; > uint8_t hi; > } WORD; > > typedef union { > uint16_t reg16; > WORD reg8; > } REG; > > This way if I change reg8.hi's (or .lo's, for what matters) value, > reg16changes automatically.Now, in Vala, as far as I have been able to > find in > the documentation (I just started studying Vala, coming from a C# > background) there's no union keyword, and pointers are missing too. > If there's no union-like thing in Vala, is there at least some way to make > a built-in type referenceable (something like .NET's Int vs int)? > I have a last resort solution, but it's rather inefficient, so I'd like to > know if I can reproduce the original C code behaviour.
How about defining the union in C and making it available in Vala with a vapi file? == reg.h == #include <stdint.h> typedef struct { uint8_t lo; uint8_t hi; } WORD; typedef union { uint16_t reg16; WORD reg8; } REG; == reg.vapi == [CCode (cheader_filename = "reg.h")] public struct WORD { uint8 lo; uint8 hi; } [CCode (cheader_filename = "reg.h")] public struct REG { uint16 reg16; WORD reg8; } == test.vala == public static int main(string[] args) { REG register = REG(); register.reg16 = 0; register.reg8.lo = 0x23; register.reg8.hi = 0x42; stdout.printf("%04x\n", register.reg16); return 0; } == demo == $ valac test.vala reg.vapi $ ./test 4223 -- Sebastian _______________________________________________ vala-list mailing list vala-list@gnome.org https://mail.gnome.org/mailman/listinfo/vala-list