EnumHelper.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. using System;
  2. using System.Collections.Generic;
  3. namespace UnityEditor.Recorder
  4. {
  5. static class EnumHelper
  6. {
  7. internal static int GetEnumValueFromMaskedIndex<TEnum>(int index, int mask)
  8. {
  9. if (!typeof(TEnum).IsEnum) throw new ArgumentException("Arg not an enum");
  10. var values = Enum.GetValues(typeof(TEnum));
  11. for( int i = 0, j = -1; i < values.Length; i++ )
  12. {
  13. if (((int)values.GetValue(i) & mask) != 0)
  14. j++;
  15. if (j == index)
  16. return (int)values.GetValue(i);
  17. }
  18. throw new ArgumentException("invalid masked index");
  19. }
  20. internal static int GetMaskedIndexFromEnumValue<TEnum>(int value, int mask)
  21. {
  22. if (!typeof(TEnum).IsEnum) throw new ArgumentException("Arg not an enum");
  23. var values = Enum.GetValues(typeof(TEnum));
  24. for( int i = 0, j = -1; i < values.Length; i++ )
  25. {
  26. var v = (int)values.GetValue(i);
  27. if ((v & mask) != 0)
  28. {
  29. j++;
  30. if (v == value)
  31. return j;
  32. }
  33. }
  34. return 0;
  35. }
  36. internal static string[] MaskOutEnumNames<TEnum>(int mask )
  37. {
  38. if (!typeof(TEnum).IsEnum) throw new ArgumentException("Arg not an enum");
  39. var names = Enum.GetNames(typeof(TEnum));
  40. var values = Enum.GetValues(typeof(TEnum));
  41. var result = new List<String>();
  42. for( int i = 0; i < values.Length; i++ )
  43. {
  44. if( ((int)values.GetValue(i) & mask ) != 0 )
  45. result.Add( (string)names.GetValue(i) );
  46. }
  47. return result.ToArray();
  48. }
  49. }
  50. }