Re: [Vala] Inspecting class hierarchy

2016-03-21 Thread Gergely Polonkai
Hello,

I do something similar in matrix-glib-sdk[1]: I get one specific key from a
JSON object, and based on that key I create different types of objects. For
that I have a type registry, which tells me what objects must be created
for what event type.

Your GtkBuilder approach also looks nice, although GTK would be a too heavy
dependency for my project.

Best,
Gergely

[1]
https://github.com/gergelypolonkai/matrix-glib-sdk/blob/develop/src/matrix-event-base.vala
On Mar 21, 2016 10:37 PM, "Alan Manuel Gloria"  wrote:

> 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*) _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 
> 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 
>> 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" 
>>> 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


Re: [Vala] Inspecting class hierarchy

2016-03-21 Thread Alan Manuel Gloria
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*) _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 
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 
> 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"  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


Re: [Vala] Inspecting class hierarchy

2016-03-21 Thread Alan Manuel Gloria
Yes, that's the intent, my question is how to inspect the class definitions
from Vala within Vala code, so that if I know I want to build a Weapon or a
Component from the keyfile, I can get access to the GLib.Type object for it.

On Mon, Mar 21, 2016 at 9:47 PM, Gergely Polonkai 
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"  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


Re: [Vala] Inspecting class hierarchy

2016-03-21 Thread Felipe Lavratti
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 
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"  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


Re: [Vala] Inspecting class hierarchy

2016-03-21 Thread Gergely Polonkai
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"  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