// Opaque .cs - Opaque struct wrapper implementation // // Authors: Bob Smith // Mike Kestner // Rachel Hestilow // // Copyright (c) 2001 Bob Smith // Copyright (c) 2001 Mike Kestner // Copyright (c) 2002 Rachel Hestilow // // This program is free software; you can redistribute it and/or // modify it under the terms of version 2 of the Lesser GNU General // Public License as published by the Free Software Foundation. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License along with this program; if not, write to the // Free Software Foundation, Inc., 59 Temple Place - Suite 330, // Boston, MA 02111-1307, USA. namespace GLib { using System; using System.Collections; using System.ComponentModel; using System.Runtime.InteropServices; public class Opaque : IWrapper { // Private class and instance members IntPtr _obj; static Hashtable Opaques = new Hashtable(); /// /// GetObject Shared Method /// /// /// /// Used to obtain a CLI typed object associated with a /// given raw object pointer. This method is primarily /// used to wrap object references that are returned /// by either the signal system or raw class methods that /// return opaque struct references. /// /// /// /// The wrapper instance. /// public static Opaque GetOpaque(IntPtr o) { Opaque obj = (Opaque)Opaques[(int)o]; if (obj != null) return obj; return null; //FIXME: Call TypeParser here eventually. } public Opaque () {} /// /// Opaque Constructor /// /// /// /// Creates an opaque wrapper from a raw object reference. /// public Opaque (IntPtr raw) { Raw = raw; } /// /// Raw Property /// /// /// /// The raw Opaque reference associated with this wrapper. /// Only subclasses of Opaque can access this read/write /// property. For public read-only access, use the /// Handle property. /// protected IntPtr Raw { get { return _obj; } set { Opaques [value] = this; _obj = value; } } /// /// Handle Property /// /// /// /// The raw Opaque reference associated with this object. /// Subclasses can use Raw property for read/write /// access. /// public IntPtr Handle { get { return _obj; } } public override bool Equals (object o) { if (!(o is Opaque)) return false; return (Handle == ((Opaque) o).Handle); } /// /// GetHashCode Method /// /// /// /// Calculates a hashing value. /// public override int GetHashCode () { return Handle.GetHashCode (); } } }