Re: [Vala] predefined strings and vapi files



Hi,

On Mon, 2008-04-21 at 00:08 +0200, Klaus Rotter wrote:
I have started coding with vala and I really like it! Great work! It is
really a big step ahead compared to plain C gtk programming.

Thanks.

But I have some questions:

1) I often use some preprocessor strings in my C code like __DATE__
__TIME__. Is this feature also available in vala?

No, these preprocessor strings are not supported at the moment. You
could use them by declaring them in a .vapi file:

        [CCode (cname = "__DATE__")]
        public const string __DATE__;

2) Something more complicated. I want to write a vapi file for the
tremor integer vorbis lib. As far I understand, I have to make a class
file of every struct I want to use. But I must only put the interesting
stuff of the c struct inside the class file, because every class is
translated to the complete c-struct at compile time.

Vala supports both, classes and structs. The difference is that a class
is assumed to be heap-allocated and to have reference-type semantics. A
struct may be stack-allocated and has value-type semantics. You have to
decide for each C struct whether it better fits a Vala class or struct.

I have the following c-calls: (OggVorbis_File is the basic typedef'd
struct)

extern int ov_clear(OggVorbis_File *vf);
extern int ov_open(FILE *f,OggVorbis_File *vf,char *initial,longibytes);
extern long ov_bitrate(OggVorbis_File *vf);

I want to write a vapi which lets me act like that:

var ov = new OggVorbisFile();
ov.open("test.ogg");
bitrate = ov.get_bitrate();

and it should be translated to something like that: (Pseudocode)

ov = g_malloc(sizeof(OggVorbis_File)); 
FILE f = g_fopen("test.ogg","r"); 
ov_open(f,ov,NULL,NULL);
bitrate = ov_bitrate(ov);
...
ov_clear(ov);
g_free(ov);

Can vapi does this for me or do I have to write some c stubs or better a
vala class. How do I enable error handling with try {...} catch if the
file could not be opened?
Maybe the best will be that I define a basic class with vapi to access
the c-lib-calls and put everything else in a derived vala class which
handels errors and more.

This sounds about right. If you want error handling with try catch and
an API like the above, you need a wrapper library, i.e. a .vapi and one
or more .vala files. OggVorbis_File should be declared as a struct in
the .vapi as it's not heap-allocated by its own.

Jürg




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]