Yes, that's what I thought too.

However, looking at GtkBuilder's source code, it has a function called
type_name_mangle which converts a name like "GtkButton" to
"gtk_button_get_type", then uses GModule to load that function.  Vala's C
generation seems to create a function of the same/similar naming
convention, so the equivalent of typeof(Weapon) in C is weapon_get_type().

As a sketch, I suppose something like this ought to work:

[CCode (has_target=false)]
private delegate Type TypeOf();
...
var module = Module.open(null, 0); // opens the program itself instead of a
different module
TypeOf get_type;
module.symbol("weapon_get_type", (void*) &get_type); // the real program
needs to generate the name and check the return value here
Type type = get_type();

Object obj = Object.create(type, "damage", 10);
...


On Tue, Mar 22, 2016 at 2:19 AM, Felipe Lavratti <felipe...@gmail.com>
wrote:

> Hello, this is the minimum workaround I found to work, there might be a
> simpler way of forcing the registration of non-literally used classes in
> the GObject system.
>
> public class Weapon : Object {
>   public uint damage { get; construct; }
> }
>
> int main () {
>
>     /* Force class registration here, comment this line to see the
> execution failing. */
>     var klass = typeof(Weapon);
>
>     Type WeaponType = Type.from_name("Weapon");
>     Object weapon = Object.new(WeaponType, damage: 10);
>
>     GLib.message("weapon.damage = %u", (weapon as Weapon).damage);
>
>     return 0;
> }
>
>
> On Mon, Mar 21, 2016 at 10:47 AM Gergely Polonkai <gerg...@polonkai.eu>
> wrote:
>
>> Hello,
>>
>> for the first sight your format looks verybsimilar to key-value files
>> already supported by GLib:
>>
>> https://developer.gnome.org/glib/stable/glib-Key-value-file-parser.html
>> http://valadoc.org/#!api=glib-2.0/GLib.KeyFile
>>
>> Are you sure it won't work for your problem? If it would, you may want to
>> subclass it.
>>
>> Best,
>> Gergely
>> On Mar 21, 2016 2:26 PM, "Alan Manuel Gloria" <almkg...@gmail.com> wrote:
>>
>> > Hi Vala world,
>> >
>> > I'm trying to make some kind of description loader.  I have a base class
>> > like so:
>> >
>> > class Concept : Object {
>> >   string name { get; construct; }
>> >   string desc { get; construct; }
>> > }
>> >
>> > And one or more classes, e.g.:
>> >
>> > class Component : Concept {
>> >   uint size { get; construct; }
>> >   uint cost { get; construct; }
>> > }
>> > class Weapon : Component {
>> >   uint damage { get; construct; }
>> > }
>> >
>> > My goal is to parse some text file like so:
>> >
>> > [Blaster I]
>> > type = Weapon
>> > desc = A simple blaster.
>> > size = 20
>> > cost = 200
>> > damage = 1
>> >
>> > Then the parser class will provide a collection of Concept objects
>> > indexable by name and type.
>> >
>> > My question is, how do I best do this?  Gtk.Buildable seems to
>> approximate
>> > what I want, so I suppose I need to figure out how that works.
>> >
>> > My initial research seems to suggest that I need to use GLib.Type
>> somehow,
>> > but my understanding is that the exact type does not get created until
>> it
>> > is used.  It seems to me that I'd need code like:
>> >
>> > var p = new MyTextFileParser();
>> > p.register(typeof(Component));
>> > p.register(typeof(Weapon));
>> > // ... and so on ...
>> >
>> > Thanks in advance.
>> >
>> > Sincerely,
>> > AmkG
>> > _______________________________________________
>> > vala-list mailing list
>> > vala-list@gnome.org
>> > https://mail.gnome.org/mailman/listinfo/vala-list
>> >
>> _______________________________________________
>> vala-list mailing list
>> vala-list@gnome.org
>> https://mail.gnome.org/mailman/listinfo/vala-list
>>
>
_______________________________________________
vala-list mailing list
vala-list@gnome.org
https://mail.gnome.org/mailman/listinfo/vala-list

Reply via email to