diff --git a/ChangeLog b/ChangeLog index a063286b5..c0218ca58 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2001-09-28 Mike Kestner + + * glib/Value.cs (~Value): New destructor to release g_malloc'd space. + (default ctor): New default ctor just mallocs without init. + (String ctor): call default + (bool ctor): call default + (Init): New post construct initializer. + (String exp cast): Replaces ToString method. + (bool exp cast): New for bool extraction. + (MarshalAs): Renamed prop was RawValue. + 2001-09-27 Mike Kestner * glib/Object.cs : Docs for everything. Made Objects hash private. diff --git a/glib/Value.cs b/glib/Value.cs index 3d724cfcf..34829c664 100755 --- a/glib/Value.cs +++ b/glib/Value.cs @@ -22,47 +22,109 @@ namespace GLib { IntPtr _val; - // We use g_malloc0 and g_free to put the GValue on the - // heap to avoid some marshalling pain. - [DllImport("glib-1.3.dll")] - static extern IntPtr g_malloc0 (long n_bytes); + + // Destructor is required since we are allocating unmananged + // heap resources. + [DllImport("glib-1.3.dll")] static extern void g_free (IntPtr mem); - [DllImport("gobject-1.3.dll")] - static extern void g_value_init (IntPtr val, - TypeFundamentals type); + ~Value () + { + g_free (_val); + } + /// /// Value Constructor /// /// /// - /// Constructs a Value from a spectified string. + /// Creates an uninitialized Value on the unmanaged heap. + /// Use the Init method prior to attempting to assign a + /// value to it. + /// + + [DllImport("glib-1.3.dll")] + static extern IntPtr g_malloc0 (long n_bytes); + + public Value () + { + _val = g_malloc0 (5 * IntPtr.Size); + } + + /// + /// Value Constructor + /// + /// + /// + /// Constructs a Value from a specified boolean. + /// + + [DllImport("gobject-1.3.dll")] + static extern void g_value_set_boolean (IntPtr val, + bool data); + public Value (bool val) : this () + { + g_value_init (_val, TypeFundamentals.TypeBoolean); + g_value_set_boolean (_val, val); + } + + /// + /// Value Constructor + /// + /// + /// + /// Constructs a Value from a specified string. /// [DllImport("gobject-1.3.dll")] static extern void g_value_set_string (IntPtr val, String data); - [DllImport("gobject-1.3.dll")] - static extern void g_value_set_boolean (IntPtr val, - bool data); - - public Value (bool val) + public Value (String val) : this () { - _val = g_malloc0 (5 * IntPtr.Size); - g_value_init (_val, TypeFundamentals.TypeBoolean); - g_value_set_boolean (_val, val); - } - - public Value (String str) - { - _val = g_malloc0 (5 * IntPtr.Size); g_value_init (_val, TypeFundamentals.TypeString); - g_value_set_string (_val, str); + g_value_set_string (_val, val); } /// - /// GetString Method + /// Init Method + /// + /// + /// + /// Prepares a raw value to hold a specified type. + /// + + [DllImport("gobject-1.3.dll")] + static extern void g_value_init (IntPtr val, + TypeFundamentals type); + + public void Init (TypeFundamentals type) + { + g_value_init (_val, type); + } + + /// + /// Value to Boolean Conversion + /// + /// + /// + /// Extracts a bool from a Value. Note, this method + /// will produce an exception if the Value does not hold a + /// boolean value. + /// + + [DllImport("gobject-1.3.dll")] + static extern bool g_value_get_boolean (IntPtr val); + + public static explicit operator bool (Value val) + { + // FIXME: Insert an appropriate exception here if + // _val.type indicates an error. + return g_value_get_boolean (val._val); + } + + /// + /// Value to String Conversion /// /// /// @@ -74,22 +136,22 @@ namespace GLib { [DllImport("gobject-1.3.dll")] static extern String g_value_get_string (IntPtr val); - public String GetString () + public static explicit operator String (Value val) { // FIXME: Insert an appropriate exception here if // _val.type indicates an error. - return g_value_get_string (_val); + return g_value_get_string (val._val); } /// - /// RawValue Property + /// MarshalAs Property /// /// /// - /// Read only. Accesses a pointer to the Raw GValue. + /// Read only. Accesses a pointer to the raw GValue. /// - public IntPtr RawValue { + public IntPtr MarshalAs { get { return _val; }