// This file was generated by the Gtk# code generator.
// Any changes made will be lost if regenerated.

namespace Pango {

	using System;
	using System.Collections;
	using System.Collections.Generic;
	using System.Runtime.InteropServices;

#region Autogenerated code
	[StructLayout(LayoutKind.Sequential)]
	public partial struct Analysis : IEquatable<Analysis> {

		private IntPtr _shape_engine;
		public Pango.EngineShape ShapeEngine {
			get {
				return _shape_engine == IntPtr.Zero ? null : (Pango.EngineShape) GLib.Opaque.GetOpaque (_shape_engine, typeof (Pango.EngineShape), false);
			}
			set {
				_shape_engine = value == null ? IntPtr.Zero : value.Handle;
			}
		}
		private IntPtr _lang_engine;
		public Pango.EngineLang LangEngine {
			get {
				return _lang_engine == IntPtr.Zero ? null : (Pango.EngineLang) GLib.Opaque.GetOpaque (_lang_engine, typeof (Pango.EngineLang), false);
			}
			set {
				_lang_engine = value == null ? IntPtr.Zero : value.Handle;
			}
		}
		private IntPtr _font;
		public Pango.Font Font {
			get {
				return GLib.Object.GetObject(_font) as Pango.Font;
			}
			set {
				_font = value == null ? IntPtr.Zero : value.Handle;
			}
		}
		public byte Level;
		public byte Gravity;
		public byte Flags;
		public byte Script;
		private IntPtr _language;
		public Pango.Language Language {
			get {
				return _language == IntPtr.Zero ? null : (Pango.Language) GLib.Opaque.GetOpaque (_language, typeof (Pango.Language), false);
			}
			set {
				_language = value == null ? IntPtr.Zero : value.Handle;
			}
		}
		private IntPtr _extra_attrs;

		public static Pango.Analysis Zero = new Pango.Analysis ();

		public static Pango.Analysis New(IntPtr raw) {
			if (raw == IntPtr.Zero)
				return Pango.Analysis.Zero;
			return (Pango.Analysis) Marshal.PtrToStructure (raw, typeof (Pango.Analysis));
		}

		public bool Equals (Analysis other)
		{
			return true && ShapeEngine.Equals (other.ShapeEngine) && LangEngine.Equals (other.LangEngine) && Font.Equals (other.Font) && Level.Equals (other.Level) && Gravity.Equals (other.Gravity) && Flags.Equals (other.Flags) && Script.Equals (other.Script) && Language.Equals (other.Language) && _extra_attrs.Equals (other._extra_attrs);
		}

		public override bool Equals (object other)
		{
			return other is Analysis && Equals ((Analysis) other);
		}

		public override int GetHashCode ()
		{
			return this.GetType ().FullName.GetHashCode () ^ ShapeEngine.GetHashCode () ^ LangEngine.GetHashCode () ^ Font.GetHashCode () ^ Level.GetHashCode () ^ Gravity.GetHashCode () ^ Flags.GetHashCode () ^ Script.GetHashCode () ^ Language.GetHashCode () ^ _extra_attrs.GetHashCode ();
		}

		private static GLib.GType GType {
			get { return GLib.GType.Pointer; }
		}
#endregion
	}
}
