[Gtk-sharp-list] [PATCH] GLib.Value as a struct

Ben Maurer bmaurer@users.sourceforge.net
Wed, 18 Feb 2004 18:19:27 -0500


--=-0hvtCmFDGVf1BUBGwwVx
Content-Type: text/plain
Content-Transfer-Encoding: 7bit

Hey guys,

Attached is a patch that makes GLib.Value a struct. This gives us tons
of global performance benefits. Basically, we are able to short circit
the GC when using a GLib.Value. Since this is a pretty common construct
in Gtk+ (for example, it is used every time you get or set a value from
a treestore), it gives us a global perf benefit.

One issue I am sure will be brought up is `Why did you write methods
like public void GetProperty (string name, out bool val)'. The issue for
that method is that I would have needed to make GetPropertyBool,
GetPropertyInt32, etc. That would have been nasty to support in the
parser, and is pretty ugly.

Thanks,
Ben

--=-0hvtCmFDGVf1BUBGwwVx
Content-Disposition: attachment; filename=gtksharp-glib-value-struct.patch.bz2
Content-Type: application/x-bzip; name=gtksharp-glib-value-struct.patch.bz2
Content-Transfer-Encoding: base64

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

--=-0hvtCmFDGVf1BUBGwwVx--