123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- using System;
- namespace FirstGearGames.Utilities.Maths
- {
- public static class Enums
- {
- /// <summary>
- /// Determine an enum value from a given string. This can be an expensive function.
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="text">Text of string.</param>
- /// <param name="defaultValue">Default value if enum couldn't be found.</param>
- /// <returns>Enum found or default value if no enum is found.</returns>
- public static T FromString<T>(string text, T defaultValue)
- {
- //If string is empty or null return default value.
- if (string.IsNullOrEmpty(text))
- return defaultValue;
- //If enum isn't defined return default value.
- if (!Enum.IsDefined(typeof(T), (string)text))
- return defaultValue;
- //Return parsed value.
- return (T)Enum.Parse(typeof(T), text, true);
- }
- /// <summary>
- /// Returns if whole(extended enum) has any of the part values.
- /// </summary>
- /// <param name="whole"></param>
- /// <param name="part">Values to check for within whole.</param>
- /// <returns>Returns true part is within whole.</returns>
- public static bool Contains(this Enum whole, Enum part)
- {
- //If not the same type of Enum return false.
- /* Commented out for performance. Designer
- * should know better than to compare two different
- * enums. */
- //if (!SameType(value, target))
- // return false;
- /* Convert enum values to ulong. With so few
- * values a uint would be safe, but should
- * the options expand ulong is safer. */
- ulong wholeNum = Convert.ToUInt64(whole);
- ulong partNum = Convert.ToUInt64(part);
- return ((wholeNum & partNum) != 0);
- }
- /// <summary>
- /// Returns if part values contains any of whole(extended enum).
- /// </summary>
- /// <param name="whole"></param>
- /// <param name="part"></param>
- /// <returns>Returns true whole is within part.</returns>
- public static bool ReverseContains(this Enum whole, Enum part)
- {
- //If not the same type of Enum return false.
- /* Commented out for performance. Designer
- * should know better than to compare two different
- * enums. */
- //if (!SameType(value, target))
- // return false;
- /* Convert enum values to ulong. With so few
- * values a uint would be safe, but should
- * the options expand ulong is safer. */
- ulong wholeNum = Convert.ToUInt64(whole);
- ulong partNum = Convert.ToUInt64(part);
- return ((partNum & wholeNum) != 0);
- }
- /// <summary>
- /// Returns if an enum equals a specified value.
- /// </summary>
- /// <param name="value"></param>
- /// <param name="target"></param>
- /// <returns></returns>
- public static bool Equals(this Enum value, Enum target)
- {
- //If not the same type of Enum return false.
- /* Commented out for performance. Designer
- * should know better than to compare two different
- * enums. */
- //if (!SameType(value, target))
- // return false;
- ulong valueNum = Convert.ToUInt64(value);
- ulong wholeNum = Convert.ToUInt64(target);
- return (valueNum == wholeNum);
- }
- /// <summary>
- /// Returns if a is the same Enum as b.
- /// </summary>
- /// <param name="a"></param>
- /// <param name="target"></param>
- /// <returns></returns>
- public static bool SameType(Enum a, Enum b)
- {
- return (a.GetType() == b.GetType());
- }
- }
- }
|