00001 #region License
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #endregion
00027
00028 using System;
00029 using System.Collections.Generic;
00030 using System.Text;
00031 using System.Runtime.InteropServices;
00032
00033 namespace OpenTK.Compute
00034 {
00035 #region struct Handle<T>
00036
00037 struct Handle<T> : IEquatable<Handle<T>>, IComparable<Handle<T>>
00038 {
00039 #region Fields
00040
00041 IntPtr handle;
00042
00046 public IntPtr Value { get { return handle; } }
00047
00049 public static readonly Handle<T> Zero = new Handle<T>(IntPtr.Zero);
00050
00051 #endregion
00052
00053 #region Constructors
00054
00059 public Handle(IntPtr h) { handle = h; }
00060
00061 #endregion
00062
00063 #region Public Members
00064
00065 #region ToString
00066
00071 public override string ToString()
00072 {
00073 return Value.ToString();
00074 }
00075
00076 #endregion
00077
00078 #region Equals
00079
00085 public override bool Equals(object obj)
00086 {
00087 if (obj is Handle<T>)
00088 return this.Equals((Handle<T>)obj);
00089 return false;
00090 }
00091
00092 #endregion
00093
00094 #region GetHashCode
00095
00100 public override int GetHashCode()
00101 {
00102 return Value.GetHashCode();
00103 }
00104
00105 #endregion
00106
00107 #region public static explicit operator IntPtr(Handle<T> c)
00108
00114 public static explicit operator IntPtr(Handle<T> c)
00115 {
00116 return c != Handle<T>.Zero ? c.Value : IntPtr.Zero;
00117 }
00118
00119 #endregion
00120
00121 #region public static explicit operator Handle<T>(IntPtr p)
00122
00128 public static explicit operator Handle<T>(IntPtr p)
00129 {
00130 return new Handle<T>(p);
00131 }
00132
00133 #endregion
00134
00141 public static bool operator ==(Handle<T> left, Handle<T> right)
00142 {
00143 return left.Equals(right);
00144 }
00145
00152 public static bool operator !=(Handle<T> left, Handle<T> right)
00153 {
00154 return !left.Equals(right);
00155 }
00156
00157 #endregion
00158
00159 #region IComparable<Handle<T>> Members
00160
00166 public int CompareTo(Handle<T> other)
00167 {
00168 unsafe
00169 {
00170 return Value.ToInt64().CompareTo(other.Value.ToInt64());
00171 }
00172 }
00173
00174 #endregion
00175
00176 #region IEquatable<Handle<T>> Members
00177
00183 public bool Equals(Handle<T> other)
00184 {
00185 return Value == other.Value;
00186 }
00187
00188 #endregion
00189 }
00190
00191 #endregion
00192
00193 }