Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'mcs/class/corlib/System/Enum.cs')
-rw-r--r--mcs/class/corlib/System/Enum.cs557
1 files changed, 0 insertions, 557 deletions
diff --git a/mcs/class/corlib/System/Enum.cs b/mcs/class/corlib/System/Enum.cs
deleted file mode 100644
index 8f7d67fec04..00000000000
--- a/mcs/class/corlib/System/Enum.cs
+++ /dev/null
@@ -1,557 +0,0 @@
-//
-// System.Enum.cs
-//
-// Authors:
-// Miguel de Icaza (miguel@ximian.com)
-// Nick Drochak (ndrochak@gol.com)
-//
-// (C) Ximian, Inc. http://www.ximian.com
-//
-// TODO: Mucho left to implement.
-//
-
-using System.Collections;
-using System.Globalization;
-using System.Runtime.CompilerServices;
-
-namespace System {
- internal struct MonoEnumInfo {
- internal Type utype;
- internal Array values;
- internal string[] names;
-
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private static extern void get_enum_info (Type enumType, out MonoEnumInfo info);
-
- internal static void GetInfo (Type enumType, out MonoEnumInfo info) {
- get_enum_info (enumType, out info);
- Array.Sort (info.values, info.names);
- }
- };
-
- [MonoTODO]
- public abstract class Enum : ValueType, IComparable, IConvertible {
-
- // IConvertible methods Start -->
-
- [CLSCompliant(false)]
- public TypeCode GetTypeCode () {
- MonoEnumInfo info;
- MonoEnumInfo.GetInfo (this.GetType (), out info);
- return Type.GetTypeCode (info.utype);
- }
-
- bool IConvertible.ToBoolean (IFormatProvider provider)
- {
- return Convert.ToBoolean (get_value (), provider);
- }
-
- byte IConvertible.ToByte (IFormatProvider provider)
- {
- return Convert.ToByte (get_value (), provider);
- }
-
- char IConvertible.ToChar (IFormatProvider provider)
- {
- return Convert.ToChar (get_value (), provider);
- }
-
- DateTime IConvertible.ToDateTime (IFormatProvider provider)
- {
- return Convert.ToDateTime (get_value (), provider);
- }
-
- decimal IConvertible.ToDecimal (IFormatProvider provider)
- {
- return Convert.ToDecimal (get_value (), provider);
- }
-
- double IConvertible.ToDouble (IFormatProvider provider)
- {
- return Convert.ToDouble (get_value (), provider);
- }
-
- short IConvertible.ToInt16 (IFormatProvider provider)
- {
- return Convert.ToInt16 (get_value (), provider);
- }
-
- int IConvertible.ToInt32 (IFormatProvider provider)
- {
- return Convert.ToInt32 (get_value (), provider);
- }
-
- long IConvertible.ToInt64 (IFormatProvider provider)
- {
- return Convert.ToInt64 (get_value (), provider);
- }
-
- [CLSCompliant(false)]
- sbyte IConvertible.ToSByte (IFormatProvider provider)
- {
- return Convert.ToSByte (get_value (), provider);
- }
-
- float IConvertible.ToSingle (IFormatProvider provider)
- {
- return Convert.ToSingle (get_value (), provider);
- }
-
- [MonoTODO]
- object IConvertible.ToType (Type conversionType, IFormatProvider provider)
- {
- throw new NotImplementedException ();
- }
-
- [CLSCompliant(false)]
- public ushort ToUInt16 (IFormatProvider provider)
- {
- return Convert.ToUInt16 (get_value (), provider);
- }
-
- [CLSCompliant(false)]
- uint IConvertible.ToUInt32 (IFormatProvider provider)
- {
- return Convert.ToUInt32 (get_value (), provider);
- }
-
- [CLSCompliant(false)]
- ulong IConvertible.ToUInt64 (IFormatProvider provider)
- {
- return Convert.ToUInt64 (get_value (), provider);
- }
-
- // <-- End IConvertible methods
-
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- private extern object get_value ();
-
- public static Array GetValues (Type enumType) {
- if (null == enumType)
- throw new ArgumentNullException ("enumType cannot be null.");
-
- if (!enumType.IsEnum)
- throw new ArgumentException ("enumType is not an Enum type.");
-
- MonoEnumInfo info;
- MonoEnumInfo.GetInfo (enumType, out info);
- return info.values;
- }
-
- public static string[] GetNames (Type enumType) {
- if (null == enumType)
- throw new ArgumentNullException ("enumType cannot be null.");
-
- if (!enumType.IsEnum)
- throw new ArgumentException ("enumType is not an Enum type.");
-
- MonoEnumInfo info;
- MonoEnumInfo.GetInfo (enumType, out info);
- return info.names;
- }
-
- public static string GetName (Type enumType, object value) {
- if (null == enumType)
- throw new ArgumentNullException ("enumType cannot be null.");
- if (null == value)
- throw new ArgumentNullException ("value cannot be null.");
-
- if (!enumType.IsEnum)
- throw new ArgumentException ("enumType is not an Enum type.");
-
- MonoEnumInfo info;
- int i;
- value = ToObject (enumType, value);
- MonoEnumInfo.GetInfo (enumType, out info);
- for (i = 0; i < info.values.Length; ++i) {
- if (value.Equals (info.values.GetValue (i)))
- return info.names [i];
- }
- return null;
- }
-
- public static bool IsDefined (Type enumType, object value) {
- if (null == enumType)
- throw new ArgumentNullException ("enumType cannot be null.");
- if (null == value)
- throw new ArgumentNullException ("value cannot be null.");
-
- if (!enumType.IsEnum)
- throw new ArgumentException ("enumType is not an Enum type.");
-
- MonoEnumInfo info;
- MonoEnumInfo.GetInfo (enumType, out info);
-
- Type vType = value.GetType ();
- if (vType == typeof(String)) {
- return ((IList)(info.names)).Contains (value);
- } else if ((vType == info.utype) || (vType == enumType)) {
- int i;
- value = ToObject (enumType, value);
- MonoEnumInfo.GetInfo (enumType, out info);
- for (i = 0; i < info.values.Length; ++i) {
- if (value.Equals (info.values.GetValue (i)))
- return true;
- }
- return false;
- } else {
- throw new ArgumentException("The value parameter is not the correct type."
- + "It must be type String or the same type as the underlying type"
- + "of the Enum.");
- }
-
-
- }
-
- public static Type GetUnderlyingType (Type enumType) {
- if (null == enumType)
- throw new ArgumentNullException ("enumType cannot be null.");
-
- if (!enumType.IsEnum)
- throw new ArgumentException ("enumType is not an Enum type.");
-
- MonoEnumInfo info;
- MonoEnumInfo.GetInfo (enumType, out info);
- return info.utype;
- }
-
- public static object Parse (Type enumType, string value)
- {
- // Note: Parameters are checked in the other overload
- return Parse (enumType, value, false);
- }
-
- public static object Parse (Type enumType, string value, bool ignoreCase)
- {
- if (null == enumType)
- throw new ArgumentNullException ("enumType cannot be null.");
-
- if (null == value)
- throw new ArgumentNullException ("value cannot be null.");
-
- if (!enumType.IsEnum)
- throw new ArgumentException ("enumType is not an Enum type.");
-
- if (String.Empty == value.Trim())
- throw new ArgumentException ("value cannot be empty string.");
-
- MonoEnumInfo info;
- int i;
- MonoEnumInfo.GetInfo (enumType, out info);
-
- long retVal = 0;
- string[] names = value.Split(new char[] {','});
- TypeCode typeCode = ((Enum) info.values.GetValue (0)).GetTypeCode ();
- foreach (string name in names) {
- bool found = false;
- for (i = 0; i < info.values.Length; ++i) {
- if (String.Compare (name, info.names [i], ignoreCase) == 0) {
- switch (typeCode) {
- case TypeCode.Byte:
- retVal |= (long)((byte)info.values.GetValue (i));
- break;
- case TypeCode.SByte:
- retVal |= (long)((SByte)info.values.GetValue (i));
- break;
- case TypeCode.Int16:
- retVal |= (long)((short)info.values.GetValue (i));
- break;
- case TypeCode.Int32:
- retVal |= (long)((int)info.values.GetValue (i));
- break;
- case TypeCode.Int64:
- retVal |= (long)info.values.GetValue (i);
- break;
- case TypeCode.UInt16:
- retVal |= (long)((UInt16)info.values.GetValue (i));
- break;
- case TypeCode.UInt32:
- retVal |= (long)((UInt32)info.values.GetValue (i));
- break;
- case TypeCode.UInt64:
- retVal |= (long)((UInt64)info.values.GetValue (i));
- break;
- }
- found = true;
- break;
- }
- }
- if (!found)
- throw new ArgumentException ("The requested value was not found");
-
- }
- return ToObject(enumType, retVal);
- }
-
- /// <summary>
- /// Compares the enum value with another enum value of the same type.
- /// </summary>
- ///
- /// <remarks>
- ///
- public int CompareTo (object obj)
- {
- Type thisType;
-
- if (obj == null)
- return 1;
-
- thisType = this.GetType();
- if (obj.GetType() != thisType){
- throw new ArgumentException(
- "Object must be the same type as the "
- + "enum. The type passed in was "
- + obj.GetType().ToString()
- + "; the enum type was "
- + thisType.ToString() + ".");
- }
-
- object value1, value2;
-
- value1 = this.get_value ();
- value2 = ((Enum)obj).get_value();
-
- return ((IComparable)value1).CompareTo (value2);
- }
-
- public override string ToString ()
- {
- return ToString ("G", null);
- }
-
- public string ToString (IFormatProvider provider)
- {
- return ToString ("G", provider);
- }
-
- public string ToString (String format)
- {
- return ToString (format, null);
- }
-
- [MonoTODO]
- public string ToString (String format, IFormatProvider provider)
- {
- // provider is not used for Enums
-
- if (format == String.Empty || format == null){
- format = "G";
- }
- return Format (this.GetType(), this.get_value (), format);
- }
-
- public static object ToObject(Type enumType, byte value)
- {
- return ToObject (enumType, (object)value);
- }
-
- public static object ToObject(Type enumType, short value)
- {
- return ToObject (enumType, (object)value);
- }
- public static object ToObject(Type enumType, int value)
- {
- return ToObject (enumType, (object)value);
- }
- public static object ToObject(Type enumType, long value)
- {
- return ToObject (enumType, (object)value);
- }
-
- [MethodImplAttribute(MethodImplOptions.InternalCall)]
- public static extern object ToObject(Type enumType, object value);
-
- [CLSCompliant(false)]
- public static object ToObject(Type enumType, sbyte value)
- {
- return ToObject (enumType, (object)value);
- }
- [CLSCompliant(false)]
- public static object ToObject(Type enumType, ushort value)
- {
- return ToObject (enumType, (object)value);
- }
- [CLSCompliant(false)]
- public static object ToObject(Type enumType, uint value)
- {
- return ToObject (enumType, (object)value);
- }
- [CLSCompliant(false)]
- public static object ToObject(Type enumType, ulong value)
- {
- return ToObject (enumType, (object)value);
- }
-
- public override bool Equals (object obj)
- {
- if (null == obj)
- return false;
-
- if (obj.GetType() != this.GetType())
- return false;
-
- object v1 = this.get_value ();
- object v2 = ((Enum)obj).get_value ();
-
- return v1.Equals (v2);
- }
-
- public override int GetHashCode ()
- {
- object v = this.get_value ();
- return v.GetHashCode ();
- }
-
- [MonoTODO]
- public static string Format (Type enumType, object value, string format)
- {
- if (null == enumType)
- throw new ArgumentNullException("enumType cannot be null");
- if (null == value)
- throw new ArgumentNullException("value cannot be null");
- if (null == format)
- throw new ArgumentNullException("format cannot be null");
-
- if (!enumType.IsEnum)
- throw new ArgumentException("enumType is not an Enum Type");
-
- Type vType = value.GetType();
- if (vType != enumType && vType != Enum.GetUnderlyingType(enumType))
- throw new ArgumentException();
-
-
- if (format.Length != 1)
- throw new FormatException ("Format String can be only \"G\",\"g\",\"X\"," +
- "\"x\",\"F\",\"f\",\"D\" or \"d\".");
-
- char formatChar = format [0];
- if ((formatChar == 'G' || formatChar == 'g')
- && Attribute.IsDefined(enumType, typeof(FlagsAttribute)))
- formatChar = 'F';
-
- string retVal = "";
- switch (formatChar) {
- case 'G':
- case 'g':
- retVal = GetName (enumType, value);
- if (retVal == null)
- retVal = value.ToString();
- break;
- case 'X':
- case 'x':
- retVal = value.ToString();
- long xValue = Int64.Parse(retVal);
- // FIXME: Not sure if padding should always be with precision
- // 8, if it's culture specific, or what. This works for me.
- retVal = xValue.ToString("x8");
- break;
- case 'D':
- case 'd':
- retVal = value.ToString();
- break;
- case 'F':
- case 'f':
- MonoEnumInfo info;
- MonoEnumInfo.GetInfo (enumType, out info);
- // This is ugly, yes. We need to handle the different integer
- // types for enums. If someone else has a better idea, be my guest.
- switch (((Enum)info.values.GetValue (0)).GetTypeCode()) {
- case TypeCode.Byte:
- byte byteFlag = (byte)value;
- byte byteenumValue;
- for (int i = info.values.Length-1; i>=0 && byteFlag != 0; i--) {
- byteenumValue = (byte)info.values.GetValue (i);
- if ((byteenumValue & byteFlag) == byteenumValue){
- retVal = info.names[i] + (retVal == String.Empty ? "" : ", ") + retVal;
- byteFlag -= byteenumValue;
- }
- }
- break;
- case TypeCode.SByte:
- SByte sbyteFlag = (SByte)value;
- SByte sbyteenumValue;
- for (int i = info.values.Length-1; i>=0 && sbyteFlag != 0; i--) {
- sbyteenumValue = (SByte)info.values.GetValue (i);
- if ((sbyteenumValue & sbyteFlag) == sbyteenumValue){
- retVal = info.names[i] + (retVal == String.Empty ? "" : ", ") + retVal;
- sbyteFlag -= sbyteenumValue;
- }
- }
- break;
- case TypeCode.Int16:
- short Int16Flag = (short)value;
- short Int16enumValue;
- for (int i = info.values.Length-1; i>=0 && Int16Flag != 0; i--) {
- Int16enumValue = (short)info.values.GetValue (i);
- if ((Int16enumValue & Int16Flag) == Int16enumValue){
- retVal = info.names[i] + (retVal == String.Empty ? "" : ", ") + retVal;
- Int16Flag -= Int16enumValue;
- }
- }
- break;
- case TypeCode.Int32:
- int Int32Flag = (int)value;
- int Int32enumValue;
- for (int i = info.values.Length-1; i>=0 && Int32Flag != 0; i--) {
- Int32enumValue = (int)info.values.GetValue (i);
- if ((Int32enumValue & Int32Flag) == Int32enumValue){
- retVal = info.names[i] + (retVal == String.Empty ? "" : ", ") + retVal;
- Int32Flag -= Int32enumValue;
- }
- }
- break;
- case TypeCode.Int64:
- long Int64Flag = (long)value;
- long Int64enumValue;
- for (int i = info.values.Length-1; i>=0 && Int64Flag != 0; i--) {
- Int64enumValue = (long)info.values.GetValue (i);
- if ((Int64enumValue & Int64Flag) == Int64enumValue){
- retVal = info.names[i] + (retVal == String.Empty ? "" : ", ") + retVal;
- Int64Flag -= Int64enumValue;
- }
- }
- break;
- case TypeCode.UInt16:
- UInt16 UInt16Flag = (UInt16)value;
- UInt16 UInt16enumValue;
- for (int i = info.values.Length-1; i>=0 && UInt16Flag != 0; i--) {
- UInt16enumValue = (UInt16)info.values.GetValue (i);
- if ((UInt16enumValue & UInt16Flag) == UInt16enumValue){
- retVal = info.names[i] + (retVal == String.Empty ? "" : ", ") + retVal;
- UInt16Flag -= UInt16enumValue;
- }
- }
- break;
- case TypeCode.UInt32:
- UInt32 UInt32Flag = (UInt32)value;
- UInt32 UInt32enumValue;
- for (int i = info.values.Length-1; i>=0 && UInt32Flag != 0; i--) {
- UInt32enumValue = (UInt32)info.values.GetValue (i);
- if ((UInt32enumValue & UInt32Flag) == UInt32enumValue){
- retVal = info.names[i] + (retVal == String.Empty ? "" : ", ") + retVal;
- UInt32Flag -= UInt32enumValue;
- }
- }
- break;
- case TypeCode.UInt64:
- UInt64 UInt64Flag = (UInt64)value;
- UInt64 UInt64enumValue;
- for (int i = info.values.Length-1; i>=0 && UInt64Flag != 0; i--) {
- UInt64enumValue = (UInt64)info.values.GetValue (i);
- if ((UInt64enumValue & UInt64Flag) == UInt64enumValue){
- retVal = info.names[i] + (retVal == String.Empty ? "" : ", ") + retVal;
- UInt64Flag -= UInt64enumValue;
- }
- }
- break;
- }
- break;
- default:
- throw new FormatException ("Format String can be only \"G\",\"g\",\"X\"," +
- "\"x\",\"F\",\"f\",\"D\" or \"d\".");
- }
-
- return retVal;
- }
- }
-}