// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== /*============================================================ ** ** Class: IntPtr ** ** ** Purpose: Platform neutral integer ** ** Date: July 21, 2000 ** ===========================================================*/ namespace System { using System; using System.Globalization; using System.Runtime.CompilerServices; //| [NoCCtor] public struct IntPtr { unsafe private void* m_value; // The compiler treats void* closest to uint hence explicit casts are required to preserve int behavior //| [Intrinsic] public static readonly IntPtr Zero; //| [Intrinsic] public static readonly int Size; //| [Intrinsic] public extern IntPtr(int value); //| [Intrinsic] public extern IntPtr(long value); //| [CLSCompliant(false)] [Intrinsic] public extern unsafe IntPtr(void* value); //| public unsafe override bool Equals(Object obj) { if (obj is IntPtr) { return (m_value == ((IntPtr)obj).m_value); } return false; } //| public unsafe override int GetHashCode() { return (int)m_value; } //| [Intrinsic] public extern int ToInt32(); //| [Intrinsic] public extern long ToInt64(); //| [Inline] public unsafe override String ToString() { if(sizeof(IntPtr) == 4) { return this.ToInt32().ToString(); } return this.ToInt64().ToString(); } //| [CLSCompliant(false)] [Intrinsic] public extern static unsafe explicit operator void* (IntPtr value); [CLSCompliant(false)] // [Intrinsic] public extern static explicit operator UIntPtr (IntPtr value); //| [Intrinsic] public extern static explicit operator IntPtr (int value); //| [Intrinsic] public extern static explicit operator IntPtr (long value); //| [CLSCompliant(false)] [Intrinsic] public extern static unsafe explicit operator IntPtr (void* value); //| [Intrinsic] public extern static explicit operator int (IntPtr value); //| [Intrinsic] public extern static explicit operator long (IntPtr value); //| [Intrinsic] public extern static bool operator == (IntPtr value1, IntPtr value2); //| [Intrinsic] public extern static bool operator != (IntPtr value1, IntPtr value2); //| [CLSCompliant(false)] [Intrinsic] public extern unsafe void* ToPointer(); [Intrinsic] public extern static IntPtr operator - (IntPtr value1, IntPtr value2); [Intrinsic] public extern static IntPtr operator - (IntPtr value1, int value2); [Intrinsic] public extern static IntPtr operator -- (IntPtr value); [CLSCompliant(false)] // [Intrinsic] public extern static unsafe sbyte * operator + (sbyte* value1, IntPtr value2); [Intrinsic] public extern static IntPtr operator + (IntPtr value1, IntPtr value2); [Intrinsic] public extern static IntPtr operator ++ (IntPtr value); [Intrinsic] public extern static bool operator < (IntPtr value1, IntPtr value2); [Intrinsic] public extern static bool operator > (IntPtr value1, IntPtr value2); [Intrinsic] public extern static bool operator <= (IntPtr value1, IntPtr value2); [Intrinsic] public extern static bool operator >= (IntPtr value1, IntPtr value2); } }