using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SharpOSC
{
    public struct Midi
    {
        public byte Port;
        public byte Status;
        public byte Data1;
        public byte Data2;

        public Midi(byte port, byte status, byte data1, byte data2)
        {
            this.Port = port;
            this.Status = status;
            this.Data1 = data1;
            this.Data2 = data2;
        }

		public override bool Equals(System.Object obj)
		{
			if (obj.GetType() == typeof(Midi))
			{
				if (this.Port == ((Midi)obj).Port && this.Status == ((Midi)obj).Status && this.Data1 == ((Midi)obj).Data1 && this.Data2 == ((Midi)obj).Data2)
					return true;
				else
					return false;
			}
			else if (obj.GetType() == typeof(byte[]))
			{
				if (this.Port == ((byte[])obj)[0] && this.Status == ((byte[])obj)[1] && this.Data1 == ((byte[])obj)[2] && this.Data2 == ((byte[])obj)[3])
					return true;
				else
					return false;
			}
			else
				return false;
		}

		public static bool operator ==(Midi a, Midi b)
		{
			if (a.Equals(b))
				return true;
			else
				return false;
		}

		public static bool operator !=(Midi a, Midi b)
		{
			if (!a.Equals(b))
				return true;
			else
				return false;
		}

		public override int GetHashCode()
		{
			return (Port << 24) + (Status << 16) + (Data1 << 8) + (Data2);
		}
    }
}
